本文介绍如何将CDH中本地HDFS的数据迁移到文件存储HDFS版,实现存储计算分离。

前提条件

  1. 已开通文件存储HDFS版服务并创建文件系统实例和挂载点。具体操作,请参见文件存储HDFS版快速入门
  2. 已在阿里云上创建ECS实例并安装CDH6集群。具体操作,请参见CDH官方文档

背景信息

CDH(Cloudera's Distribution, including Apache Hadoop)是众多Hadoop发行版本中的一种,您可以使用文件存储HDFS版替换CDH6原有的本地HDFS服务,通过CDH6和文件存储HDFS版实现大数据计算在云上的存储与计算分离,应对灵活多变的业务需求的挑战。

步骤一:配置文件存储HDFS版

  1. 登录CDH6的Cloudera Manager管理页面。
  2. 配置文件存储HDFS版实现类。
    1. 主页页面,选择配置 > 高级配置代码段,进入高级配置代码段页面。
    2. 在搜索框中输入core-site.xml进行搜索,在搜索结果HDFS的core-site.xml的群集范围高级配置代码段(安全阀)区域中,单击icon-2 添加文件存储HDFS版配置项。
      1. 配置fs.dfs.impl。
        • 名称fs.dfs.impl
        • 值:com.alibaba.dfs.DistributedFileSystem
      2. 配置fs.AbstractFileSystem.dfs.impl。
        • 名称fs.AbstractFileSystem.dfs.impl
        • 值:com.alibaba.dfs.DFS
      配置项
    3. 单击保存更改
  3. 配置mapreduce.application.classpath。
    1. 返回主页页面,选择状态页签。
    2. 在左侧集群组件列表中,单击YARN(MR2 Included)右侧icon 图标 > 配置,进入YARN(MR2 Included)配置页面。
    3. 在搜索框中输入mapreduce.application.classpath进行搜索,在搜索结果的MR应用程序Classpath区域中,单击icon-2添加$HADOOP_HDFS_HOME/*配置。
      YARN
    4. 单击保存更改
  4. 配置文件存储HDFS版Java SDK。
    1. 下载最新的文件存储HDFS版Java SDK(aliyun-sdk-dfs-x.y.z.jar)。
    2. 将下载的文件存储HDFS版Java SDK复制到CDH HDFS服务的CLASSPATH路径下。
      cp aliyun-sdk-dfs-x.y.z.jar /opt/cloudera/parcels/CDH/lib/hadoop-hdfs/
      说明 集群中的每台机器都需要在相同位置添加文件存储HDFS版 Java SDK。
  5. 部署客户端配置。
    1. 返回主页页面,选择状态页签。在左侧集群组件中,单击HDFS右侧的icon_3图标,进入过期配置页面。
    2. 过期配置页面,单击重启过时服务
    3. 重启过时服务页面,选中重新部署客户端配置后,单击立即重启
    4. 在服务全部重启完成,并重新部署客户端配置后,单击完成

(可选)步骤二:HBase快照迁移

如果原HDFS集群中已部署HBase服务且存在业务数据,您需要将HBase中的数据以快照方式迁移到文件存储HDFS版

本文以HBase服务的两个模拟表(mock_table_0和mock_table_1),每个表的中的模拟数据有10万条为例,介绍将HBase中的数据以快照方式迁移到文件存储HDFS版
hbase(main):001:0> list
TABLE
mock_table_0
mock_table_1
2 row(s)
Took 0.4213 seconds
=> ["mock_table_0", "mock_table_1"]
hbase(main):002:0> count 'mock_table_1'
Current count: 1000, row: 001637311398
.....
Current count: 100000, row: 991637311398
100000 row(s)
Took 4.3696 seconds
=> 100000
hbase(main):003:0> count 'mock_table_0'
Current count: 1000, row: 001637311398
......
Current count: 100000, row: 991637311398
100000 row(s)
Took 4.0691 seconds
=> 100000
  1. 在HBase Shell中执行以下命令,为mock_table_0和mock_table_1创建快照。
    snapshot 'mock_table_0','mock_table_0_snapshot'
    snapshot 'mock_table_1','mock_table_1_snapshot'
  2. 通过刚创建的快照将HDFS中的数据拷贝到文件存储HDFS版
    sudo -u hdfs hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
    -snapshot mock_table_0_snapshot \
    -copy-to dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase
    sudo -u hdfs hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot \
    -snapshot mock_table_1_snapshot \
    -copy-to dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase

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

步骤三:数据迁移

  1. 暂停服务。

    为了保证在更换文件存储系统的过程中文件数据不丢失,需要暂停数据处理服务(例如:YARN服务、Hive服务、Spark服务、HBase服务等),HDFS服务仍需保持运行。此处以停止Hive服务为例进行说明。

    1. 在CDH Web主页,找到Hive服务,在右侧的操作项中,单击停止
    2. 在停止确认框中,单击停止。当Hive前的图标变成灰色,表示该服务完全停止。
    3. 重复上述步骤,停止剩余服务。
    说明 建议只保留HDFS服务正常运行,以方便进行数据迁移。但是如果要迁移的数据量大,请开启YARN服务,以便使用数据迁移工具Hadoop DistCp并行执行迁移任务。
  2. 迁移数据。
    建议将/user等服务目录和相关数据目录全量迁移至文件存储HDFS版
    • 如果涉及将云下集群的数据迁移到云上。具体操作,请参见迁移开源HDFS的数据到文件存储HDFS版
    • HBase服务只迁移快照,其他数据目录不迁移。
    • 如果CDH原HDFS文件系统上的数据量较小,可以使用hadoop fs -cp命令进行数据迁移。

      为了避免因为权限问题导致数据迁移失败,建议切换到hdfs用户执行命令。

      sudo -u hdfs hadoop fs -cp hdfs://oldclusterip:8020/user  dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/

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

    • 如果CDH HDFS文件系统上的数据量较大,需要使用数据迁移工具Hadoop Distcp进行数据迁移。具体操作,请参见迁移开源HDFS的数据到文件存储HDFS版
      sudo -u hdfs hadoop distcp hdfs://oldclusterip:8020/user  dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/

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

后续步骤

配置CDH6使用文件存储HDFS版