CDH6数据迁移
本文介绍如何将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 版实例配置用户和组映射关系。
在左侧导航栏,选择 。
在CreateUserGroupsMapping界面,选择服务地址,单击参数配置页签,配置如下参数。
参数
说明
示例值
InputRegionId
文件存储 HDFS 版文件系统实例所在的地域。
cn-hangzhou
FileSystemId
文件存储 HDFS 版的文件系统实例ID。
55C5FFD6-BF99-41BD-9C66-FFF39189****
UserName
本地HDFS的用户名。
hdfs
GroupNames
本地HDFS用户名对应的用户组名。
重要在文件存储 HDFS 版中超级用户组为supergroup,依赖超级用户权限的用户需要添加到该用户组。
["hdfs","hadoop","supergroup"]
配置完成后,单击发起调用。
若返回RequestId参数,则表示创建成功。反之,请根据返回的错误码信息,排查错误原因。
可选:配置成功后,您可以调用ListUserGroupsMappings接口查看文件存储 HDFS 版实例已有的用户和组的映射关系。
步骤二:配置文件存储 HDFS 版
登录CDH6的Cloudera Manager管理页面。
配置文件存储 HDFS 版实现类及Java SDK。
在主页页面,选择 ,进入高级配置代码段页面。
在搜索框中输入
core-site.xml
进行搜索,在搜索结果HDFS的core-site.xml的群集范围高级配置代码段(安全阀)区域中,单击添加文件存储 HDFS 版配置项。
配置fs.dfs.impl。
名称:fs.dfs.impl。
值::com.alibaba.dfs.DistributedFileSystem。
配置fs.AbstractFileSystem.dfs.impl。
名称:fs.AbstractFileSystem.dfs.impl。
值::com.alibaba.dfs.DFS。
单击保存更改。
配置mapreduce.application.classpath。
返回主页页面,选择状态页签。
在左侧集群组件列表中,单击YARN(MR2 Included)右侧 ,进入YARN(MR2 Included)配置页面。
在搜索框中输入mapreduce.application.classpath进行搜索,在搜索结果的MR应用程序Classpath区域中,单击
添加$HADOOP_HDFS_HOME/*配置。
单击保存更改。
配置文件存储 HDFS 版Java SDK。
下载最新的文件存储 HDFS 版Java SDK(aliyun-sdk-dfs-x.y.z.jar)。
将下载的文件存储 HDFS 版Java SDK复制到CDH HDFS服务的CLASSPATH路径下。
cp aliyun-sdk-dfs-x.y.z.jar /opt/cloudera/parcels/CDH/lib/hadoop-hdfs/
说明集群中的每台机器都需要在相同位置添加文件存储 HDFS 版 Java SDK。
部署客户端配置。
返回主页页面,选择状态页签。在左侧集群组件中,单击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 版挂载点地址,请根据实际情况进行修改。