Hadoop——集群数据迁移(Hive Export/Import、Hadoop DistCp)

集群版本

源集群: Hadoop-2.7.3、Hive-1.2.1(均为Apache开源版本)
目标集群: Hadoop-2.6.0、Hive-1.1.0(均为CDH-5.15.0版本)

迁移步骤

第一步:Hive export命令导出表到HDFS指定目录
hive -e "export table test.user_info to '/hive_export/test.user_info';

import和export命令的基本用法可以参考:
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

默认配置参数情况下,如果表中单个文件大于32M,导出时会报错:

Failed with exception Cannot get DistCp constructor: org.apache.hadoop.tools.DistCp.<init>()
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.CopyTask

原因:由于export命令相当于拷贝hive表数据到指定目录,拷贝文件的默认最大值为hive.exec.
copyfile.maxsize=33554432(32M),超过了这个阈值,会报上述错误。解决办法就是给参数hive.
exec.copyfile.maxsize设置一个适合你表文件大小的值,例如set hive.exec.copyfile.maxsize = 335544320(320M)。

第二步:传输数据到目标集群
hadoop distcp hftp://host:50070/hive_export/test.user_info/* hdfs://nameservice1/hive_import/test.user_info

distcp基本用法可参考:http://hadoop.apache.org/docs/current/hadoop-distcp/DistCp.html

注意: 此命令要在目标集群的Namenode节点执行

如果你的源集群和目标集群版本不一致会报以下错误信息:

Caused by: java.io.IOException: Couldn't run retriable-command
Caused by: java.io.IOException: Check-sum mismatch between

解决方法:可以在distcp后面跟上 -Ddfs.checksum.type=CRC32 或 -pb

第三步:Hive import命令将数据导入到Hive表
hive -e "import table test.user_info from '/hive_import/test.user_info';"

可以给表重命名,也可以导出为外部表。可参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+ImportExport

第四步:修改hive表存储路径

只有在源集群和目标集群的NameNode别名不一致时才执行,否则Spark SQL无法访问Hive表。

hive -e "alter table test.user_info set serdeproperties ('path' = 'hdfs://nameservice1/user/hive/warehouse/test.db/user_info');“
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值