蜂巢JDBC客户端抛出的SQLException

问题描述 投票:1回答:3

我连接到使用JDBC客户端代码蜂巢安装。我已创建了两列(列1,列2)两个字符串类型的测试表。当我尝试执行类似简单的查询“选择测试*”我得到的结果在java程序,但WHERE子句和其他复杂的查询抛出下面的异常查询。

“查询返回非零代码:1,原因:FAILED:执行错误,返回码1从org.apache.hadoop.hive.ql.exec.MapRedTask”

我试图改变HDFS目录的权限,其中文件是在本地目录目前,/ tmp目录但没有奏效。

这是我的连接代码

Connection con = DriverManager.getConnection("jdbc:hive://"+host+":"+port+"/default", "", "");

Statement stmt = con.createStatement();

误差在抛出的executeQuery()方法

检查服务器上的日志提供了以下异常:

产生java.io.IOException:无法初始化集群。请检查您的mapreduce.framework.name和对应服务器地址配置。在org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:121)在org.apache.hadoop.mapreduce.Cluster。(Cluster.java:83)在org.apache.hadoop.mapreduce.Cluster。(簇的.java:76)在org.apache.hadoop.mapred.JobClient.init(JobClient.java:478)在org.apache.hadoop.mapred.JobClient(JobClient.java:457)在org.apache.hadoop.hive。 .ql.exec.ExecDriver.execute(ExecDriver.java:426)在org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:138)在org.apache.hadoop.hive.ql.exec .Task.executeTask(Task.java:138)在org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)在org.apache.hadoop.hive.ql.Driver.launchTask(驱动的.java:在org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1160)在org.apache.hadoop.hive.ql.Driver.run(Driver.java:973)在组织1374)。 apache.hadoop.hive.ql.Driver.run(Driver.java:893)在org.apache.hadoop.hive.service.HiveServer $ HiveServerHandler.execute(HiveServer.java:198)在org.apache.hadoop.hive。 service.ThriftHive $处理器$ execute.getResu LT(ThriftHive.java:644)在org.apache.hadoop.hive.service.ThriftHive $ $处理器execute.getResult(ThriftHive.java:628)在org.apache.thrift.ProcessFunction.process(ProcessFunction.java:39)在org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:39)在org.apache.thrift.server.TThreadPoolServer $ WorkerProcess.run(TThreadPoolServer.java:206)在java.util.concurrent.ThreadPoolExecutor.runWorker(未知源)在java.util.concurrent.ThreadPoolExecutor中的$ Worker.run(来源不明)在java.lang.Thread.run(来源不明)作业提交失败,出现异常“java.io.IOException的(无法初始化集群。请检查您的mapreduce.framework.name和对应服务器地址配置。)”

当在命令提示符下,但不是在JDBC客户端运行的查询工作。

我坚持这一点。任何的意见都将会有帮助。

UPDATE

我使用了Cloudera的Hadoop CDH4 /蜂巢分布。我跑的脚本如下

#!/bin/bash
HADOOP_HOME=/usr/lib/hadoop/client
HIVE_HOME=/usr/lib/hive

echo -e '1\x01foo' > /tmp/a.txt
echo -e '2\x01bar' >> /tmp/a.txt

HADOOP_CORE={{ls $HADOOP_HOME/hadoop*core*.jar}}
CLASSPATH=.:$HADOOP_CORE:$HIVE_HOME/conf

