如何进行数据迁移

一般而言,数据迁移常用于集群之间,但集群之间往往会出现cdh版本不同,那么如何查询集群的cdh版本呢?
可以使用命令 hadoop version 查看

不同版本的cdh的数据迁移方式也不一样,下面来介绍下相同版本和不同版本cdh 的数据迁移方式:
注意: ip1–源集群,ip2–目标集群
一、相同版本

  1. 使用命令
hadoop distcp hdfs://ip1:host/source hdfs://ip2:host/source

二、不同版本

  1. 使用hftp协议
hadoop distcp hftp://ip1:host/source hdfs://ip2:host/source
  1. 使用参数-skipcrccheck -update
hadoop distcp -skipcrccheck -update hdfs://ip1:host/source hdfs://ip2:host/source

数据迁移前,应查看文件是否存在,否则会报file don’t exist错误。

hadoop fs -ls /source

记得数据迁移后,也应该查看文件是否迁移完成。

impala建表

上面只是进行数据文件的迁移,但是要显示数据,需要创建hive表,一般而言与原表格式一致,记得设置hive表格式,否则会出现数据格式乱码问题,建表格式如下:

create table if not exists user(
id string comment 'openId', 
phone string comment '电话', 
user_name string comment '用户名', 
sex string comment '性别,直接存男女', 
certificate_no string comment '身份证',  
create_time string 
)
row format delimited fields terminated by '\t' NULL DEFINED AS '' stored as textfile;

常见错误与解决方案

  1. 数据乱码问题
    乱码问题只有两种情况:
    (1)建表未指定格式textfileparquet
    (2)操作工具未设置字符编码,如我用Xshell,需要设置Xshell的字符编码utf-8
  2. 版本不一致,会报错Check-Sum,只要有这个,就肯定是版本不一致,怎么解决,请参考上面
  3. 文件传输慢:一般数据量小的文件传输,有可能是文件数/目录数过多,只要控制好集群的磁盘就可以了。使用清除缓存命令syncecho 3 > /proc/sys/vm/drop_cacahes
  4. 快速复制表结构:复制好之后,保存到一个文件中,使用vim编辑器,末行模式下: :1,$s/|/ /g快速去除符号|

更多推荐