• 1. Spark基础知识—by 球哥
  • 2. 大数据学习网介绍我们的网址是:bigdatastudy.cn 我们提供专业的大数据学习视频,包括Hadoop,Spark,Storm,Mahout,机器学习等。 我们定价合理,让每个人都学得起大数据。
  • 3. 友情提示本系列课程主要由Learning.Spark这本书整理而来。 本系列课程主要目的,帮助想要学习Spark的同学入门。 本系列课程中的ppt可自由传播,无需任何授权,但不要用于商业用途哦。 本系列课程中的视频不要自由传播哦,如果同学们觉得课程价格不合理,欢迎在下面的群中反馈,我们会考虑调整价格的。 Spark学习交流群:368770186,371896553
  • 4. Spark基础知识Spark下载 Spark的Shells Spark的核心概念
  • 5. Spark运行环境Spark 是Scala写的, 运行在JVM上。所以运行环境是Java6或者以上。 如果想要使用 Python API,需要安装Python 解释器2.6版本或者以上。 目前Spark(1.2.0版本) 与Python 3不兼容。
  • 6. Spark下载下载地址:http://spark.apache.org/downloads.html,选择Pre-built for Hadoop 2.4 and later 这个包,点击直接下载,这会下载一个spark-1.2.0-bin-hadoop2.4.tgz的压缩包 搭建Spark不需要Hadoop,如果你有hadoop集群或者hdfs,你可以下载相应的版本。 解压:tar -zxvf spark-1.2.0-bin-hadoop2.4.tgz
  • 7. Spark目录README.md 开始Spark之旅的简单介绍。 bin 包含用来和Spark交互的可执行文件,如Spark shell。 core, streaming, python, … 包含主要组件的源代码。 examples 包含一些有用的单机Spark job。 你可以研究和运行这些例子,来学习Spark API。
  • 8. Spark的ShellsSpark的shell使你能够处理分布在集群上的数据(这些数据可以是分布在硬盘上或者内存中)。 Spark可以把数据加载到工作节点的内存中,因此,许多分布式处理(甚至是分布式的1T数据的处理)都可以在几秒内完成。 上面的特性,使迭代式计算,实时查询、分析一般能够在shells中完成。Spark提供了Python shells和 Scala shells。
  • 9. Spark的Shells打开Spark的Python Shell: 到Spark目录,Spark的Python Shell也叫做PySpark Shell bin/pyspark 打开PySpark Shell之后的界面
  • 10. Spark的Shells打开Spark的Scala Shell: 到Spark目录 bin/pysparkbin/spark-shell打开Scala版本的shell 打开之后的界面
  • 11. Spark的Shells例子: scala> val lines = sc.textFile("../../testfile/helloSpark") // 创建一个叫lines的RDD lines: org.apache.spark.rdd.RDD[String] = ../../testfile/helloSpark MappedRDD[1] at textFile at :12 scala> lines.count() // 对这个RDD中的行数进行计数 res0: Long = 2 scala> lines.first() // 文件中的第一行 res1: String = hello spark 修改日志级别:conf/log4j.properties log4j.rootCategory=WARN, console
  • 12. Spark的核心概念Driver program: 包含程序的main()方法,RDDs的定义和操作。(在上面的例子中,driver program就是Spark Shell它本身了) 它管理很多节点,我们称作executors。 count()操作解释(每个executor计算文件的一部分,最后合并)。
  • 13. Spark的核心概念SparkContext: Driver programs 通过一个 SparkContext 对象访问 Spark,SparkContext 对象代表和一个集群的连接。 在Shell中SparkContext 自动创建好了,就是sc, 例子: sc 变量 >>> sc
  • 14. Spark的核心概念RDDs: 在Spark中,我们通过分布式集合(distributed collections,也就是RDDs)来进行计算,这些分布式集合,并行的分布在整个集群中。 RDDs 是 Spark分发数据和计算的基础抽象类。 用SparkContext创建RDDs 上面例子中使用sc.textFile()创建了一个RDD,叫lines,它是从我们的本机文本文件中创建的,这个RDD代表了一个文本文件的每一行。我们可以在RDD上面进行各种并行化的操作,例如计算数据集中元素的个数或者打印出第一行。
  • 15. Spark的核心概念向Spark传递函数: 向Spark传递函数是Spark的一个常用功能,许多Spark API是围绕它展开的。 例子:filtering scala> val lines = sc.textFile("../../testfile/helloSpark") lines: spark.RDD[String] = MappedRDD[...] scala> val worldLines = lines.filter(line => line.contains("world")) pythonLines: spark.RDD[String] = FilteredRDD[...] scala> worldLines .collect()
  • 16. Spark的核心概念向Spark传递函数: 上面例子中的=>语法是 Scala中定义函数的便捷方法。你也可以先定义函数再引用: 例子: def hasWorld(line:String) : Boolean= {line.contains("world")} worldLines = lines.filter(hasWorld) 像filter 这样的基于函数的操作,也是在集群上并行执行的。
  • 17. Spark的核心概念向Spark传递函数: 需要注意的地方: 如果你传递的函数是一个对象的成员,或者包含一个对象中字段的引用(例如self.field),Spark会把整个对象都发送到工作节点上,这样会比仅仅发送你关心的信息要大很多,而且有时候会带来一些奇怪的问题。 传送信息太多解决方法:我们可以把关心的字段抽取出来,只传递关心的字段。 奇怪问题的避免:序列化包含函数的对象,函数和函数中引用的数据都需要序列化(实现Java的Serializable interface)。 如果Scala中出现NotSerializableException,一般情况下,都是因为没序列化。
  • 18. 小结Spark的Shells Spark的核心概念