【问题标题】:error while executing select query in hive在配置单元中执行选择查询时出错
【发布时间】:2015-03-20 03:17:03
【问题描述】:

我正在使用 hadoop 1.1.2 、 hbase 0.94.8 和 hive 0.14 。 我正在尝试使用 hive 在 hbase 中创建一个表,并稍后通过 insert overwrite 在其中加载数据。

目前我能够创建表格:

CREATE TABLE hbase_table_emp(id int, name string, role string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:name,cf1:role")
TBLPROPERTIES ("hbase.table.name" = "emp");

并将数据加载到另一个表中,我会将其覆盖到 hbase 表中:

hive> create table testemp(id int, name string, role string) row format delimited fields terminated by '\t';
hive> load data local inpath '/home/user/sample.txt' into table testemp;

但是当我尝试select * from testemp; 验证数据是否已成功加载时,我收到此错误:

Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapred.JobConf.unset(Ljava/lang/String;)V
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.pushFilters(HiveInputFormat.java:432)
    at org.apache.hadoop.hive.ql.exec.FetchTask.initialize(FetchTask.java:76)
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:443)
    at org.apache.hadoop.hive.ql.Driver.compile(Driver.java:303)
    at org.apache.hadoop.hive.ql.Driver.compileInternal(Driver.java:1067)
    at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1129)
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1004)
    at org.apache.hadoop.hive.ql.Driver.run(Driver.java:994)
    at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:247)
    at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:199)
    at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:410)
    at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:783)
    at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:677)
    at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:616)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:622)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)

有人可以帮帮我吗!谢谢

【问题讨论】:

  • 自上次编译 Hive 以来,您是否更改了 Hadoop 包版本?
  • 我什么都没做
  • 所以,没有什么具体的,但尽管有 0.14 发行说明,但似乎至少有轶事证据表明 Hive 0.14 还不是 100% 与 Hadoop 1.1.2 兼容(请参阅 stackoverflow.com/questions/27842004/…)。我自己从未尝试过使用 Hadoop 1.x 操作 Hive。
  • 我更改为 hive 0.13,但没有任何效果即使我尝试可视化表格 (>show tables;) 时也会出现此错误:(
  • 不幸的是,这可能是 Hadoop 1.x 特有的问题,对此我没有第一手经验。我猜它可以与 Hadoop 1.x 一起使用,但可能并不是在所有情况下都是开箱即用的。

标签: hadoop hive hbase


【解决方案1】:

很遗憾,我认为您必须将 Hadoop 升级到至少 1.2.0。

Hive 似乎正在尝试访问 org.apache.hadoop.mapred.JobConf 类的 unset 方法。在 Hadoop 1.1.2 中查看该类的 API documentation 时,您会发现该方法不存在。

实现该方法的 1.x 系列的第一个版本是 1.2.0(请参阅 API documentation 以了解同一类)。请注意,该方法实际上是从 org.apache.hadoop.conf.Configuration 类继承的。

【讨论】:

  • 非常感谢这对我有用,这是版本兼容性问题:)
  • @YosrAbdellatif 我很高兴它成功了。可以肯定的是,这是一个微妙的问题,因为文档确实提到了与 Hadoop“1.x.y”的兼容性。我猜 x >= 2。:)
  • @rchang 现在我在执行插入覆盖表 hbase_table_emp select * from testemp 时遇到另一个错误;我收到此错误:[[[[[ java.lang.NoClassDefFoundError: org/cliffc/high_scale_lib/Counter]]]]] 再次出现兼容性问题?
  • @YosrAbdellatif 您是否使用 Maven 在本地构建了 HBase?缺少的类似乎来自com.github.stephenc.high-scale-lib,它在HBase 的pom.xml 文件中列为依赖项。我建议检查您的库目录以查看是否存在 high-scale-lib-x.x.x.jar(其中 x.x.x 是某个版本号)。
  • @rchang 是的 high-scale-lib-1.1.1.jar 确实存在于 /hbase/lib 中,我只是在 hive shell 中运行这些查询,maven 与此有什么关系?跨度>
猜你喜欢
  • 2019-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-27
  • 2018-02-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多