hive insert overwrite hdfs(hive输
2017-04-21 本文已影响0人
kris37
近日将原来MR 处理到etl 部分转移到Hive Serde 处理导出到HDFS的时候,Hive导出过程出错caused by: java.io.IOException: Cannot get DistCp constructor: org.apache.hadoop.tools.DistCp.<init>()
- hadoop 2.7.2 hive 1.2.1
- 报错的问题是无法初始化 DistCp class 看了下这部分的代码 Hadoop
src-pic
而Hive
中实现接口HadoopShims 中runDistCp的方法时采用的是反射
Class clazzDistCp = Class.forName("org.apache.hadoop.tools.DistCp");Constructor c = clazzDistCp.getConstructor();
无参构造,而hadoop2.7.2中DistCp类的无参构造方法是 default 不是public,反射无法获取。 - 解决办法 可以找一个hadoop 2.6X的包hadoop-distcp-2.6.5.jar 放到hive/lib 目录下。或者修改 hadoop 对应到包 修改其无参构造方法声明为public,替换掉hadoop目录下到jar包