大数据环境(CDH)在不同集群间的数据迁移

1.hadoop目录查询指令

hadoop集群中使用了hdfs作为文件存储方式
hadoop fs –ls /user/hive/warehouse

2.hadoop数据迁移指令

hadoop distcp hdfs://nn1:8020/user/hive/warehouse/foo hdfs://nn2:8020/user/hive/warehouse
nn1是数据源的ip或集群中的命名,nn2是迁移到的目标ip。
foo是hdfs存放元数据的根目录,同时也是impala表的表名(下面会提到)。迁移的时候目录会从nn1的集群复制迁移到nn2的warehouse目录下。

迁移完成后,通过1的指令查看目标底下是否存在目录和数据,验证数据迁移是否成功。

3.创建impala数据表结构

集群使用impala作为hdfs的大数据查询工具。Impala按照SQL的标准来进行数据库表搜索。

(1) 首先在nn1上找到建表语句

impala-shell 指令进入到impala的命令行
use default; 使用default数据库
show create table foo; 查看元数据的表结构

(2) 在nn2上创建同样的表结构

复制nn1的表结构,在nn2上创建。之后,验证源数据和目标数据是否一致,确保数据的完整性,迁移完成。使用以下impala语句。
select count(*) from foo;
select * from foo limit 10;

4. 迁移过程中遇到的问题

(1)内存占用过大,迁移工作卡顿

频繁的多开迁移数据会造成服务器压力过大。且迁移过程中占用的内存在迁移任务结束后也不会释放。影响迁移效率。
因此需要频繁的清空服务器集群中缓存,指令如下。
sync
echo 3 > /proc/sys/vm/drop_caches

(2)cdh版本不同

nn1的集群和nn2的集群所安装的cdh的版本是不一样的。
这个问题主要出现在数据量超过千万的表迁移的时候,需要在迁移的时候加如下2个参数,以及nn2下新增的目录foo。
hadoop distcp –skipcrccheck -update hdfs://nn1:8020/user/hive/warehouse/foo hdfs://nn2:8020/user/hive/warehouse/foo

(3)十亿条以上记录的表迁移失败

解决方法使用通配符*进行分批迁移,视情况分多少批。
如test_table表内有21e数据,表内是按照day进行分区

第一次将数据分成18年和19年2部分进行迁移,失败了。
hadoop distcp
hdfs://nn1:8020/user/hive/warehouse/test_table/day=2018*
hdfs://nn2:8020/user/hive/warehouse/test_table

第二次将数据按照月份进行迁移,部分成功。
hadoop distcp
hdfs://nn1:8020/user/hive/warehouse/test_table/day=201801*
hdfs://nn2:8020/user/hive/warehouse/test_table

5.可能提升迁移效率的方法

清空垃圾回收站,在hadoop集群中迁移失败而删除的文件都会保存在.Trash目录中。方便找回,占用资源。通过以下指令进行删除。
hadoop fs -rmr .Trash

发布了29 篇原创文章 · 获赞 0 · 访问量 392

猜你喜欢

转载自blog.csdn.net/qq_43399077/article/details/102995339
今日推荐