配置E-MapReduce服务使用文件存储 HDFS 版

本文介绍如何配置E-MapReduce上的Hadoop-Common服务、Hive服务、Spark服务、Tez服务来使用文件存储 HDFS 版

前提条件

已完成数据迁移。具体操作,请参见E-MapReduce数据迁移

配置Hadoop-Common服务

  1. 登录阿里云E-MapReduce控制台

  2. 在顶部菜单栏,单击地域。

  3. 概览页面,找到需要挂载文件存储 HDFS 版的目标E-MapReduce集群,单击集群服务

  4. 集群服务页签,将光标移至Hadoop-Common卡片,单击配置

  5. 配置项名称框中输入fs.defaultFS配置项,将其值修改为您的文件存储 HDFS 版挂载点域名。格式为dfs://f--xxxxxxxx.cn-xxxxx.dfs.aliyuncs.com:10290/

    image

  6. 单击保存,在保存对话框中确认已修改的配置并输入执行原因,单击保存

  7. 单击部署客户端配置,输入执行原因,单击确定

  8. 重启YARN服务。

    1. 单击左上角的返回,返回集群服务页签。

    2. 集群服务页签,将光标移至YARN卡片,选择image图标>重启

    3. 在弹出的对话框输入执行原因,并单击确定

配置Spark服务

配置Hadoop-Common服务完成后,才能配置Spark服务。本文以Spark3服务为例,介绍配置方法。

  1. 登录EMR on ECS的master节点,将文件存储HDFS版的Java SDK放置到EMR集群各节点的${SPARK_HOME}/jars/目录下。

    # 请将aliyun-sdk-dfs-x.y.z.jar替换为您下载的文件存储HDFS版 Java SDK
    sudo cp aliyun-sdk-dfs-x.y.z.jar ${SPARK_HOME}/jars/
  2. 修改Spark服务配置。

    1. 集群服务页签,将光标移至Spark3卡片,单击配置

    2. 单击搜索框左侧按钮,选择配置项值。输入spark-history搜索,然后将配置项中的原文件存储系统域名替换为您文件存储HDFS版的挂载点域名。如下图所示。

      挂载点域名格式为:dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290

      image

    3. 单击保存,在对话框中确认已修改的配置并输入执行原因,单击保存

    4. 单击部署客户端配置,输入执行原因,单击确定

    5. 集群服务页签的右上方,选择更多操作 > 启动。启动Spark服务。

      image

配置Hive服务

说明
  1. 检查配置并启动Hive服务。

    1. 集群服务页签,将光标移至Hive卡片,单击配置

    2. 选择配置项名称,搜索hive.metastore.warehouse.dir配置项,确认其对应值中只有从根目录开始的路径(例如:/user/hive/warehouse)。

      image

    3. 集群服务页签的右上方,选择更多操作 > 启动。启动Hive服务。

      image

  2. 修改Hive元数据。

    本文以DLF统一元数据为例,介绍Hive元数据的修改方法。文档中提到的MySQL均为EMR集群master节点的本地MySQL。

    1. 导出元数据到MySQL。

      将Hive元数据从DLF导出到MySQL。具体操作,请参见元数据导出

    2. 导出MySQL中的元数据到metastore.sql文件。

      # 请将DATABASENAME替换为您要导出的数据库名称
      # 请将USERNAME替换为您本地MySQL的用户名
      mysqldump DATABASENAME -u USERNAME -p > ./metastore.sql
    3. 备份元数据文件。

      cp ./metastore.sql ./metastore.sql.bak
    4. 修改元数据文件。

      # 请将xxx:\/\/xxxx.xxxxx.xxx替换为原数据路径,注意转义符“\”
      # 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
      sed -i 's/xxx:\/\/xxxx.xxxxx.xxx/dfs:\/\/f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/g' ./metastore.sql
    5. 导入修改过的元数据文件到MySQL。

      1. 登录MySQL数据库。

        # 请将DATABASENAME替换为您要导出的数据库名称
        # 请将USERNAME替换为您本地MySQL的用户名
        mysql DATABASENAME -u USERNAME -p
      2. 导入数据。

        # 请将/path/to/metastore.sql替换为元数据文件真实路径
        source /path/to/metastore.sql;
    6. 导入修改过的元数据到DLF。

      将修改过的Hive元数据从MySQL导入DLF。具体操作,请参见元数据迁移

验证服务正确性

YARN服务验证

提交MapReduce任务在/tmp/randomtextwriter目录下生成文件,示例命令如下:

