Spark之命令
1.spark运行模式有4种:
a.local 多有用测试,
b. standalone:spark 集群模式,使用spark自己的调度方式。
c. Yarn: 对MapreduceV1升级的经典版本,支持spark。
d.Mesos:类似Yarn的资源调度框架,提供了有效的、跨分布式应用或框架的资源隔离和共享,可以运行hadoop、spark等框架
2.spark local 模式(shell )
Spark standalone加载数据(shell运行spark-shell) 读取本地文件: var file = sc.textFile("/root/test.txt").collect 加载远程hdfs文件: var files = sc.textFile("hdfs://192.168.2.2:8020/user/superman").collect (读取hdfs数据时使用的还是inputFormat) standalone WordCount sc.textFile("/root/test.txt").flatMap(_.split("\\t")).map(x=>(x,1)).reduceByKey(_+_).collect
Spark standalone保存结果集数据 保存数据到本地: result.saveAsTextFile("/root/tmp") (tmp文件夹必须不存在) 保存数据到远程hdfs文件: result.saveAsTextFile("hdfs://192.168.122.212:8020/user/superman/tmp") (tmp文件夹必须不存在) 设置输出结果集文件数量: result.repartition(1).saveAsTextFile 任务提交 spark-submit (推荐) 其它也可⾏,如sbt run, java -jar 等等
提交:spark on standalonespark-submit --class SsdTest /zzy/original-spark2-1.0-SNAPSHOT.jar hdfs://hadoop13:9000/hello hdfs://hadoop13:9000/out1
Spark on YARN
需要配置hadoop_conf_dir,hadoop_home
任务提交:
(standalone)spark-submit --class SsdTest /zzy/original-spark2-1.0-SNAPSHOT.jar hdfs://hadoop13:9000/hello hdfs://hadoop13:9000/out1
命令格式:
spark –submit –class path.your.class --master yarn-cluster [options][app options]spark-submit --class you.jar /--master yarn-cluster\--driver-memory 4g\--executor-memory 2g\--executor -cores 1\lib\spark-examples*.jar\ 10 提交:on yarn spark-submit --class classname inputyour.jar input your.text outpath spark-submit --class SaprkOnYarn original-spark2-1.0-SNAPSHOT.jar /hello out2(hadop默认是/usr/root文件夹)
4.RDD,可恢复分布式数据集,弹性分布式数据集
5.spark 对比mapreduce优势的总结
spark具有所有优点,并不是依靠一个人或者是一个团队的力量,而是站在巨人的肩膀上
1.依靠scala强有力的函数式变成
2.actor通信模式,akka做底层架构
3.MR架构思想
4.数据共享快,省去了mapreduce的shuffle过程中至少三次存入磁盘所带来的额外开销
5.spark的DAG(执行过程首先省城一张有向无环图)做的好,越靠近编译器,就性能越好,优化也更好。
6.任务使用线程启动并执行,比mapreduce使用进程执行任务要有很大优势
7.delay scheduling ---延迟执行
6.Spark Streaming
流失系统的特点:
1.低延迟。
2.高性能
3.分布式
4.可扩展。伴随着业务的发展,我们的数据量、计算量可能会越来越大,所以系统是可扩展的。
5.容错。这是分布式系统中通用问题。一个节点挂了不能影响应用。
对比storm
1.同一套系统,安装spark之后就一切都有了
2.spark 较强的容错能力,storm 使用较广,更稳定
3.storm是用Clojure语言去写的,它的很多扩展都是用java去写的
4.任务执行方面和storm 的区别是:
i.spark streaming 数据进来是一小段时间的RDD,数据进来之后切成一小块一小块进行处理
ii.storms是基于record形式来的,进来的是一个tuple,一条进来就处理一下
5.中间过程实质上就是spark引擎,只不过sparkstreaming 在spark之后引擎之上动了一点手脚:对进入spark引擎之前的数据进行了一个封装,方便进行基于时间片的小批量作业,交给spark 进行计算。