1.spark优势

  1. :与Hadoop的MapReduce相比,Spark基于内存的运算要快100倍以上;而基于磁盘的运算也要快10倍以上。Spark实现了高效的DAG执行引擎,可以通过基于内存来高效地处理数据流。
  2. 容易使用:Spark支持Java、Python和Scala的API,还支持超过80种高级算法,使用户可以快速构建不同应用。而且Spark支持交互式的Python和Scala的Shell,这意味着可以非常方便的在这些Shell中使用Spark集群来验证解决问题的方法,而不是像以前一样,需要打包、上传集群、验证等。这对于原型开发非常重要。
  3. 通用性:Spark提供了统一的解决方案。Spark可以用于批处理、交互式查询(通用Spark SQL)、实时流处理(通过Spark Streaming)、机器学习(通过Spark MLlib)和图计算(通过Spark GraphX)。
    这些不同类型的处理都可以在同一应用中无缝使用。Spark统一的解决方案非常具有吸引力,毕竟任何公司都想用统一的平台处理问题,减少开发和维护的人力成本和部署平台的物理成本。当然还有,作为统一的解决方案,Spark并没有以牺牲性能为代价。相反,在性能方面Spark具有巨大优势。
  4. 可融合性:Spark非常方便的与其他开源产品进行融合。比如,Spark可以使用Hadoop的YARN和Apache Mesos作为它的资源管理和调度器,并且可以处理所有Hadoop支持的数据,包括HDFS、HBase和Cassanda等。这对于已部署Hadoop集群的用户特别重要,因为不需要做任何数据迁移就可以使用Spark强大的处理能力。Spark也可以不依赖第三方的资源管理器和调度器,它实现了Standalone作为其内置资源管理器和调度框架,这样进一步降低了Spark的使用门槛,使得所有人可以非常容易地部署和使用Spark。此外Spark还提供了在EC2上部署Standalone的Spark集群的工具。

    2.重要角色

    2.1Driver(驱动器)

    2.2Executor(执行器)

3.搭建

3.1Local模式

  1. 1.官方求PI案例
  2. bin/spark-submit \
  3. --class org.apache.spark.examples.SparkPi \
  4. --executor-memory 1G \
  5. --total-executor-cores 2 \
  6. ./examples/jars/spark-examples_2.11-2.1.1.jar \
  7. 100
  8. 2.wordcount
  9. spark目录下创建input文件夹编写相应的单词文件
  10. bin/spark-shell
  11. sc.textFile("input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect
  12. spark-ui界面 hadoop101:4040查看执行情况

3.2Standalone模式

image.png

  1. 构建一个由Master+Slave构成的Spark集群,Spark运行在集群中。
  2. 1.mv slaves.template slaves
  3. 2.vim slaves
  4. hadoop101
  5. hadoop102
  6. hadoop103
  7. 3.mv spark-env.sh.template spark-env.sh
  8. SPARK_MASTER_HOST=hadoop102
  9. SPARK_MASTER_PORT=7077
  10. 4.分发spark
  11. 5.启动 sbin/start-all.sh
  12. 如果遇到 JAVA_HOME not set 异常,可以在sbin目录下的spark-config.sh 文件中加入如下配置:export JAVA_HOME=XXXX
  13. bin/spark-submit \
  14. --class org.apache.spark.examples.SparkPi \
  15. --master spark://hadoop102:7077 \
  16. --executor-memory 1G \
  17. --total-executor-cores 2 \
  18. ./examples/jars/spark-examples_2.11-2.1.1.jar \
  19. 100

3.3HA配置

  1. 1.spark-env.sh中添加上如下内容:
  2. export SPARK_DAEMON_JAVA_OPTS="
  3. -Dspark.deploy.recoveryMode=ZOOKEEPER
  4. -Dspark.deploy.zookeeper.url=hadoop102,hadoop103,hadoop104
  5. -Dspark.deploy.zookeeper.dir=/spark"
  6. 2.分发配置文件
  7. 3.hadoop102上启动全部节点 sbin/start-all.sh
  8. 4.hadoop103上单独启动master节点 sbin/start-master.sh
  9. /opt/module/spark/bin/spark-shell \
  10. --master spark://hadoop102:7077,hadoop103:7077 \
  11. --executor-memory 2g \
  12. --total-executor-cores 2

3.4Yarn模式

image.png

  1. 1.修改hadoop配置文件yarn-site.xml,添加如下内容:
  2. <!--是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
  3. <property>
  4. <name>yarn.nodemanager.pmem-check-enabled</name>
  5. <value>false</value>
  6. </property>
  7. <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true -->
  8. <property>
  9. <name>yarn.nodemanager.vmem-check-enabled</name>
  10. <value>false</value>
  11. </property>
  12. 2.vi spark-env.sh YARN_CONF_DIR=/module/hadoop2.6/etc/hadoop
  13. 3.分发配置文件 xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml
  14. xsync spark-env.sh
  15. 4.
  16. bin/spark-submit \
  17. --class org.apache.spark.examples.SparkPi \
  18. --master yarn \
  19. --deploy-mode client \
  20. ./examples/jars/spark-examples_2.11-2.1.1.jar \
  21. 100

4.配置JobHistoryServer

  1. 1.mv spark-defaults.conf.template spark-defaults.conf
  2. 2.vi spark-defaults.conf
  3. spark.eventLog.enabled true
  4. spark.eventLog.dir hdfs://hadoop102:9000/directory
  5. hadoop fs mkdir /directory #注意:HDFS上的目录需要提前存在。
  6. 3.vi spark-env.sh
  7. export SPARK_HISTORY_OPTS="-Dspark.history.ui.port=18080
  8. -Dspark.history.retainedApplications=30
  9. -Dspark.history.fs.logDirectory=hdfs://hadoop102:9000/directory"
  10. spark.history.retainedApplications=30指定保存Application历史记录的个数,如果超过这个值,旧的应用程序信息将被删除,这个是内存中的应用数,而不是页面上显示的应用数。
  11. spark.history.fs.logDirectory=hdfs://hadoop102:9000/directory 配置了该属性后,在start-history-server.sh时就无需再显式的指定路径,Spark History Server页面只展示该指定路径下的信息
  12. 4.分发配置文件
  13. 5.sbin/start-history-server.sh