mapreduce:一系列的步骤,都写在了两个步骤里,不适合迭代计算(凸优化,梯度下降),没有办法做交互式数据挖掘(比如说,输入一次,等一个小时,再输入一次,进行计算),它擅长的是长时间大数据批量计算。
迭代式计算:不断有新的计算产生,新的计算使用之前计算的结果
mapreduce:提交任务,从磁盘读取数据,写入磁盘,再提交任务,重复上述步骤。不同任务的提交,没有程序上的关联,不是整体的。
spark:读取一次数据,在一个编程模型完成,只需要提交一次。任务与任务之间可以基于内存进行数据交换。
spark是all in one结构,spark sql,spark streaming,Mlib,GraphX都放在一起。
1这样所有的程序库和高级组件都可以从下层改进中获益。
2运行整个软件栈的代价变小,一个机构只要运行部署一套软件即可。
3上面四个组件,可以有数据交互
集群配置
1个master
2个worker
然后配置conf下的slaves,spark-env.sh
scp -r spark-2.1.1-bin-hadoop2.7 hadoop@HA3VM03:/home/hadoop/app/
配置完成
执行sbin目录下的./start-all.sh(有启动失败的时候,后来发现是namenode没有启动好)
然后访问http://HA3VM01:8080来验证
然后配置job history server(在应用运行时和运行结束都可以登录4000端口来看日志)(用到了hdfs)(spark-defaults.conf,spark-env.sh)
(在HA3VM01:50070中创建directory目录用来存放日志)
启动job history server
要先启动hdfs(如果spark是standalone模式,要启动zookeeper)
sbin/start-history-server.sh
然后访问http://ha3vm01:4000/,看是否成功
执行spark
/home/bigdata/hadoop/spark-2.1.1-bin-hadoop2.7/bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://HA3VM01:7077 \
--executor-memory 1G \
--total-executor-cores 1 \
/home/hadoop/app/spark-2.1.1-bin-hadoop2.7/examples/jars/spark-examples_2.11-2.1.1.jar \
打开sparkshell(命令:bin/spark-shell)
wordcount
sc.textFile("hdfs://HA3VM01:9000/README.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).saveAsTextFile("hdfs://HA3VM01:9000/out")
01:02:00