配置CDH6使用文件存储HDFS版

数据迁移完成后,您还需要配置CDH上的HDFS服务、Hive服务、Spark服务、HBase服务,才能使用文件存储HDFS版

配置Cloudera Management服务

  1. 执行以下命令,将最新的文件存储HDFS版Java SDK复制到Cloudera Management服务的lib目录下。集群中的每台机器都需要在相同位置添加文件存储HDFS版Java SDK。

    cp aliyun-sdk-dfs-x.y.z.jar /opt/cloudera/cm/lib/cdh6/

    其中,x.y.z为文件存储HDFS版Java SDK版本号,请根据实际填写。重启服务。

  2. 重启服务。

    1. 登录CDH6的Cloudera Manager管理页面。

    2. 主页页面,选择状态页签。

    3. 在左侧Cloudera Management Service区域,单击Cloudera Management Service右侧的icon图标 > 重启,重启服务。

配置HDFS服务

  1. 登录CDH6的Cloudera Manager管理页面。

  2. 主页页面,选择配置 > 高级配置代码段,进入高级配置代码段页面。

  3. 在搜索框中输入core-site.xml进行搜索,在搜索结果HDFS的core-site.xml的群集范围高级配置代码段(安全阀)区域中,单击icon-2,添加如下配置。

    1. 名称:fs.defaultFS

    2. 值:dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290

      其中f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com为您的文件存储HDFS版挂载点地址,请根据实际情况进行修改。

      HDFS版挂载点
  4. 单击保存更改

