java.lang.RuntimeException:hive shell中的java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Put.setDurability

时间:2015-04-11 02:44:34

标签: hadoop hive hbase

我是hadoophbasehive环境的新手。我使用完全分布式模式配置了hadoop和hbase节点。我在hive表中插入了一些示例数据。

我为hbase表创建了一个表配置单元,用于访问hbase表数据并从hive表中读取数据,反之亦然

create external table testing 
(key string
, name string
, age int
, year int
, salary int) 
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
WITH SERDEPROPERTIES 
(hbase.columns.mapping = :key,cf1:name,cf1:id,cf2:year,cf2:salary)
TBLPROPERTIES (hbase.table.name = basetbalename)

和hbase表我创建了两个列族。

create 'hbasetablename' ,'cf1', 'cf2'

一切正常。但是当我从hive覆盖数据到hbase表时会出现错误。我不知道为什么会出现错误。

我试图覆盖像这样的数据

hbase> insert overwrite table sample select concat(name, ':', age) as key,name,age,year,salary from empdetail;'

当我覆盖表时出现以下错误。

  

查询ID = master_20150411092222_f7cf8d94-8449-48f3-8aff-06ef8213f776       总工作量= 1       启动作业1中的1个减少任务数设置为0,因为没有减少运算符       开始工作= job_1428713373268_0001,       跟踪网址= http://master:8088/proxy/application_1428713373268_0001/       杀死命令= / home / master / hadoop / bin / hadoop job -kill job_1428713373268_0001       Stage-0的Hadoop作业信息:映射器数量:1;减速机数量:0 2015-04-11 09:23:40,198 Stage-0 map = 0%,
      reduce = 0%2015-04-11 09:24:07,628 Stage-0 map = 100%,reduce = 0%,累计CPU3.25秒2015-04-11 09:24:08,674 Stage-0 map =   0%,减少= 0%       2015-04-11 09:24:41,742 Stage-0 map = 100%,reduce = 0%MapReduce累计CPU总时间:3秒250毫秒结束       Job = job_1428713373268_0001有错误在作业期间出错,获取调试信息..       职位跟踪网址:http://master:8088/proxy/application_1428713373268_0001/正在审核   任务ID:task_1428713373268_0001_m_000000(以及更多)rom job   job_1428713373268_0001       失败最多的任务(4):任务ID:task_1428713373268_0001_m_000000   网址:http://master:8088/taskdetails.jsp?jobid=job_1428713373268_0001&tipid=task_1428713373268_0001_m_000000       此任务的诊断消息:       错误:java.lang.RuntimeException:java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Put.setDurability(Lorg / apache / hadoop / hbase / client / Durability;)V
      在org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:179)at   org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)       org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:450)org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)       在org.apache.hadoop.mapred.YarnChild $ 2.run(YarnChild.java:163)atjava.security.AccessController.doPrivileged(Native Method)at at   javax.security.auth.Subject.doAs(Subject.java:415)在
  org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)
      在org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)       引起:java.lang.NoSuchMethodError:org.apache.hadoop.hbase.client.Put.setDurability(Lorg / apache / hadoop / hbase / client / Durability;)V   在   org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat $ MyRecordWriter.write(HiveHBaseTableOutputFormat.java:142)在   org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat $ MyRecordWriter.write(HiveHBaseTableOutputFormat.java:117)在   org.apache.hadoop.hive.ql.io.HivePassThroughRecordWriter.write(HivePassThroughRecordWriter.java:40)在   org.apache.hadoop.hive.ql.exec.FileSinkOperator.processOp(FileSinkOperator.java:714)在   org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815)在   org.apache.hadoop.hive.ql.exec.SelectOperator.processOp(SelectOperator.java:84)在   org.apache.hadoop.hive.ql.exec.Operator.forward(Operator.java:815)在   org.apache.hadoop.hive.ql.exec.TableScanOperator.processOp(TableScanOperator.java:95)atorg.apache.hadoop.hive.ql.exec.MapOperator $ MapOpCtx.forward(MapOperator.java:157)       在org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:493)       在org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:170)       ..还有8个       FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.mr.MapRedTask返回代码2       MapReduce工作推出:       Stage-Stage-0:Map:1累积CPU:3.25秒HDFS读取:0 HDFS写入:0失败       总MapReduce CPU耗时:3秒250毫秒

我不知道如何解决这个bug。在hive中我将一些jar文件设置为classpath

    add jar ${env:HIVE_HOME}/lib/hbase-hadoop2-compat-1.0.0.jar;
    add jar ${env:HIVE_HOME}/lib/hbase-client-1.0.0.jar;
    add jar ${env:HIVE_HOME}/lib/zookeeper-3.4.6.jar;
    add jar ${env:HIVE_HOME}/lib/hive-hbase-handler-1.1.0.jar;
    add jar ${env:HIVE_HOME}/lib/guava-14.0.1.jar;
    add jar ${env:HIVE_HOME}/lib/guava-11.0.2.jar;
    add jar ${env:HIVE_HOME}/lib/hbase-common-1.0.0.jar;
    add jar ${env:HIVE_HOME}/lib/protobuf-java-2.5.0.jar;
    add jar ${env:HIVE_HOME}/lib/hbase-protocol-1.0.0.jar;
    add jar ${env:HIVE_HOME}/lib/hbase-server-1.0.0.jar;
    add jar ${env:HIVE_HOME}/lib/htrace-core-3.1.0-incubating.jar;

我在hive-site.xml文件中设置了hive aux jar类路径后的值但是没有工作。

我也在hive shell中设置了动态分区。

set hive.exec.dynamic.partition=true 
set hive.exec.dynamic.partition.mode=nonstrict;

但它没有用。如果我做了任何对齐和拼写错误,请为此道歉。我不知道错误在哪里。请帮助我。

提前致谢。

1 个答案:

答案 0 :(得分:0)

不幸的是,我相信你必须升级Hadoop的版本。

似乎Hive正在尝试访问org.apache.hadoop.hbase.client.Put类的未设置方法。