本文档主要介绍在文件存储HDFS上搭建及使用Apache Spark的方法。
准备工作 开通文件存储HDFS服务并创建文件系统实例和挂载点,详情请参见HDFS快速入门。 在计算节点上安装JDK。 版本不能低于1.8。 在计算节点上安装Scala。 Scala下载地址:官方链接,其版本要与使用的Apache Spark版本相兼容。 下载Apache Hadoop压缩包。 Apache Hadoop下载地址:官方链接。建议您选用的Apache Hadoop版本不低于2.7.2,本文档中使用的Apache Hadoop版本为Apache Hadoop 2.7.2。 下载Apache Spark压缩包。 Apache Spark下载地址:官方链接。选用Apache Spark版本时请注意该版本要与您当前选用的Apache Hadoop版本相兼容,本文中使用的Apache Spark版本为2.3.0。 说明 本文档的操作步骤中涉及的安装包版本号、文件夹路径,请根据实际情况进行替换。 配置Apache Hadoop 执行如下命令解压Apache Hadoop压缩包到指定文件夹。 tar -zxvf 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配置文件中,配置如下信息,详情请参见挂载文件系统。 fs.defaultFS dfs://x-xxxxxxxx.cn-xxxxx.dfs.aliyuncs.com:10290 fs.dfs.impl com.alibaba.dfs.DistributedFileSystem fs.AbstractFileSystem.dfs.impl com.alibaba.dfs.DFS io.file.buffer.size 8388608 alidfs.use.buffer.size.setting true dfs.usergroupservice.impl com.alibaba.dfs.security.LinuxUserGroupService.class dfs.connection.count 16 修改mapred-site.xml配置文件。 执行如下命令打开mapred-site.xml配置文件。 vim /usr/local/hadoop-2.7.2/etc/hadoop/mapred-site.xml 在mapred-site.xml配置文件中,配置如下信息。 mapreduce.framework.name yarn 修改yarn-site.xml配置文件。 执行如下命令打开yarn-site.xml配置文件。 vim /usr/local/hadoop-2.7.2/etc/hadoop/yarn-site.xml 在yarn-site.xml配置文件中,配置如下信息。 yarn.resourcemanager.hostname xxxx
yarn.nodemanager.aux-services spark_shuffle,mapreduce_shuffle yarn.nodemanager.aux-services.spark_shuffle.class org.apache.spark.network.yarn.YarnShuffleService yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler yarn.nodemanager.vmem-pmem-ratio 2.1 yarn.nodemanager.pmem-check-enabled false yarn.nodemanager.vmem-check-enabled false yarn.nodemanager.resource.memory-mb 16384 yarn.nodemanager.resource.cpu-vcores 4 yarn.scheduler.maximum-allocation-vcores 4 yarn.scheduler.minimum-allocation-mb 3584 yarn.scheduler.maximum-allocation-mb 14336 修改slaves配置文件。 执行如下命令打开slaves配置文件。 vim /usr/local/hadoop-2.7.2/etc/hadoop/slaves 在slaves配置文件中,配置如下信息。 node1 node2 配置环境变量。 执行如下命令打开/etc/profile配置文件。 vim /etc/profile 在/etc/profile配置文件中,配置如下信息。 export HADOOP_HOME=/usr/local/hadoop-2.7.2 export HADOOP_CLASSPATH=/usr/local/hadoop-2.7.2/etc/hadoop:/usr/local/hadoop-2.7.2/share/hadoop/common/lib/*:/usr/local/hadoop-2.7.2/share/hadoop/common/*:/usr/local/hadoop-2.7.2/share/hadoop/hdfs:/usr/local/hadoop-2.7.2/share/hadoop/hdfs/lib/*:/usr/local/hadoop-2.7.2/share/hadoop/hdfs/*:/usr/local/hadoop-2.7.2/share/hadoop/yarn/lib/*:/usr/local/hadoop-2.7.2/share/hadoop/yarn/*:/usr/local/hadoop-2.7.2/share/hadoop/mapreduce/lib/*:/usr/local/hadoop-2.7.2/share/hadoop/mapreduce/*:/usr/local/hadoop-2.7.2/contrib/capacity-scheduler/*.jar export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.2/etc/hadoop 执行如下命令使配置生效。 source /etc/profile 执行如下命令配置文件存储HDFS的SDK。 您可以下载文件存储HDFS的SDK (此处以aliyun-sdk-dfs-1.0.3.jar为例),将其部署在Hadoop生态系统组件的CLASSPATH上,详情请参见挂载文件系统。cp aliyun-sdk-dfs-1.0.3.jar /usr/local/hadoop-2.7.2/share/hadoop/hdfs 执行如下命令将${HADOOP_HOME}文件夹同步到集群的其他节点。 scp -r hadoop-2.7.2/ root@node2:/usr/local/ 验证Apache Hadoop配置 完成Hadoop配置后,不需要格式化namenode,也不需要使用start-dfs.sh来启动HDFS相关服务。如需使用yarn服务,只需在resourcemanager节点启动yarn服务,具体验证Hadoop配置成功的方法请参见安装。
/usr/local/hadoop-2.7.2/sbin/start-yarn.sh 配置Apache Spark 本文档以spark on yarn为例进行搭建说明,spark on yarn的官方配置文档请参见在Yarn上使用Spark。
执行如下命令解压Apache Spark压缩包。 tar -zxvf spark-2.3.0-bin-hadoop2.7.tgz -C /usr/local/ 修改spark-env.sh配置文件。 执行如下命令打开spark-env.sh配置文件。 vim /usr/local/spark-2.3.0-bin-hadoop2.7/conf/spark-env.sh 在spark-env.sh配置文件中,配置如下信息。 export JAVA_HOME=/usr/java/default export SCALA_HOME=/usr/local/scala-2.11.7 export SPARK_CONF_DIR=/usr/local/spark-2.3.0-bin-hadoop2.7/conf export HADOOP_HOME=/usr/local/hadoop-2.7.2 export HADOOP_CONF_DIR=/usr/local/hadoop-2.7.2/etc/hadoop 拷贝jar包。 将配置Apache Hadoop章节的步骤 8中下载的文件存储HDFS SDK(此处以aliyun-sdk-dfs-1.0.3.jar为例)拷贝到Spark配置文件夹的jars目录下。 cp aliyun-sdk-dfs-1.0.3.jar /usr/local/spark-2.3.0-bin-hadoop2.7/jars 将Spark配置文件夹中yarn目录下的spark-x.x.x-yarn-shuffle.jar包拷贝到当前集群所有节点的yarn/lib目录下。 cp /usr/local/spark-2.3.0-bin-hadoop2.7/yarn/spark-2.3.0-yarn-shuffle.jar /usr/local/hadoop-2.7.2/share/hadoop/yarn 说明 配置spark on yarn模式时,不需要将Spark配置文件夹分发到集群的所有节点,只需要在集群中一台提交任务的节点上配置即可。 配置spark standalone时,需要将文件存储HDFS的SDK(aliyun-sdk-dfs-x.y.z.jar) 拷贝到Spark配置文件夹的jars目录下之后再将Spark的配置文件夹分发到集群所有节点上。 验证Apache Spark配置 使用Spark读取文件存储HDFS上面的文件进行wordcount计算,将计算结果打印并写入文件存储HDFS。
执行以下命令创建测试数据。 echo -e "hello,world\nhello,world\nhello,world\nhello,world\nhello,world" > /tmp/words 创建完成后,你可以执行cat /tmp/words命令查看测试数据是否创建成功。
执行如下命令,在文件存储HDFS上创建文件夹。 /usr/local/hadoop-2.7.2/bin/hadoop fs -mkdir -p /sparktest/input /usr/local/hadoop-2.7.2/bin/hadoop fs -mkdir -p /sparktest/output 执行如下命令将测试数据上传至HDFS上的文件夹。 /usr/local/hadoop-2.7.2/bin/hadoop fs -put /tmp/words /sparktest/input 上传完成后,您可以执行/usr/local/hadoop-2.7.2/bin/hadoop fs -cat /sparktest/input/words命令确认测试数据是否上传成功。
执行以下命令启动spark-shell。 /usr/local/spark-2.3.0-bin-hadoop2.7/bin/spark-shell --master yarn --deploy-mode client
--driver-cores 1
--driver-memory 1G
--executor-memory 1G
--num-executors 2
执行以下命令运行wordcount程序。 scala> val res = sc.textFile("dfs://x-xxxxxx.cn-xxxx.dfs.aliyuncs.com:10290/sparktest/input/words").flatMap(.split(",")).map((,1)).reduceByKey(+) scala> res.collect.foreach(println) scala> res.saveAsTextFile("dfs://x-xxxxxx.cn-xxxx.dfs.aliyuncs.com:10290/sparktest/output/res") 其中,dfs://x-xxxxxx.cn-xxxx.dfs.aliyuncs.com为HDFS文件系统的挂载点,请根据实际情况替换。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。