Spark on Yarn 环境搭建(CDH5.3)

来源:互联网 发布:mac隐藏文件夹打不开 编辑:程序博客网 时间:2024/06/03 02:42

前提条件:

1. 以现线上集群为模拟环境,搭建一套CDH5.3的hadoop集群        参考:http://blog.csdn.net/korder/article/details/469092532. 执行用户        (此处以root为执行用户,真实环境另做处理)

部署:

1. 启动hadoop集群,如:38节点安装的主namenode        [root@JXQ-23-27-38 ~]# jps        31624 NameNode        23659 WebAppProxyServer        26447 Jps        32581 DFSZKFailoverController        13861 ResourceManager        11119 JobHistoryServer2. 以38节点为客户机做实验,上传测试数据到HDFS

这里写图片描述

    3. 给root用户操作hdfs权限            su hdfs            hadoop fs -mkdir -p /xxx/data/mydata            hadoop fs -mkdir /xxx/result            hadoop fs -mkdir -p /xxx/spark/lib            hadoop fs -mkdir -p /xxx/spark/wylog            hadoop fs -chown -R root:root /xxx    4. 安装spark核心core            yum install spark-core -y            因为主要测试spark on yarn,只在提交job的38节点安装该核心core就够    5. 优化YARN模式        通常,Spark 会在每次运行 spark-submit 时将组件 JAR 文件复制到 HDFS,正如以下示例日志消息中所示:15/07/01 14:21:49 INFO yarn.Client: Uploadingfile:/home/cmccabe/spark/b2.4/examples/target/scala-2.10/spark-examples-1.0.0-SNAPSHOT-hadoop2.4.0.jar to hdfs://a2402.halxg.cloudera.com:6000/user/cmccabe/.sparkStaging/application_1402278226964_0012/spark-examples-1.0.0-SNAPSHOT-hadoop2.4.0.jar15/07/01 14:21:50 INFO yarn.Client: Uploadingfile:/home/cmccabe/spark/b2.4/assembly/target/scala-2.10/spark-assembly-1.0.0-SNAPSHOT-hadoop2.4.0.jar tohdfs://a2402.halxg.cloudera.com:6000/user/cmccabe/.sparkStaging/application_1402278226964_0012/spark-assembly-1.0.0-SNAPSHOT-hadoop2.4.0.jar通过将 Spark 组件 JAR 文件手动上载到 HDFS,您可以避免每次都执行此复制。然后将 SPARK_JAR 环境变量设为此 HDFS 路径:hdfs dfs -mkdir -p /xxx/spark/libhdfs dfs -put $SPARK_HOME/lib/spark-assembly_*.jar  \     /user/spark/share/lib/spark-assembly.jar SPARK_JAR=hdfs://<nn>:<port>/user/lib/spark/spark-assembly.jar提示:如果CDH版本更新,则需要再次手动上载spark的jar组件到HDFS。    6. 上传Spark程序打好的Jar包            hadoop fs -put wylogspark.jar /xxx/spark/wylog    7. 配置spark        vim /etc/spark/conf/spark-env.sh        添加:export HADOOP_CONF_DIR=${HADOOP_CONF_DIR:-etc/hadoop/conf}        export SPARK_JAR=hdfs://cdh5-test/xxx/spark/lib/spark-assembly.jar
    8. 编写执行脚本submit-yarn.sh        chmod 775 submit-yarn.sh        vim submit-yarn.sh        cd $SPARK_HOME        ./bin/spark-submit                  --name xxxspark \                --class com.cn.xxxspark \                --master yarn-cluster \                --executor-memory 4g  \   hdfs://cdh5-test/xxx/spark/wylog/xxxspark.jar \   hdfs://cdh5-test/xxx/data/*/*detail* \                chensy \                hdfs://cdh5-test/xxx/result/cs2

以下为一些参考资料:


运行Spark应用程序:

    Spark 应用程序与 MapReduce“作业”类似。每个应用程序都是一个独立的计算,其运行一些用户提供的代码以计算结果。与 MapReduce 作业一 样,Spark 应用程序可以利用多个节点的资源。Spark 围绕着弹性分布式数据集 (RDD) 这一概念,该数据集是可以并行操作的元素的容错集。当前有两种类型的 RDD:并行化集合(采用现有 Scala 集合并在其上并行运行功能)和 Hadoop 数据集(其在 Hadoop 分布式文件系统或 Hadoop 支持的任何其他存储系统中的文件的每个记录上运行功能)。这两种 RDD 可以通过相同的方法进行操作。    每个应用程序都有一个驱动程序进程来协调其执行。此进程可以在前台运行(客户端模式)或在后台运行(群集模式)。客户端模式要简单一点,但群集模式允许您在启动 Spark 应用程序后轻松注销,无需终止应用程序。    Spark 启动 executor 来执行计算。可能有很多 executor 分布在整个群集中,具体视作业大小而定。加载一些 executor 后,Spark 会尝试让任务匹配 executor。

