【问题标题】:error while executing insert overwrite query in hive在配置单元中执行插入覆盖查询时出错
【发布时间】:2015-01-26 09:22:40
【问题描述】:

我正在使用 hadoop 1.2 、 hbase 0.94.8 和 hive 0.14 。我正在尝试使用 hive 将数据插入到 hbase 表中。 我已经创建了表格:

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;

现在,我正在尝试将其覆盖到 hbase 表中:

当我这样做时:

hive> insert overwrite table hbase_table_emp select * from testemp;

我收到此错误:

hive> insert overwrite table hbase_table_emp select * from testemp;
Query ID = hduser_20150126005151_ebc2a36f-97c4-41da-b145-32d5732d9681
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
java.lang.NoClassDefFoundError: org/cliffc/high_scale_lib/Counter
    at org.apache.hadoop.hive.hbase.HBaseStorageHandler.configureJobConf(HBaseStorageHandler.java:470)
    at org.apache.hadoop.hive.ql.plan.PlanUtils.configureJobConf(PlanUtils.java:856)
    at org.apache.hadoop.hive.ql.plan.MapWork.configureJobConf(MapWork.java:544)
    at org.apache.hadoop.hive.ql.plan.MapredWork.configureJobConf(MapredWork.java:68)
    at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:370)
    at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
    at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
    at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:85)
    at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1604)
    at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1364)
    at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1177)
    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:160)
Caused by: java.lang.ClassNotFoundException: org.cliffc.high_scale_lib.Counter
    at java.net.URLClassLoader$1.run(URLClassLoader.java:217)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:323)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:294)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:268)
    ... 24 more
FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. org/cliffc/high_scale_lib/Counter

有人可以帮帮我吗?

【问题讨论】:

    标签: hadoop hive hbase


    【解决方案1】:

    我找到了解决这个问题的方法! 首先我改成hadoop2.4 /hbase0.98 /hive 0.14: 在hive-env.sh 我做到了:

    export HIVE_AUX_JARS_PATH=/usr/local/hbase/lib
    

    在蜂巢外壳中:

    hive> add jar /usr/local/hive/lib/hive-hbase-handler-0.14.0.jar;  
    hive> add jar /usr/local/hbase/lib/hbase-common-0.98.0-hadoop2.jar;
    hive> add jar /usr/local/hbase/lib/zookeeper-3.4.5.jar; 
    hive> add jar /usr/local/hbase/lib/guava-12.0.1.jar;
    hive> add jar /usr/local/hbase/lib/high-scale-lib-1.1.1.jar; 
    

    这对我有用:)

    【讨论】:

    • 很高兴知道,很高兴它成功了!我认为至少您现在在 Hive-Hadoop 兼容性方面处于更好的位置。
    【解决方案2】:

    听起来 Hive 在运行时无法解析 HBase 主目录(和关联的库)。您能否验证是否设置了以下环境变量(您的实际值当然可能会有所不同,具体取决于安装 Hive 和 HBase 的位置)?

    HBASE_IDENT_STRING=hbase
    HBASE_CONF_DIR=/etc/hbase/conf
    HBASE_HOME=/usr/lib/hbase
    HBASE_LOG_DIR=/var/log/hbase
    HIVE_HOME=/usr/lib/hive
    HBASE_PID_DIR=/var/run/hbase
    

    我不确定上述所有环境设置是否必须针对您的工作进行定义,但我的直觉是至少必须设置HBASE_HOMEHBASE_CONF_DIR

    作为参考,上述环境变量是 HDP 2.1 发行版在 Hive 运行时为您设置的环境变量。我能够使用最小数据集执行您尝试的 Hive-to-HBase 持久性,因此希望解决方案在于这些环境设置。

    【讨论】:

      猜你喜欢
      • 2015-03-20
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-08
      • 2018-02-27
      相关资源
      最近更新 更多