Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
配置单元JDBC客户端引发SQLException_Jdbc_Hadoop_Client_Hive_Sqlexception - Fatal编程技术网

配置单元JDBC客户端引发SQLException

配置单元JDBC客户端引发SQLException,jdbc,hadoop,client,hive,sqlexception,Jdbc,Hadoop,Client,Hive,Sqlexception,我正在使用JDBC客户端代码连接到配置单元安装。我已经创建了一个测试表,其中有两列(column1、column2)都是字符串类型。当我尝试执行像“select*fromtest”这样的简单查询时,我会在java程序中得到结果,但带有where子句的查询和其他复杂查询会抛出以下异常 查询返回非零代码:1,原因:失败:执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码1 我已尝试更改存在文件的hdfs目录/tmp对本地目录的权限,但这不起作用 这

我正在使用JDBC客户端代码连接到配置单元安装。我已经创建了一个测试表,其中有两列(column1、column2)都是字符串类型。当我尝试执行像“select*fromtest”这样的简单查询时,我会在java程序中得到结果,但带有where子句的查询和其他复杂查询会抛出以下异常

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

我已尝试更改存在文件的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.(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(Driver.java:1374) 位于org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1160) 位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:973) 位于org.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$Processor$execute.getResult(ThriftHive.java:644) 位于org.apache.hadoop.hive.service.ThriftHive$Processor$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客户机中不运行

我被困在这个问题上了。任何建议都会有帮助

更新

我正在使用cloudera CDH4 hadoop/hive分发版。我运行的脚本如下

#!/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*CORE*.jar}因为我的HADOOP_HOME中没有jar文件,从HADOOP开始,到-CORE.jar结束。这是正确的吗?同时运行脚本会产生以下错误

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

我还修改了脚本,将hadoop客户端JAR添加到类路径中,因为脚本抛出了hadoop fileReader找不到的错误。因此,我还添加了以下内容。 对于${HADOOP_HOME}/*.jar中的i;做 CLASSPATH=$CLASSPATH:$i 完成

这将执行类文件并运行查询“select*fromtest”,但在“selectcolumn1fromtest”上失败


仍然没有成功,并且出现了相同的错误。

由于hive shell运行正常,您能否检查运行hive shell的用户和java程序(使用JDBC)是否相同

接下来,启动Thrift服务器 cd到配置单元所在的位置- 发出以下命令—

bin/hive --service hiveserver &
你应该看到-

正在启动Hive Thrift服务器

确保HiveServer正在运行的一种快速方法是使用netstat命令确定端口10000是否打开并侦听连接:

netstat -nl | grep 10000
tcp  0  0 :::10000         :::*          LISTEN
接下来,创建一个名为
myhivetest.sh
的文件,并将以下内容放入 并根据您的要求更换HADOOP\u HOMEHIVE\u HOME软件包。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脚本,它将在调用配置单元程序之前构建类路径

详情请按。 嵌入式模式和独立模式有两种方式。 您应该寻找独立模式

供您参考: Hive不是一个类似于MySQL、Oracle和Teradata等DBMS的广泛查询引擎。 Hive限制了您可以进行的复杂查询的范围,例如非常复杂的连接等。 Hive在执行查询时运行Hadoop MapReduce作业

支持哪些类型的查询,哪些不支持


希望这有帮助。

我也有同样的问题。我已经设法解决了这个问题

当我在设置了/user帐户的hadoop集群上运行hive jdbc客户机时,出现了这个错误。 设置这样的环境后,运行map reduce作业的能力都基于权限

由于连接字符串错误,map reduce框架无法设置临时目录并触发作业

请查看连接字符串[如果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", "");
其中,user1是群集设置上的已配置用户