CDH 5.3 引入了一个性能优化,其导致 Spark 更偏好 HDFS 中已缓存在本地的 RDD。这很重要,Spark 会等待这些缓存附近的 executor 在一小段时间内可用。
请注意,Spark 不会在带有缓存数据的节点上启动 executor,也没有机会在任务匹配阶段中进行选择。这对于大多数工作负载不是问题,因为大多数工作负载会在群集中的大多数或所有节点上启动 executor。

Spark 能够以两种模式运行:

• 独立模式:
在独立模式下,Spark 使用主后台程序,其负责协调运行 executor 的 Worker 的工作。独立模式是默认设置,但它不能用于安全的群集。
• YARN 模式:
在 YARN 模式下,YARN ResourceManager 执行 Spark Master 的功能。由运行 executor 的 YARN NodeManager 后台程序执行 Worker 的功能。YARN 模式的设置略微复杂,但它 支持安全性,并提供了与 YARN 的群集范围内资源 管理策略的更好集成。
可以同时运行多个 Spark 应用程序。如果决定在 YARN 上运行 Spark,您可以逐个为应用程序决定是以 YARN 客户端模式还是群集模式运行。当您在客户端模式下运行 Spark 时,驱动程序进程在本地运行;使用群集模式时,它在 ApplicationMaster 上远程运行。

Spark在YARN中有yarn-cluster和yarn-client两种运行模式
1. Yarn Cluster
Spark Driver首先作为一个ApplicationMaster在YARN集群中启动,客户端提交给ResourceManager的每一个job都会在集群的worker节点上分配一个唯一的ApplicationMaster,由该ApplicationMaster管理全生命周期的应用。因为Driver程序在YARN中运行,所以事先不用启动Spark Master/Client,应用的运行结果不能在客户端显示(可以在history server中查看),所以最好将结果保存在HDFS而非stdout输出,客户端的终端显示的是作为YARN的job的简单运行状况。
2. yarn-client
(YarnClientClusterScheduler)查看对应类的文件,在yarn-client模式下,Driver运行在Client上,通过ApplicationMaster向RM获取资源。本地Driver负责与所有的executor container进行交互,并将最后的结果汇总。结束掉终端,相当于kill掉这个spark应用。一般来说,如果运行的结果仅仅返回到terminal上时需要配置这个。客户端的Driver将应用提交给Yarn后,Yarn会先后启动ApplicationMaster和executor,另外ApplicationMaster和executor都 是装载在container里运行,container默认的内存是1G,ApplicationMaster分配的内存是driver- memory,executor分配的内存是executor-memory。同时,因为Driver在客户端,所以程序的运行结果可以在客户端显 示,Driver以进程名为SparkSubmit的形式存在。
配置YARN-Client模式同样需要HADOOP_CONF_DIR/YARN_CONF_DIR和SPARK_JAR变量。

配置:
配置 Spark 的最简单的方法是设置 $SPARK_HOME/conf/spark-defaults.conf。
此文件在表单中包含行:“键值”。可以通过在行的开始处放置一个散列标记 (#) 来创建备注。
不能将备注添加到行的末尾或中间。
以下示例显示了一个 spark-defaults.conf 文件:
spark.master spark://mysparkmaster.cloudera.com:7077
spark.eventLog.enabled true
spark.eventLog.dir hdfs:///user/spark/eventlog
spark.executor.memory 2g
spark.logConf true
把要为每个应用程序使用的配置键放入 spark-defaults.conf 是一个不错的主意。

Spark-Submit 脚本
可以使用 spark-submit 脚本启动 Spark 应用程序,在安装 spark-core 软件包时,该文件安装在了/usr/lib/spark的路径中。
Spark 无法处理表单 –key=value 的命令行选项;请改用 –key value。(也就是说,请使用空格而不是等号。)
要运行 spark-submit,,需要已编译的 Spark 应用程序 JAR。

0 0
原创粉丝点击