hadoop使用distcp数据迁移
数据迁移
命令 hadoop distcp:
hadoop distcp -log ~/distcp_stage.log hdfs://192.168.1.1:9000/user/hive/warehouse/ods hdfs://192.168.1.2:8020/user/hive/warehouse/
注意事项
这里的 source hdfs 和 target hdfs 必须得是 namenode 所在节点
遇到的问题
1.数据迁移后 hive表 count(*) = 0
可能是同步过来的数据在hive的 metastore 里没有行数信息,执行一次 insert overwirte 后就有数据了
也有可能是应用程序权限问题
2.分区表无数据
分区表还需要手动添加分区,alter table xxx add if not exists partition(key1="value1", key2="value2") partition(key1="value3", key2="value4")
hive shell 通过 msck repair table xxx
可以自动去读取hdfs下文件信息,来添加元数据中不存在的分区信息,但是存在jdbc连接时不识别 msck 指令的情况
3.客户端工具无法执行insert overwrite
datagrip执行insertoverwrite 报 return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
查询yarn日志发现: 找不到或无法加载主类 org.apache.hadoop.mapreduce.v2.app.MRAppMaster
但是在hive命令行中可以执行
有可能是hadoop目录权限问题
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!