本文介绍如何将CDH中本地HDFS的数据迁移到文件存储HDFS版,实现存储计算分离。
前提条件
- 已开通文件存储HDFS版服务并创建文件系统实例和挂载点。具体操作,请参见文件存储HDFS版快速入门。
- 已在阿里云上创建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实例访问控制的详细信息,请参见访问控制。
- 获取原CDH集群HDFS服务已有的用户和组映射关系。详细信息,请参见CDH用户和组说明。
- 根据原CDH集群HDFS服务的用户和组映射关系为文件存储HDFS版实例配置用户和组映射关系。
步骤二:配置文件存储HDFS版
- 登录CDH6的Cloudera Manager管理页面。
- 配置文件存储HDFS版实现类及Java SDK。
- 配置mapreduce.application.classpath。
- 配置文件存储HDFS版Java SDK。
- 部署客户端配置。
- 返回主页页面,选择状态页签。在左侧集群组件中,单击HDFS右侧的
图标,进入过期配置页面。
- 在过期配置页面,单击重启过时服务。
- 在重启过时服务页面,选中重新部署客户端配置后,单击立即重启。
- 在服务全部重启完成,并重新部署客户端配置后,单击完成。
- 返回主页页面,选择状态页签。在左侧集群组件中,单击HDFS右侧的
(可选)步骤三: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
操作步骤
- 在HBase Shell中执行以下命令,为mock_table_0和mock_table_1创建快照。
snapshot 'mock_table_0','mock_table_0_snapshot'
snapshot 'mock_table_1','mock_table_1_snapshot'
- 在文件存储HDFS版根目录中创建/hbase目录。
hadoop fs -mkdir dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase
其中
f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com
为您的文件存储HDFS版挂载点地址,请根据实际情况进行修改。 - 通过刚创建的快照将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版挂载点地址,请根据实际情况进行修改。 - 设置/hbase目录和原CDH集群HDFS上相同的用户和用户组。
默认情况下该目录用户和用户组为hbase:hbase,请根据实际情况替换。
hadoop fs -chown -R hbase:hbase dfs://f-xxxxxxxxxxxxxxx.cn-xxxxxxx.dfs.aliyuncs.com:10290/hbase
步骤四:数据迁移
- 暂停服务。
为了保证在更换文件存储系统的过程中文件数据不丢失,需要暂停数据处理服务(例如:YARN服务、Hive服务、Spark服务、HBase服务等),HDFS服务仍需保持运行。此处以停止Hive服务为例进行说明。
- 在CDH Web主页,找到Hive服务,在右侧的操作项中,单击停止。
- 在停止确认框中,单击停止。当Hive前的图标变成灰色,表示该服务完全停止。
- 重复上述步骤,停止剩余服务。
说明 建议只保留HDFS服务正常运行,以方便进行数据迁移。如果要迁移的数据量大,请开启YARN服务,以便使用Hadoop DistCp数据迁移工具并行执行迁移任务。 - 迁移数据。建议将/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版挂载点地址,请根据实际情况进行修改。