hive insert overwrite hdfs(hive输出结果导出到hdfs) 错误

近日将原来MR 处理到etl 部分转移到Hive Serde 处理导出到HDFS的时候,Hive导出过程出错caused by: java.io.IOException: Cannot get DistCp constructor: org.apache.hadoop.tools.DistCp.()

  • hadoop 2.7.2 hive 1.2.1
  • 报错的问题是无法初始化 DistCp class 看了下这部分的代码 Hadoop
    hive insert overwrite hdfs(hive输出结果导出到hdfs) 错误_第1张图片
    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包

你可能感兴趣的:(hive insert overwrite hdfs(hive输出结果导出到hdfs) 错误)