数据迁移distcp方案
- 概况:
根据迁移的实际情况,由于数据量大、重要、迫切性,因此实施方案每一步都需严谨执行,并且当出错时清楚缺少的数据和补救的办法。
- 具体实施计划:
- 大的步骤分为3步,即export、distcp、import。
- 在export导出数据时,以时间戳作为参数,如将三个月的数据为一个单位导出,出错时,重复执行。命令案例:
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.Export ship_historical_trace /ship_historical_trace0 1 0 1514736000000
注释:
1514736000000 为2018-01-01 00:00:00的时间戳
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.Export ship_historical_trace /ship_historical_trace1 1 1514736000000 1522425600000
注释:
1514736000000 为 2018-01-01 00:00:00的时间戳
1522425600000 为 2018-03-31 00:00:00的时间戳
………
- 在执行distcp拷贝文件时,首先确定以下几点:
(1)首先确保两个集群的mapreduce计算框架没问题
(2)开通目标集群所有机器到源集群namenode节点的网络
(3)版本差距不是很大时,用hdfs协议;版本差距较大时,用hftp协议
(4)在ambari在的节点上使用命令,只有该节点可以免密登录其他机器
(5)文件拷贝的路径需要写namenode存在节点,因为只用它开启了rpc端口
(6)在目标集群的ambari节点执行命令
命令案例:
sudo -u hdfs hadoop distcp -i hdfs://192.168.16.1:8020/ship_historical_trace0 hdfs://172.172.160.101/
sudo -u hdfs hadoop distcp -i hdfs://192.168.16.1:8020/ship_historical_trace1 hdfs://172.172.160.101/
……….
- import导入数据的性能:
- 原数据表已存在key,不会修改
- 原数据没有数据,做插入操作
命令案例:
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.Import ship_historical_trace /ship_historical_trace0
sudo -u hdfs hbase org.apache.hadoop.hbase.mapreduce.Import ship_historical_trace /ship_historical_trace1
………
- 评估操作是否成功的方法:
- 根据yarn或mapreduce的节点端口8088查看job任务的进度。根据job的id得知哪些操作失败,将操作失败命令做再次尝试。
- 根据namenode节点端口50070查看具体文件的个数情况,粗略判断是否成功。
- 使用命令查看hdfs具体文件夹大小
sudo -u hdfs hadoop fs -du –h /ship_historical_trace0
- 在文件夹拷贝过程中,单个文件丢失时,可单独拷贝该文件:
sudo -u hdfs hadoop distcp -i hdfs://192.168.16.1:8020/ship_historical_trace0/part-m-00000 hdfs://172.172.160.101/ship_historical_trace/part-m-00000
- 操作成功后,使用hbase shell命令随机查看两集群几组数据,进行比较
- 测试效率统计:
文件大小 | export用时 | distcp用时 | import用时 |
632.7G | 24小时 | 13小时(跨集群) | (期间磁盘满了,操作失败) |
44.53 GB | (没做) | 615秒(集群内) 1小时8分(跨集群) | 4小时 |