yarn jar \
${HADOOP_HOME}/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \
randomtextwriter \
-D mapreduce.randomtextwriter.totalbytes=134217728 \
/tmp/randomtextwriter

执行以下命令验证文件是否存在。hadoop fs -ls dfs://f-095d7371deh55.cn-hangzhou.dfs.aliyuncs.com:10290/tmp/randomtextwriter

# 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/randomtextwriter

image

Spark服务验证

  1. 使用Spark自带的测试包,以本地/etc/profile作为输入文件,运行DFSReadWriteTest任务。

    spark-submit \
    --master yarn \
    --executor-memory 2G \
    --executor-cores 2 \
    --class org.apache.spark.examples.DFSReadWriteTest \
    ${SPARK_HOME}/examples/jars/spark-examples_*.jar \
    /etc/profile /tmp/spark_output
  2. 执行以下命令验证。

    # 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
    hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/spark_output/dfs_read_write_test

    如果返回以下类似信息,则表示Spark服务配置成功。能正常使用文件存储 HDFS 版文件系统。

    image

Tez服务验证

  1. 使用Tez自带的测试包,以YARN服务验证生成的数据作为输入数据,执行Word Count任务。

    export HADOOP_CLASSPATH=${HADOOP_CLASSPATH}:${TEZ_CONF_DIR}:${TEZ_HOME}/*:${TEZ_HOME}/lib/*
    hadoop jar \
    ${TEZ_HOME}/tez-examples-*.jar \
    orderedwordcount /tmp/randomtextwriter /tmp/tez/orderedwordcount_output
  2. 执行以下命令验证。

    # 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
    hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/tmp/tez/orderedwordcount_output

    如果返回以下类似信息,则表示Tez服务能正常使用文件存储 HDFS 版文件系统。

    image

Hive的验证

  1. 进入Hive命令界面。

    hive
  2. 创建测试表(例如,user_info_test)。

    CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
  3. 向测试表(user_info_test)插入数据。

    INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
  4. 查看测试表。

    如果回显信息中的Location属性对应的值为文件存储 HDFS 版的路径,则表示配置Hive成功。如果不是,请重新配置。具体操作,请参见配置Hive服务

    • 执行命令

      desc formatted default.user_info_test;
    • 返回信息

      OK
      # col_name              data_type               comment
      
      user_id                 bigint
      firstname               string
      lastname                string
      country                 string
      
      # Detailed Table Information
      Database:               default
      Owner:                  emr-user
      CreateTime:             Fri Aug 15 17:29:38 CST 2024
      LastAccessTime:         UNKNOWN
      Retention:              0
      Location:               dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse/user_info_test
      Table Type:             MANAGED_TABLE
      Table Parameters:
              COLUMN_STATS_ACCURATE   {\"BASIC_STATS\":\"true\"}
              last_modified_time      1723803920
              numFiles                1
              numRows                 3
              rawDataSize             40
              totalSize               43
              transient_lastDdlTime   1723803920
      
      # Storage Information
      SerDe Library:          org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
      InputFormat:            org.apache.hadoop.mapred.TextInputFormat
      OutputFormat:           org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat
      Compressed:             No
      Num Buckets:            -1
      Bucket Columns:         []
      Sort Columns:           []
      Storage Desc Params:
              serialization.format    1
      Time taken: 0.199 seconds, Fetched: 34 row(s)
  5. 测试Hive计算引擎。

    1. 测试Hive on MapReduce。

      1. 设置Hive计算引擎为MapReduce。

        SET hive.execution.engine=mr;
      2. 提交计算任务。

        SELECT country,count(*) FROM user_info_test GROUP BY country;

    2. 测试Hive on Spark。

      1. 设置Hive计算引擎为Spark。

        SET hive.execution.engine=spark;
      2. 提交计算任务。

        SELECT country,count(*) FROM user_info_test GROUP BY country;

    3. 测试Hive on Tez。

      1. 设置Hive计算引擎为Tez。

        SET hive.execution.engine=tez;
      2. 提交计算任务。

        SELECT country,count(*) FROM user_info_test GROUP BY country;

  6. 在文件存储HDFS版上查看是否有新测试表的数据生成。

    # 请将f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com替换为您的文件存储HDFS版挂载点域名
    hadoop fs -ls dfs://f-xxxxxxxxxxxxxxx.xx-xxxxxxx.dfs.aliyuncs.com:10290/user/hive/warehouse

    如果返回以下类似信息,则表示Hive服务能正常访问文件存储 HDFS 版文件系统。

    image

后续步骤

卸载并释放E-MapReduce HDFS使用的云盘