本文主要介绍如何在挂载文件存储HDFS版的Hadoop集群上安装及使用Apache Spark。
步骤一:配置Hadoop
- 执行以下命令解压Hadoop压缩包到指定目录。
tar -zxf hadoop-2.7.2.tar.gz -C /usr/local/
- 修改hadoop-env.sh配置文件。
- 执行以下命令打开hadoop-env.sh配置文件。
vim /usr/local/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
- 配置JAVA_HOME目录,如下所示。
export JAVA_HOME=/usr/java/default
- 修改core-site.xml配置文件。
- 执行以下命令打开core-site.xml配置文件。
vim /usr/local/hadoop-2.7.2/etc/hadoop/core-site.xml
- 在core-site.xml配置文件中,配置如下信息。更多信息,请参见挂载文件系统。
<configuration>
<property>
<name>fs.defaultFS</name>
<value>dfs://x-xxxxxxxx.cn-xxxxx.dfs.aliyuncs.com:10290</value>
<!-- 该地址填写您的挂载点地址 -->
</property>
<property>
<name>fs.dfs.impl</name>
<value>com.alibaba.dfs.DistributedFileSystem</value>
</property>
<property>
<name>fs.AbstractFileSystem.dfs.impl</name>
<value>com.alibaba.dfs.DFS</value>
</property>
</configuration>
- 修改yarn-site.xml配置文件。
- 执行如下命令打开yarn-site.xml配置文件。
vim /usr/local/hadoop-2.7.2/etc/hadoop/yarn-site.xml
- 在yarn-site.xml配置文件中,配置如下信息。
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>xxxx</value>
<!-- 该地址填写集群中ResourceManager的Hostname -->
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</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.2/etc/hadoop/slaves
- 在slaves配置文件中,配置集群计算节点的Hostname。
cluster-header-1
cluster-worker-1
- 配置环境变量。
- 执行如下命令打开/etc/profile配置文件。
- 在/etc/profile配置文件中,配置HADOOP_HOME。
export HADOOP_HOME=/usr/local/hadoop-2.7.2
export HADOOP_CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath)
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
- 执行如下命令使配置生效。
- 配置文件存储HDFS版的Java SDK。
- 执行如下命令将${HADOOP_HOME}文件夹同步到集群的其他节点的相同目录下,并按照步骤6对集群其他节点配置Hadoop的环境变量。
scp -r hadoop-2.7.2/ root@cluster-worker-1:/usr/local/
步骤二:验证Hadoop配置
完成Hadoop配置后,不需要格式化NameNode,也不需要使用start-dfs.sh来启动HDFS相关服务。如需使用YARN服务,只需在ResourceManager节点启动YARN服务。具体验证Hadoop配置成功的方法,请参见验证安装。
步骤三:配置Apache Spark
- 执行如下命令解压Apache Spark压缩包到指定目录。
tar -zxf spark-2.4.8-bin-hadoop2.7.tgz -C /usr/local/
- 将文件存储HDFS版Java SDK放到Spark的jars目录下。
cp aliyun-sdk-dfs-x.y.z.jar /usr/local/hadoop-2.7.2/share/hadoop/hdfs
步骤四:验证Apache Spark配置
使用Spark读取文件存储HDFS版上面的文件进行WordCount计算,并将计算结果写入文件存储HDFS版。
- 执行以下命令,在文件存储HDFS版上生成测试数据。
hadoop jar ${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
randomtextwriter \
-D mapreduce.randomtextwriter.totalbytes=10240 \
-D mapreduce.randomtextwriter.bytespermap=1024 \
dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/input
其中,f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com
为文件存储HDFS版挂载点地址,请根据实际情况替换。
- 启动spark-shell执行WordCount。
${SPARK_HOME}/bin/spark-shell --master yarn
scala> val res = sc.textFile("dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/input").flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_)
scala> res.collect.foreach(println)
scala> res.saveAsTextFile("dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/output")
- 执行以下命令,查看写入文件存储HDFS版的结果数据。
hadoop fs -ls dfs://f-xxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/output
如果返回以下信息,则表示配置Apache Spark成功。
