文档

CDH6数据迁移

更新时间:

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

前提条件

  1. 已开通文件存储 HDFS 版服务并创建文件系统实例和挂载点。具体操作,请参见文件存储HDFS版快速入门

  2. 已在阿里云上创建ECS实例并安装CDH6集群。具体操作,请参见CDH官方文档

    本文档中使用的CDH版本为 6.3.2。

背景信息

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

步骤一:为文件存储 HDFS 版添加用户和组映射

迁移数据前,您需要在文件存储 HDFS 版文件系统实例上创建原CDH集群HDFS服务中已有的用户和组映射关系。关于文件存储 HDFS 版实例访问控制的详细信息,请参见访问控制

  1. 获取原CDH集群HDFS服务已有的用户和组映射关系。详细信息,请参见CDH用户和组说明

  2. 根据原CDH集群HDFS服务的用户和组映射关系为文件存储 HDFS 版实例配置用户和组映射关系。

    1. 登录文件存储 HDFS 版OpenAPI控制台

    2. 在左侧导航栏,选择用户和组映射 > 创建用户和组映射关系

    3. CreateUserGroupsMapping界面,选择服务地址,单击参数配置页签,配置如下参数。

      参数

      说明

      示例值

      InputRegionId

      文件存储 HDFS 版文件系统实例所在的地域。

      cn-hangzhou

      FileSystemId

      文件存储 HDFS 版的文件系统实例ID。

      55C5FFD6-BF99-41BD-9C66-FFF39189****

      UserName

      本地HDFS的用户名。

      hdfs

      GroupNames

      本地HDFS用户名对应的用户组名。

      重要

      文件存储 HDFS 版中超级用户组为supergroup,依赖超级用户权限的用户需要添加到该用户组。

      ["hdfs","hadoop","supergroup"]

    4. 配置完成后,单击发起调用

      若返回RequestId参数,则表示创建成功。反之,请根据返回的错误码信息,排查错误原因。

    5. 可选:配置成功后,您可以调用ListUserGroupsMappings接口查看文件存储 HDFS 版实例已有的用户和组的映射关系。

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

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

  2. 配置文件存储 HDFS 版实现类及Java SDK。

    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版根目录中创建/hbase目录。

    hadoop fs -mkdir dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase

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

  3. 通过刚创建的快照将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 \
    --chuser hbase --chgroup 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 \
    --chuser hbase --chgroup hbase

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

  4. 设置/hbase目录和原CDH集群HDFS上相同的用户和用户组。

    默认情况下该目录用户和用户组为hbase:hbase,请根据实际情况替换。

    hadoop fs -chown -R hbase:hbase dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase

步骤四:数据迁移

  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 -ptop 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版。 您还可以使用Distcp的-filters参数在迁移过程中忽略原HDFS上的目录或文件,实现部分文件目录的迁移。

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

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

后续步骤

配置CDH6使用文件存储 HDFS 版

  • 本页导读 (1)
文档反馈