使用Spark访问

本文介绍在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 配置

  1. 解压Apache Hadoop压缩包到指定的目录。

    tar -zxvf hadoop-2.7.3.tar.gz -C /usr/local/
  2. 修改hadoop-env.sh配置文件。

    1. 执行如下命令打开hadoop-env.sh配置文件。

      vim /usr/local/hadoop-2.7.3/etc/hadoop/hadoop-env.sh
    2. 配置JAVA_HOME

      export JAVA_HOME=${jdk安装目录}
  3. 修改core-site.xml

    1. 执行如下命令打开core-site.xml

      vim /usr/local/hadoop-2.7.3/etc/hadoop/core-site.xml
    2. 修改core-site.xml文件,修改的内容如下所示,其中实例ID需要替换为实际实例ID。

      <configuration>
        <property>
           <name>fs.defaultFS</name>
           <value>hdfs://${实例ID}</value>
        </property>
      </configuration>
  4. 修改mapred-site.xml配置文件。

    1. 执行如下命令打开mapred-site.xml

      vim /usr/local/hadoop-2.7.3/etc/hadoop/mapred-site.xml
    2. 修改mapred-site.xml,修改的内容如下所示。

      <configuration>
      <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
      </property>
      </configuration>
    3. 修改yarn-site.xml配置文件。

      1. 执行如下命令打开yarn-site.xml配置文件。

        vim /usr/local/hadoop-2.7.3/etc/hadoop/yarn-site.xml
      2. 修改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>
    4. 修改slaves配置文件。

      1. 执行如下命令打开slaves配置文件。

         vim /usr/local/hadoop-2.7.3/etc/hadoop/slaves 
      2. 修改slaves配置文件,修改的内容如下所示,假设spark集群有两个节点node1、node2。

        node1
        node2
        说明

        node1和node2为spark集群节点的机器名。

    5. 配置环境变量。

      1. 执行如下命令打开/etc/profile配置文件。

        vim /etc/profile
      2. 修改 /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
      3. 执行如下命令生效配置信息。

        source /etc/profile
  5. 执行如下命令将${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为例进行搭建说明。

  1. 执行如下命令,解压安装包到指定目录。

    tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz -C /usr/local/
  2. 修改spark-env.sh配置文件。

    1. 执行如下命令打开spark-env.sh配置文件。

       vim /usr/local/spark-2.4.3-bin-hadoop2.7/conf/spark-env.sh
    2. 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
  3. 拷贝JAR包。

    将Spark配置文件夹中yarn目录下的spark-x.x.x-yarn-shuffle.jar包拷贝到当前集群所有节点的yarn/lib目录下。

说明

配置spark on yarn模式时,不需要将Spark配置文件夹分发到集群的所有节点,只需要在集群其中一台提交任务的节点上配置即可。

验证Apache Spark

使用Spark读取LindormDFS上的文件,进行wordcount计算,并且将计算结果打印并写入LindormDFS。

  1. 执行以下命令创建测试数据。

    echo -e "11,22\n11,22\n11,23\n11,22\n11,22" > /tmp/words

    创建完成后,执行cat /tmp/words命令查看测试数据是否创建成功。

  2. 执行如下命令,在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
  3. 执行如下命令将测试数据上传至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命令确认测试数据是否上传成功。

  4. 执行以下命令启动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 \
  5. 执行以下命令运行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")
  6. 查看结果。

    /usr/local/hadoop-2.7.3/bin/hadoop fs -cat /test/output/res/part-00000