Hadoop集群数据迁移

集群版本

源集群: 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');“
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章