本文介绍在LindormDFS上搭建及使用Apache Spark的方法。
运行环境准备
开通LindormDFS,详情请参见开通指南。
在计算节点上安装JDK,版本不能低于1.8。
在计算节点上安装Scala。
Scala下载地址:官方链接,其版本要与使用的Apache Spark版本相兼容。
下载Apache Hadoop压缩包。
Apache Hadoop下载地址:官方链接。建议您选用的Apache Hadoop版本不低于2.7.3,本文档中使用的Apache Hadoop版本为Apache Hadoop 2.7.3。
下载Apache Spark压缩包。 Apache Spark下载地址:官方链接。选用Apache Spark版本时请注意该版本要与您当前选用的Apache Hadoop版本相兼容,本文中使用的Apache Spark版本为2.4.3。
本文档的操作步骤中涉及的安装包版本号、文件夹路径,请根据实际情况进行替换。
Apache Hadoop 配置
解压Apache Hadoop压缩包到指定的目录。
tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local/
修改
hadoop-env.sh
配置文件。执行如下命令打开
hadoop-env.sh
配置文件。vim /usr/local/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
配置
JAVA_HOME
。export JAVA_HOME=${jdk安装目录}
修改
core-site.xml
。执行如下命令打开
core-site.xml
。vim /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
修改
core-site.xml
文件,修改的内容如下所示,其中实例ID需要替换为实际实例ID。<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://${实例ID}</value> </property> </configuration>
修改
mapred-site.xml
配置文件。执行如下命令打开
mapred-site.xml
。vim /usr/local/hadoop-2.7.3/etc/hadoop/mapred-site.xml
修改
mapred-site.xml
,修改的内容如下所示。<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
修改
yarn-site.xml
配置文件。执行如下命令打开
yarn-site.xml
配置文件。vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
修改
yarn-site.xml
,修改的内容如下所示。<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>xxxx</value> <!-- 该地址填写集群中yarn的resourcemanager的hostname --> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>spark_shuffle,mapreduce_shuffle</value> <!-- 如果不配置spark on yarn,此处只设置为mapreduce_shuffle --> </property> <property> <name>yarn.nodemanager.aux-services.spark_shuffle.class</name> <value>org.apache.spark.network.yarn.YarnShuffleService</value> <!-- 如果不配置 spark on yarn,不配置该项 --> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>2.1</value> </property> <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>16384</value> <!-- 根据您当前的集群能力进行配置此项 --> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>4</value> <!-- 根据您当前的集群能力进行配置此项 --> </property> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>4</value> <!-- 根据您当前的集群能力进行配置此项 --> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>3584</value> <!-- 根据您当前的集群能力进行配置此项 --> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>14336</value> <!-- 根据您当前的集群能力进行配置此项 --> </property> </configuration>
修改
slaves
配置文件。执行如下命令打开
slaves
配置文件。vim /usr/local/hadoop-2.7.3/etc/hadoop/slaves
修改
slaves
配置文件,修改的内容如下所示,假设spark集群有两个节点node1、node2。node1 node2
说明node1和node2为spark集群节点的机器名。
配置环境变量。
执行如下命令打开
/etc/profile
配置文件。vim /etc/profile
修改
/etc/profile
,在文件末尾添加如下内容。export HADOOP_HOME=/usr/local/hadoop-2.7.3 export HADOOP_CLASSPATH=/usr/local/hadoop-2.7.3/etc/hadoop:/usr/local/hadoop-2.7.3/share/hadoop/common/lib/*:/usr/local/hadoop-2.7.3/share/hadoop/common/*:/usr/local/hadoop-2.7.3/share/hadoop/hdfs:/usr/local/hadoop-2.7.3/share/hadoop/hdfs/lib/*:/usr/local/hadoop-2.7.3/share/hadoop/hdfs/*:/usr/local/hadoop-2.7.3/share/hadoop/yarn/lib/*:/usr/local/hadoop-2.7.3/share/hadoop/yarn/*:/usr/local/hadoop-2.7.3/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-2.7.3/share/hadoop/mapreduce/*:/usr/local/hadoop-2.7.3/contrib/capacity-scheduler/*.jar export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.3/etc/hadoop
执行如下命令生效配置信息。
source /etc/profile
执行如下命令将
${HADOOP_HOME}
文件夹同步到集群的其他节点。scp -r hadoop-2.7.2/ testuser@node2:/usr/local/
验证Apache Hadoop配置
完成Hadoop配置后,不需要格式化namenode,也不需要使用start-dfs.sh
来启动HDFS相关服务。如需使用yarn服务,只需在resourcemanager节点启动yarn服务,具体验证Hadoop配置是否成功的方法请参见使用开源HDFS客户端访问。
/usr/local/hadoop-2.7.3/sbin/start-yarn.sh
配置 Apache Spark
本文档以spark on yarn为例进行搭建说明。
执行如下命令,解压安装包到指定目录。
tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz -C /usr/local/
修改
spark-env.sh
配置文件。执行如下命令打开
spark-env.sh
配置文件。vim /usr/local/spark-2.4.3-bin-hadoop2.7/conf/spark-env.sh
在
spark-env.sh
配置文件中,配置如下信息。export JAVA_HOME=java的安装目录 export SCALA_HOME=scala的安装目录 export SPARK_CONF_DIR=/usr/local/spark-2.4.3-bin-hadoop2.7/conf export HADOOP_HOME=/usr/local/hadoop-2.7.3 export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.3/etc/hadoop
拷贝JAR包。
将Spark配置文件夹中yarn目录下的
spark-x.x.x-yarn-shuffle.jar
包拷贝到当前集群所有节点的yarn/lib
目录下。
配置spark on yarn模式时,不需要将Spark配置文件夹分发到集群的所有节点,只需要在集群其中一台提交任务的节点上配置即可。
验证Apache Spark
使用Spark读取LindormDFS上的文件,进行wordcount计算,并且将计算结果打印并写入LindormDFS。
执行以下命令创建测试数据。
echo -e "11,22\n11,22\n11,23\n11,22\n11,22" > /tmp/words
创建完成后,执行
cat /tmp/words
命令查看测试数据是否创建成功。执行如下命令,在LindormDFS上创建文件夹。
/usr/local/hadoop-2.7.3/bin/hadoop fs -mkdir -p /test/input /usr/local/hadoop-2.7.3/bin/hadoop fs -mkdir -p /test/output
执行如下命令将测试数据上传至LindormDFS的文件夹上。
/usr/local/hadoop-2.7.3/bin/hadoop fs -put /tmp/words /test/input
上传完成后,执行
/usr/local/hadoop-2.7.3/bin/hadoop fs -cat /test/input/words
命令确认测试数据是否上传成功。执行以下命令启动spark-shell。
/usr/local/spark-2.4.3-bin-hadoop2.7/bin/spark-shell --master yarn \ --deploy-mode client \ --driver-cores 1 \ --driver-memory 1G \ --executor-memory 1G \ --num-executors 1 \
执行以下命令运行wordcount程序。
scala> val res = sc.textFile("/test/input/words").flatMap(_.split(",")).map((_,1)).reduceByKey(_+_) scala> res.collect.foreach(println) scala> res.saveAsTextFile("/test/output/res")
查看结果。
/usr/local/hadoop-2.7.3/bin/hadoop fs -cat /test/output/res/part-00000