配置YARN服务

  1. 检查mapreduce.application.classpath配置。

    1. 登录CDH6的Cloudera Manager管理页面。

    2. 主页页面,选择状态页签。

    3. 在左侧集群组件列表中,单击YARN(MR2 Included)右侧icon 图标 > 配置,进入YARN(MR2 Included)配置页面。

    4. 在搜索框中输入mapreduce.application.classpath进行搜索,在搜索结果的MR应用程序Classpath区域中,检查确认已添加$HADOOP_HDFS_HOME/*配置。YARN如果上述区域中没有$HADOOP_HDFS_HOME/*配置,请单击添加添加,然后单击保存更改

  2. 配置mapred-site.xml。

    1. 在搜索框中输入mapred-site.xml进行搜索。在搜索结果的YARN(MR2 Included)YARN服务MapReduce高级配置代码段(安全阀)区域中,单击icon-2添加如下配置项。

      • 名称:mapreduce.application.framework.path。

      • 值:dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/user/yarn/mapreduce/mr-framework/3.x.x-cdh6.x.x-mr-framework.tar.gz#mr-framework。

        其中,f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com为您的文件存储HDFS版挂载点地址;3.x.x-cdh6.x.x-mr-framework为CDH MR框架文件,请根据实际情况进行修改。

        说明

        如果文件存储HDFS版实例中的3.x.x-cdh6.x.x-mr-framework.tar.gz文件不存在,可能是因为此文件还没有从CDH的HDFS服务同步到文件存储HDFS版。您需要将HDFS服务/user/yarn目录下的所有内容同步到文件存储HDFS版上。具体操作,请参见CDH6数据迁移

        YARN服务MapRedduce高级配置代码段(安全阀
    2. 单击保存更改

  3. 部署新配置并重启服务。

    1. 返回主页页面,选择状态页签。在左侧集群组件中,单击YARN(MR2 Included)右侧的icon_3图标,进入过期配置页面。

    2. 过期配置页面,单击重启过时服务

    3. 重启过时服务页面,选中重新部署客户端配置后,单击立即重启

    4. 在服务全部重启完成,并重新部署客户端配置后,单击完成

配置Hive服务

注意

配置HDFS服务完成后,才能配置Hive服务。

在配置Hive服务之前,请确认/user/hive/目录中的数据已完成全量迁移。具体操作,请参见步骤三:数据迁移

  1. 修改元数据。

    本文以修改Hive服务元数据存储在MySQL中的数据为例,修改DBS表和SDS表相应的存储系统的URL。

    1. 执行use metastore;命令,进入存储Hive元数据的MySQL数据库。

    2. 修改表DBS中的数据。

      1. 执行SELECT * FROM DBS LIMIT 5;命令,查询表DBS中的数据。返回结果示例如下:

        +-------+-----------------------+----------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        | DB_ID | DESC                  | DB_LOCATION_URI                                                            | NAME                        | OWNER_NAME | OWNER_TYPE | CREATE_TIME |
        +-------+-----------------------+----------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        |     1 | Default Hive database | hdfs://cdh6-master:8020/user/hive/warehouse                                | default                     | public     | ROLE       |  1629164990 |
        |  1826 | NULL                  | hdfs://cdh6-master:8020/user/hive/warehouse/tpcds_text_2.db                | tpcds_text_2                | hive       | USER       |  1629702940 |
        |  1828 | NULL                  | hdfs://cdh6-master:8020/user/hive/warehouse/tpcds_bin_partitioned_orc_2.db | tpcds_bin_partitioned_orc_2 | hive       | USER       |  1629703145 |
        +-------+-----------------------+----------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        3 rows in set (0.00 sec)
      2. 更新DBS表中原HDFS地址为文件存储HDFS版挂载点地址。示例命令如下:

        UPDATE DBS SET DB_LOCATION_URI=REPLACE(DB_LOCATION_URI,'hdfs://cdh6-master:8020','dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290');
      3. 执行SELECT * FROM DBS LIMIT 5;命令,查看地址是否已更换。

        +-------+-----------------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        | DB_ID | DESC                  | DB_LOCATION_URI                                                                                                 | NAME                        | OWNER_NAME | OWNER_TYPE | CREATE_TIME |
        +-------+-----------------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        |     1 | Default Hive database | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/user/hive/warehouse                                | default                     | public     | ROLE       |  1629164990 |
        |  1826 | NULL                  | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/user/hive/warehouse/tpcds_text_2.db                | tpcds_text_2                | hive       | USER       |  1629702940 |
        |  1828 | NULL                  | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/user/hive/warehouse/tpcds_bin_partitioned_orc_2.db | tpcds_bin_partitioned_orc_2 | hive       | USER       |  1629703145 |
        +-------+-----------------------+-----------------------------------------------------------------------------------------------------------------+-----------------------------+------------+------------+-------------+
        3 rows in set (0.00 sec)
    3. 修改表SDS中的数据。

      1. 执行SELECT * FROM SDS LIMIT 5;命令,查询表SDS中的数据。返回结果示例如下:

        +-------+-------+------------------------------------------+---------------+---------------------------+--------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        | SD_ID | CD_ID | INPUT_FORMAT                             | IS_COMPRESSED | IS_STOREDASSUBDIRECTORIES | LOCATION                                                     | NUM_BUCKETS | OUTPUT_FORMAT                                              | SERDE_ID |
        +-------+-------+------------------------------------------+---------------+---------------------------+--------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        |  5423 |  1846 | org.apache.hadoop.mapred.TextInputFormat |               |                           | hdfs://cdh6-master:8020/tmp/tpcds-generate/2/store_sales     |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5423 |
        |  5424 |  1847 | org.apache.hadoop.mapred.TextInputFormat |               |                           | hdfs://cdh6-master:8020/tmp/tpcds-generate/2/store_returns   |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5424 |
        |  5425 |  1848 | org.apache.hadoop.mapred.TextInputFormat |               |                           | hdfs://cdh6-master:8020/tmp/tpcds-generate/2/catalog_sales   |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5425 |
        |  5426 |  1849 | org.apache.hadoop.mapred.TextInputFormat |               |                           | hdfs://cdh6-master:8020/tmp/tpcds-generate/2/catalog_returns |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5426 |
        |  5427 |  1850 | org.apache.hadoop.mapred.TextInputFormat |               |                           | hdfs://cdh6-master:8020/tmp/tpcds-generate/2/web_sales       |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5427 |
        +-------+-------+------------------------------------------+---------------+---------------------------+--------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        5 rows in set (0.00 sec)
      2. 更新SDS表中原HDFS地址为文件存储HDFS版挂载点地址。示例命令如下:

        UPDATE SDS SET LOCATION=REPLACE(LOCATION,'hdfs://cdh6-master:8020','dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290');
      3. 执行SELECT * FROM SDS LIMIT 5;命令,查看地址是否已更换。

        +-------+-------+------------------------------------------+---------------+---------------------------+---------------------------------------------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        | SD_ID | CD_ID | INPUT_FORMAT                             | IS_COMPRESSED | IS_STOREDASSUBDIRECTORIES | LOCATION                                                                                          | NUM_BUCKETS | OUTPUT_FORMAT                                              | SERDE_ID |
        +-------+-------+------------------------------------------+---------------+---------------------------+---------------------------------------------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        |  5423 |  1846 | org.apache.hadoop.mapred.TextInputFormat |               |                           | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/tpcds-generate/2/store_sales     |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5423 |
        |  5424 |  1847 | org.apache.hadoop.mapred.TextInputFormat |               |                           | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/tpcds-generate/2/store_returns   |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5424 |
        |  5425 |  1848 | org.apache.hadoop.mapred.TextInputFormat |               |                           | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/tpcds-generate/2/catalog_sales   |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5425 |
        |  5426 |  1849 | org.apache.hadoop.mapred.TextInputFormat |               |                           | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/tpcds-generate/2/catalog_returns |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5426 |
        |  5427 |  1850 | org.apache.hadoop.mapred.TextInputFormat |               |                           | dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/tpcds-generate/2/web_sales       |          -1 | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat |     5427 |
        +-------+-------+------------------------------------------+---------------+---------------------------+---------------------------------------------------------------------------------------------------+-------------+------------------------------------------------------------+----------+
        5 rows in set (0.00 sec)
  2. 重启服务。

    1. 登录CDH6的Cloudera Manager管理页面。

    2. 主页页面,选择状态页签。

    3. 在左侧集群组件列表中,单击Hive右侧的icon 图标 > 启动

    4. 在启动确认框中,单击启动

配置Spark服务

注意

配置HDFS服务完成后,才能配置Spark服务。

配置Spark服务前,请确认/user/spark/user/history目录中的数据已经完成了全量迁移。具体操作,请参见CDH6数据迁移

执行以下命令将最新的文件存储HDFS版Java SDK复制到Spark服务的jars目录下。其中,x.y.z文件存储HDFS版Java SDK版本号,请根据实际填写。

cp aliyun-sdk-dfs-x.y.z.jar /opt/cloudera/parcels/CDH/lib/spark/jars/
说明

集群中的每台机器都需要在相同位置添加文件存储HDFS版Java SDK。

配置HBase服务

注意

配置HDFS服务完成后,才能配置HBase服务。

配置HBase服务前,请确认原HDFS集群HBase中的快照已迁移至文件存储HDFS版。具体操作,请参见HBase快照迁移

  1. 登录CDH6的Cloudera Manager管理页面。

  2. 主页页面,选择配置 > 高级配置代码段,进入高级配置代码段页面。

  3. 在搜索框中输入hbase-site.xml进行搜索。在搜索结果的hbase-site.xml的HBase服务高级配置代码段(安全阀)hbase-site.xml的HBase客户端高级配置代码段(安全阀)区域中,均添加如下配置项。

    1. 配置hbase.rootdir。

      • 名称:hbase.rootdir

      • 值:dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/hbase

        其中f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com为您的文件存储HDFS版挂载点地址,请根据实际情况进行修改。

    2. 配置hbase.unsafe.stream.capability.enforce。

      • 名称:hbase.unsafe.stream.capability.enforce。

      • 值:falsehbase配置项Hbase-site-1

  4. 配置zookeeper.znode.parent。

    zookeeper.znode.parent默认配置为/hbase,HBase服务配置文件存储HDFS版时需修改该配置,否则会与存储在Zookeeper中的数据冲突。

    1. 主页页面,选择状态页签。

    2. 在左侧集群组件列表中,单击HBase右侧的icon 图标 > 配置,进入HBase配置页面。

    3. 在搜索框中输入zookeeper.znode.parent进行搜索,在搜索结果的ZooKeeper Znode父级区域中,配置新的HBase根Znode(例如/hbase_dfs)。hbase_dfs

    4. 单击保存更改

  5. 部署新配置并重启服务。

    1. 返回状态页签,在左侧集群组件列表中,单击HBase右侧的icon_3 图标,进入过期配置页面。

    2. 过期配置页面,单击重启过时服务

    3. 重启过时服务页面,单击立即重启

    4. 等待服务全部重启完成,并重新部署客户端配置后,单击完成

  6. (可选)快照恢复。

    将存储在原HDFS集群的(可选)步骤二:HBase快照迁移文件存储HDFS版后,可通过在HBase Shell中执行以下命令查看和恢复文件存储HDFS版中已经迁移的快照。

    • 执行list_snapshots命令,查看快照信息。

      SNAPSHOT                                              TABLE + CREATION TIME
       mock_table_0_snapshot                                mock_table_0 (2021-11-19 17:25:38 +0800)
       mock_table_1_snapshot                                mock_table_1 (2021-11-19 17:25:47 +0800)
      2 row(s)
      Took 0.4619 seconds
      => ["mock_table_0_snapshot", "mock_table_1_snapshot"]
    • 执行以下命令,恢复快照。

      restore_snapshot 'mock_table_0_snapshot'
      restore_snapshot 'mock_table_1_snapshot'

停止HDFS服务

完成上述各项服务配置后,集群的HDFS服务已经替换为文件存储HDFS版,建议您停止集群的HDFS服务。

您可以在主页页面,选择状态页签。在左侧集群组件中,单击HDFS右侧的icon 图标 > 停止,停止HDFS服务。

说明

停止HDFS服务前,请确认HDFS所有需要迁移的数据都已被迁移,停止HDFS服务后将无法迁移数据。具体操作,请参见CDH6数据迁移

验证服务正确性

YARN服务验证

  1. 使用CDH Hadoop中自带包hadoop-mapreduce-examples-3.x.x-cdh6.x.x.jar进行测试,在/tmp/randomtextwriter目录下生成大小约为128 MB的文件,示例命令如下。

    yarn jar \
    /opt/cloudera/parcels/CDH/jars/hadoop-mapreduce-examples-*-cdh*.jar \
    randomtextwriter \
    -D mapreduce.randomtextwriter.totalbytes=134217728 \
    /tmp/randomtextwriter

  1. 执行以下命令验证YARN服务与文件存储HDFS版实例的连通性。

    hadoop fs -ls dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/randomtextwriter

    如果看到_SUCCESS和part-m-00000两个文件,表示YARN服务与文件存储HDFS版实例连通成功。YARN验证

Hive服务验证

  • 数据迁移验证

    本文以原HDFS集群TPC-DS的数据已迁移到文件存储HDFS版为例,进行数据迁移验证。

    1. 登录Hue管理控制台,查看store_sales表详细信息中的Location是否已变更为配置Hive服务时修改的文件存储HDFS版挂载点地址。

      TCP-DS
    2. 执行一条SQL语句,验证Hive服务与文件存储HDFS版实例之间的连通性。

      SELECT *
      FROM
        (SELECT i_manager_id ,
                sum(ss_sales_price) sum_sales ,
                avg(sum(ss_sales_price)) over (partition BY i_manager_id) avg_monthly_sales
         FROM item ,
              store_sales ,
              date_dim ,
              store
         WHERE ss_item_sk = i_item_sk
           AND ss_sold_date_sk = d_date_sk
           AND ss_store_sk = s_store_sk
           AND d_month_seq IN (1211,
                               1211+1,
                               1211+2,
                               1211+3,
                               1211+4,
                               1211+5,
                               1211+6,
                               1211+7,
                               1211+8,
                               1211+9,
                               1211+10,
                               1211+11)
           AND ((i_category IN ('Books',
                                'Children',
                                'Electronics')
                 AND i_class IN ('personal',
                                 'portable',
                                 'reference',
                                 'self-help')
                 AND i_brand IN ('scholaramalgamalg #14',
                                 'scholaramalgamalg #7',
                                 'exportiunivamalg #9',
                                 'scholaramalgamalg #9')) or(i_category IN ('Women','Music','Men')
                                                             AND i_class IN ('accessories','classical','fragrances','pants')
                                                             AND i_brand IN ('amalgimporto #1','edu packscholar #1','exportiimporto #1', 'importoamalg #1')))
         GROUP BY i_manager_id,
                  d_moy) tmp1
      WHERE CASE
                WHEN avg_monthly_sales > 0 THEN ABS (sum_sales - avg_monthly_sales) / avg_monthly_sales
                ELSE NULL
            END > 0.1
      ORDER BY i_manager_id ,
               avg_monthly_sales ,
               sum_sales
      LIMIT 100;
    3. 查看SQL结果。如果回显正常,则表示Hive服务与文件存储HDFS版实例之间的连通性正常。

  • 新建数据表验证

    1. 在Hue中创建表并查看表信息。

      DROP TABLE IF EXISTS user_info_test;
      CREATE TABLE user_info_test(user_id BIGINT, firstname STRING, lastname STRING, country STRING);
      INSERT INTO user_info_test VALUES(1,'Dennis','Hu','CN'),(2,'Json','Lv','Jpn'),(3,'Mike','Lu','USA');
      Hue表信息
    2. 执行以下命令,查询SQL。

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

      如果回显正常,则表示Hive服务与文件存储HDFS版实例之间的连通性正常。

Spark服务验证

  1. 使用CDH Spark中自带包spark-examples_*-cdh*.jar从本地读取文件写入文件存储HDFS版实例。

    spark-submit \
    --master yarn \
    --executor-memory 2G \
    --executor-cores 2 \
    --class org.apache.spark.examples.DFSReadWriteTest \
    /opt/cloudera/parcels/CDH/jars/spark-examples_*-cdh*.jar \
    /etc/profile /tmp/sparkwrite
  2. 执行以下命令,查看是否写入成功。

    hadoop fs -ls dfs://f-xxxxxxxx.cn-zhangjiakou.dfs.aliyuncs.com:10290/tmp/sparkwrite/*

    如果看到返回信息中包含如下信息,则表示写入成功。Spark验证

HBase服务验证

  • 数据迁移验证

    查看迁移到文件存储HDFS版两张表的数据行数(表mock_table_0和表mock_table_1)。示例如下:

    hbase(main):001:0> list
    TABLE
    mock_table_0
    mock_table_1
    2 row(s)
    Took 0.3587 seconds
    => ["mock_table_0", "mock_table_1"]
    hbase(main):002:0> count 'mock_table_0'
    Current count: 1000, row: 001637311398
    ........
    Current count: 100000, row: 991637311398
    100000 row(s)
    Took 7.2724 seconds
    => 100000
    hbase(main):003:0> count 'mock_table_1'
    Current count: 1000, row: 001637311398
    ........
    Current count: 100000, row: 991637311398
    100000 row(s)
    Took 3.9399 seconds
    => 100000

  • 新建数据表验证

    1. 使用HBase Shell创建测试表(例如hbase_test)并插入数据。示例如下:

      hbase(main):001:0> create 'hbase_test','info'
      Created table hbase_test
      Took 1.7688 seconds
      => Hbase::Table - hbase_test
      hbase(main):002:0> list
      TABLE
      hbase_test
      mock_table_0
      mock_table_1
      3 row(s)
      Took 0.0147 seconds
      => ["hbase_test", "mock_table_0", "mock_table_1"]
      hbase(main):003:0> put 'hbase_test','1', 'info:name' ,'Sariel'
      Took 0.2415 seconds
      hbase(main):004:0> put 'hbase_test','1', 'info:age' ,'22'
      Took 0.0053 seconds
      hbase(main):005:0> put 'hbase_test','1', 'info:industry' ,'IT'
      Took 0.0631 seconds
      hbase(main):006:0> scan 'hbase_test'
      ROW                                                   COLUMN+CELL
       1                                                    column=info:age, timestamp=1637636289233, value=22
       1                                                    column=info:industry, timestamp=1637636299912, value=IT
       1                                                    column=info:name, timestamp=1637636279553, value=Sariel
      1 row(s)
      Took 0.0227 seconds
    2. 文件存储HDFS版上的HBase数据目录查看是否有新建的测试表。HBase验证

至此,CDH中的服务已经迁移到文件存储HDFS版

常见问题

  1. SecondaryNameNode服务停止。

    根据文档操作步骤配置文件存储HDFS版后,CDH中的HDFS服务会报错,报错信息:SecondaryNameNode服务无法启动。这是由于SecondaryNameNode服务需要通过http get方式获取NameNode的fsimage与edits文件进行工作。而文件存储HDFS版不提供HTTP服务,所以SecondaryNameNode服务无法启动。此时,CDH内的Spark\Hive\Hbase服务已经使用阿里云文件存储HDFS版读写数据,CDH自身的HDFS服务问题不会影响系统运行和数据安全。

  2. Hue服务文件浏览器不可用。

    Hue是通过WebHDFS REST API访问HDFS上的文件。文件存储HDFS版暂不支持WebHDFS REST API,因此不可以在Hue上直接操作文件存储HDFS版实例上的文件。

后续步骤

卸载并释放CDH6 HDFS服务使用的云盘

阿里云首页 文件存储HDFS版 相关技术圈