一、spark到底是什么?
Apache Spark? is a unified analytics engine for large-scale data processing
类似于Hadoop MapReduce 并行计算框架:分析处理海量数据
与MapReduce相比:
MapReduce: map,reduce函数
将分析的结果写入到磁盘中,并且后续需要处理数据,再次从磁盘里读取,以此往复。
而spark是将中间结果写入到内存中。
二、spark分析数据过程,3步骤走
第一步:读取数据(输入)
将要处理的数据 读取 封装到一个集合RDD(类似一个List)
val inputRDD = sc.textFile("...")
第二步:数据的处理(分析)
调用RDD中的函数(高阶函数,类比List中的高阶函数)进行分析
RDD -> 函数 ->另外RDD :Transformation函数
比如:map/filter/filterNot/flatMap/reduceByKey
第三步:数据的输出(输出)
调用RDD中函数,返回的不是RDD类型
outoutRDD.# :Action函数
#:count/foreach/first/take/saveAsTextFile
3步组合在一起,就是链式编程
sc.textFile("...").transformation.action
三、Runs Everywhere
-1 spark处理的数据在哪里
hdfs/hive/hbase/TSV/CSV/ORC/Parquet/JDBC/redis/mongDB/ES/.....
-2 spark运行在哪里
java/scala编程,打包JAR包
-本地模式
local mode
-集群模式
Yarn cluster、standalone cluster、Mesos cluster
四、总结为什么很多人喜欢有spark的原因
--- 代码
很小,很少 ,在业务逻辑上,函数式编程,简洁
--- 测试
测试很简单
由于使用Scala语言编写框架,提供Scala shell 交互式命令行
在window系统下,直接本地测试,不需要任务插件
--- 监控
运行的每一个spark开发程序,都有自己的一个监控页面,端口号:4040
- --速度快
比MapReduce快
五、spark安装
首先需要先安装JDK8,安装Scala。安装很简单,只需要配置一下以及步骤就好了。
安装过程:
(1)上传解压
(2)修改配置(conf):spark-env.sh
mv spark-env.sh.template spark-env.sh
conf/spark-env.sh
JAVA_HOME=/opt/modules/jdk1.8.0_91
SCALA_HOME=/opt/modules/scala-2.11.8
HADOOP_CONF_DIR=/opt/cdh5.7.6/hadoop-2.6.0-cdh5.7.6/etc/hadoop
(3)启动
./spark-shell --help
./spark-shell --master local[2]
六、spark application 和MapReduce application区别
spark-shell --master local[2]
运行一个spark application在本地
[2]:表示线程Tread
每个task运行在Tread中运行的,都需要1 core cpu
对于MapReduce application来说
一个MapReduce application就是一个mapreduce job
每个task (map,reduce)运行在进程中(JVM process)