概念
spark是基于内存的计算引擎,计算速度非常快,仅仅只涉及到数据的计算,没有涉及到数据的存储。
MapReduce的局限性
- Map结果写磁盘,Reduce写HDFS,多个MR之间通过HDFS交换数据
- 任务调度和启动开销大
- 无法充分利用内存
- 不适合迭代计算(如机器学习、图计算等)、交互式处理(数据挖掘)
- 不适合流式处理(点击日志分析)
- MapReduce的编程不够灵活,仅支持Map和Reduce两种操作
Spark特点
- 速度快,job的中间结果可以不落地,可以存放在内存中,job以线程方式运行在进程中
- 易用性,可以通过java/scala/python/R开发spark应用程序
- 通用性,可以使用spark sql/spark streaming/mlib/Graphx
- 兼容性,spark程序可以运行在standalone/yarn/mesos
spark-submit
spark-submit 可以提交任务到 spark 集群执行,也可以提交到 hadoop 的 yarn 集群执行。
spark-submit \
--class org.apache.spark.examples.Spark \ # 应用程序的主类
--master yarn \ # master 的地址,提交任务到哪里执行
--queue Adhoc \ # 队列名
--conf spark.submit.deployMode=cluster \ # 在本地 (client) 启动 driver 或在 cluster 上启动,默认是 client
--conf spark.driver.memory=4g \ # Driver内存,默认 1G
--conf spark.executor.memory=4g \ # 每个 executor 的内存,默认是1G
--conf spark.executor.cores=4 \ # 每个 executor 的核数
--conf spark.sql.shuffle.partitions=2400 \
--conf spark.executor.instances=400 \
--conf spark.yarn.maxAppAttempts=1 \
hdfs://examples/target/scala-2.11/jars/spark-examples.jar \ # 含有应用的jar包地址
--is-left-parquet "false" \ # 程序参数