无法通过jdbc在配置单元服务器2上执行查询

jutyujz0  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(385)

我正在尝试使用jdbc在HiveServer2上执行单元组插入以进行测试。虽然我可以通过直线客户端连接到 jdbc:hive2:// 在服务器上,我无法使用jdbc复制相同的内容。
testdao.java文件中的相关代码段如下:

ps = con.prepareStatement("insert into table test_table select ?, ? from dummy");
ps.setInt(1, test.getRoll());
ps.setString(2, test.getName());

System.out.println("Name = " + test.getName() + ", Roll = " + test.getRoll());

returnValue = ps.executeUpdate();    // Line 22

执行代码时遇到异常:

Starting...
jdbc:hive2://7.224.118.49:10000/acaddwh
Connection obtained!
Name = Inserted User, Roll = 120
java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code -101 from org.apache.hadoop.hive.ql.exec.MoveTask. org.apache.hadoop.hdfs.client.HdfsAdmin.getEncryptionZoneForPath(Lorg/apache/hadoop/fs/Path;)Lorg/apache/hadoop/hdfs/protocol/EncryptionZone;
    at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:277)
    at org.apache.hive.jdbc.HiveStatement.executeUpdate(HiveStatement.java:390)
    at org.apache.hive.jdbc.HivePreparedStatement.executeUpdate(HivePreparedStatement.java:117)
    at in.ac.iitkgp.acaddwh.dao.TestDAO.saveDim(TestDAO.java:22)
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.load(TestHiveLoad.java:34)
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.main(TestHiveLoad.java:71)
in.ac.iitkgp.acaddwh.exception.LoadException
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.load(TestHiveLoad.java:44)
    at in.ac.iitkgp.acaddwh.service.etl.TestHiveLoad.main(TestHiveLoad.java:71)
Load,1,120,Data is invalid

我已使用以下命令授予数据库中所有表的“rwx”权限:

hadoop fs -chmod -R 777 /user/hive/warehouse/acaddwh.db/test_table

然而,这并没有改变任何事情。我附上进一步的信息,可能是相关的问题。
版本信息:hive 0.12.0-cdh5.1.0
我通过执行以下操作启动服务器:

./hive --service hiveserver2 10000 &

以下是我的pom.xml文件中依赖项的完整列表:

<dependency>
        <groupId>jdk.tools</groupId>
        <artifactId>jdk.tools</artifactId>
        <version>1.6</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.0.1</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-coyote</artifactId>
        <version>7.0.4</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-jdbc</artifactId>
        <version>0.13.1-cdh5.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libthrift</artifactId>
        <version>0.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.thrift</groupId>
        <artifactId>libfb303</artifactId>
        <version>0.9.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-core</artifactId>
        <version>2.5.0-mr1-cdh5.3.1</version>
    </dependency>

    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.5.0-cdh5.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>0.13.1-cdh5.3.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.5.0-cdh5.3.1</version>
    </dependency>

问题可能是什么?如何解决?

jdzmm42g

jdzmm42g1#

解决了的
经过多次尝试和错误后,我能够使用java应用程序成功地连接并执行插入、加载数据和选择查询,方法是使用以下命令启动配置单元服务器:

hiveserver2

而不是

./hive --service hiveserver2 10000 &

此外,为了让服务器在注销时不中断运行,我目前正在使用以下方法启动服务器:

nohup hiveserver2 &
yizd12fk

yizd12fk2#

hadoop/hdfs不支持任何更新。

相关问题