部署环境:3台主机 cdh001(主节点), cdh002, cdh003,用户名 algo。
配置用户和权限
sudo groupadd supergroup
sudo useradd -m -s /bin/bash algo
sudo usermod -a -G supergroup algo
su - algo
hadoop fs -mkdir /user/algo
algo用户的HDFS根目录:hdfs://cdh001:8020/user/algo
,所有 hadoop fs
命令中的相对路径都以此为根目录。
过程记录
验证 algo 用户可以正常使用 yarn 平台:
yarn node -list
yarn application -list
hadoop fs -put max_current.py .
hadoop fs -ls hdfs://cdh001:8020/user/algo
yarn jar /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/jars/hadoop-mapreduce-examples-2.6.0-cdh5.15.1.jar wordcount max_current.py output
hadoop fs -cat output/part-*
algo用户的创建和用户组配置可参考 12.7 笔记。
为 algo 配置 Spark 运行环境,将下面的语句加入到 $HOME/.bash_profile 的 export PATH
之前:
export HADOOP_CONF_DIR=/etc/hadoop/conf
export SPARK_HOME=/opt/cloudera/parcels/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101/lib/spark2
export LD_LIBRARY_PATH=/opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/hadoop/lib/native:$LD_LIBRARY_PATH
PATH=$SPARK_HOME/bin:$PATH
在集群模式下执行 Spark 实例代码(出现权限问题报错):
spark-submit --deploy-mode client \
--class org.apache.spark.examples.SparkPi \
$SPARK_HOME/examples/jars/spark-examples_2.11-2.3.0.cloudera2.jar 10
给 algo 用户执行 Spark 任务权限后执行成功:
sudo usermod -a -G spark algo
sudo chmod 775 /var/log/spark2/lineage
CDH 上常用环境变量配置
-
HADOOP_CONF_DIR
:/etc/hadoop/conf(一般是一个指向 /etc/hadoop/conf.cloudera.yarn 的链接); -
SPARK_HOME
for Spark 2.x:/opt/cloudera/parcels/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101/lib/spark2
-
SPARK_HOME
for Spark 1.x:/opt/cloudera/parcels/CDH/lib/spark
.
CDH version:
locate '*cdh_version*'
cat /opt/cloudera/parcels/CDH-5.15.1-1.cdh5.15.1.p0.4/lib/bigtop-tomcat/cloudera/cdh_version.properties | grep cloudera.cdh.release
计算流程总结
用户 algo 使用 Spark 在 Yarn 集群上并行计算的整体流程: 1. 创建用户账户,配置 Hadoop 权限;
-
使用
yarn node -list
和yarn jar ...
等方法了解 Yarn 集群当前节点数量和位置,确认 Yarn 集群能正常工作; -
通过 $SPARK_HOME/conf/spark-defaults.conf 将默认 master 设置为
yarn
; -
通过配置环境变量
HADOOP_CONF_DIR
定义 Yarn 配置文件位置($HADOOP_CONF_DIR/yarn-site.xml
),从而使 Spark 能够使用 Yarn 集群; -
用户提交并行计算任务,其中 client 模式类似于前台执行并行计算,cluster 模式类似于将并行计算设置为 daemon 后台运行。
其他
从 /opt/cloudera/parcels/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101/bin/spark2-submit
最后一行 exec $LIB_DIR/spark2/bin/spark-submit "$@"
可以看到,
它将所有参数转给了 /opt/cloudera/parcels/SPARK2-2.3.0.cloudera2-1.cdh5.13.3.p0.316101/lib/spark2/bin/spark-submit.