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.<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包
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容