for i in ${HIVE_HOME}/lib/*.jar ; do
    CLASSPATH=$CLASSPATH:$i
done

for i in ${HADOOP_HOME}/*.jar ; do
    CLASSPATH=$CLASSPATH:$i
done

java -cp $CLASSPATH com.hive.test.HiveConnect

我不得不改变HADOOP_CORE = {{$ LS HADOOP_HOME / hadoop的 - * - core.jar添加}}到HADOOP_CORE = {{$ LS HADOOP_HOME / hadoop的核心*的* .jar}},因为在我的HADOOP_HOME没有jar文件开始hadoop-与-core.jar结束。这个对吗?同时运行该脚本提供了以下错误

/usr/lib/hadoop/client/hadoop*core*.jar}}:没有这样的文件或目录

此外,我已经修改了剧本,以Hadoop的客户端jar添加到类路径中的脚本扔的HADOOP的FileReader未发现的错误。所以我加了以下为好。因为我在$ {HADOOP_HOME} / *罐子。做CLASSPATH = $ CLASSPATH:$我做

该执行类文件和“自测试选择*”运行查询,但无法在“选择列1测试”。

仍然没有成功,同样的错误。

jdbc hadoop client hive sqlexception
3个回答
0
投票

因为,它运行良好与蜂巢外壳,您可以检查用户是否与正在运行的蜂巢外壳和java程序(使用JDBC)是一样的吗?

接下来,启动节俭服务器cd到蜂巢 - 发出此命令 -

bin/hive --service hiveserver &

你应该看到 -

启动蜂巢节俭服务器

一个快速的方法,以确保HiveServer运行是使用netstat命令来确定端口10,000开放和监听连接:

netstat -nl | grep 10000
tcp  0  0 :::10000         :::*          LISTEN

接下来,创建一个名为myhivetest.sh,把里面的follwing和替换HADOOP_HOME,HIVE_HOME和package.youMainClass根据您的要求 -

    #!/bin/bash
    HADOOP_HOME=/your/path/to/hadoop
    HIVE_HOME=/your/path/to/hive

    echo -e '1\x01foo' > /tmp/a.txt
    echo -e '2\x01bar' >> /tmp/a.txt

    HADOOP_CORE={{ls $HADOOP_HOME/hadoop-*-core.jar}}
    CLASSPATH=.:$HADOOP_CORE:$HIVE_HOME/conf

    for i in ${HIVE_HOME}/lib/*.jar ; do
        CLASSPATH=$CLASSPATH:$i
    done

    java -cp $CLASSPATH package.youMainClass

保存myhivetest.sh并做了chmod +x myhivetest.sh。您可以使用./myhivetest.sh运行bash脚本,这将调用您的蜂巢计划前建立自己的类路径。

请按照有关详细信息,instruction here。有嵌入模式和单机模式两种方式。你应该找独立模式。

为了您的信息:蜂房是不是一个广泛的查询引擎类似,如MySQL,甲骨文和Teradata等蜂巢已经对复杂查询的程度,你可以做,像很复杂了限制联接等蜂巢运行的Hadoop MapReduce作业的DBMS,当你做一个查询。

Check this tutorial什么类型的查询的支持,哪些不是。

希望这可以帮助。


0
投票

我遇到过同样的问题。我设法解决这个问题。

这个错误弹出当我运行Hadoop集群上蜂巢JDBC客户端/用户帐户设置。有了这样的环境搭建,运行地图,减少工作都是基于权限的能力。

随着连接字符串是错误的,地图,减少框架无法建立临时目录,并引发了这份工作。

请看看你的连接字符串[如果这个错误在一个Hadoop集群设置弹出。

如果连接字符串看起来这种方式

Connection con = DriverManager
                .getConnection(
                        "jdbc:hive2://cluster.xyz.com:10000/default",
                        "hive", "");

将其更改为

Connection con = DriverManager
                .getConnection(
                        "jdbc:hive2://cluster.xyz.com:10000/default",
                        "user1", "");

其中用户1是在集群设置配置的用户。


0
投票

我有类似的问题。我试图用一个第三方JDBC驱动程序此处描述结合的Oracle SQL Developer(http://www.oracle.com/technetwork/developer-tools/sql-developer/overview/index.html)查询蜂巢:https://blogs.oracle.com/datawarehousing/entry/oracle_sql_developer_data_modeler。是的,我知道,我可以用色相来做到这一点,但我与许多其他数据库,包括Oracle交互,它是好的,有丰富的客户端,我可以直接保存在我的机器上的SQL查询和简单的报表。

我在AWS上的群集上运行的是最新版本的Cloudera CDH(5.4)的。

我能发出简单的查询,如“SELECT * FROM SAMPLE_07”和接受的结果,但运行“SELECT COUNT(*)FROM SAMPLE_07”将抛出一个JDBC错误。我能够在Hue创建一个用户,然后输入相应的Oracle SQL Developer连接信息对话框该用户信息来解决这个问题。这样做后,我能够同时运行的查询。

什么是混淆有关这是我能够运行一个简单的SELECT语句,并没有收到任何错误 - 我所用或者是一个)我可以登录到系统运行查询或b)我不能。奇怪的是,它“之类的”工作没有正确的用户ID,但我想的那些奇怪的Hadoop的事情之一。

© www.soinside.com 2019 - 2024. All rights reserved.