无法与蜂巢建立联系?

时间:2014-10-28 12:39:14

标签: hadoop hive

我正在使用java代码与hive建立连接,但我收到了以下错误 -

  

log4j:WARN找不到logger(org.apache.thrift.transport.TSaslTransport)的appender。   log4j:WARN请正确初始化log4j系统。   log4j:WARN有关详细信息,请参阅http://logging.apache.org/log4j/1.2/faq.html#noconfig。   线程“main”中的异常java.sql.SQLException:处理语句时出错:FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.DDLTask返回代码1。 MetaException(消息:得到异常:org.apache.hadoop.security.AccessControlException权限被拒绝:user = anonymous,access = WRITE,inode =“/”:oodles:supergroup:drwxr-xr-x       在org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)       在org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:257)       在org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.check(FSPermissionChecker.java:238)       在org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkPermission(FSPermissionChecker.java:179)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5904)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkPermission(FSNamesystem.java:5886)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkAncestorAccess(FSNamesystem.java:5860)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInternal(FSNamesystem.java:3793)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirsInt(FSNamesystem.java:3763)       在org.apache.hadoop.hdfs.server.namenode.FSNamesystem.mkdirs(FSNamesystem.java:3737)       在org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.mkdirs(NameNodeRpcServer.java:778)       at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.mkdirs(ClientNamenodeProtocolServerSideTranslatorPB.java:573)       at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos $ ClientNamenodeProtocol $ 2.callBlockingMethod(ClientNamenodeProtocolProtos.java)       在org.apache.hadoop.ipc.ProtobufRpcEngine $ Server $ ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585)       在org.apache.hadoop.ipc.RPC $ Server.call(RPC.java:928)       在org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:2013)       在org.apache.hadoop.ipc.Server $ Handler $ 1.run(Server.java:2009)       at java.security.AccessController.doPrivileged(Native Method)       在javax.security.auth.Subject.doAs(Subject.java:415)       在org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1614)       在org.apache.hadoop.ipc.Server $ Handler.run(Server.java:2007)   )       在org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:275)       在com.oodles.example.HiveJdbcClient.main(HiveJdbcClient.java:23)

我的Java代码在

之下
package com.oodles.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class HiveJdbcClient {
    private static String driverName = "org.apache.hive.jdbc.HiveDriver";
    public static void main(String[] args) throws SQLException {
        try {
            Class.forName(driverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Connection con = DriverManager.getConnection("jdbc:hive2://localhost:10000/default", "", "");
        Statement stmt = con.createStatement();
        String tableName = "testHiveDriverTable";
        stmt.execute("drop table if exists " + tableName);
        stmt.execute("create table " + tableName + " (key int, value string)");
        System.out.println("success!");
        stmt.close();
        con.close();
    }
}

我的另一个问题是,每当我在没有启动hadoop服务的情况下建立连接时,它就会出错

log4j:WARN No appenders could be found for logger (org.apache.thrift.transport.TSaslTransport).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
Exception in thread "main" java.sql.SQLException: Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Got exception: java.net.ConnectException Call From oodles-Latitude-3540/127.0.1.1 to localhost:9000 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused)
    at org.apache.hive.jdbc.HiveStatement.execute(HiveStatement.java:275)
    at com.oodles.example.HiveJdbcClient.main(HiveJdbcClient.java:21)
如果我启动hadoop服务,

以后的问题会得到解决,所以我想问一下,为了与hive建立联系,是否必须启动hadoop服务?

1 个答案:

答案 0 :(得分:3)

由于您没有提到您正在使用的Hive版本,但基于驱动程序名称和连接URl,我假设您使用的是Hive 0.11或更高版本。

因此,在Hive 0.11或更高版本中,您需要在连接URL中提及用户名:

DriverManager.getConnection("jdbc:hive2://localhost:10000/default", <user_name>, "")

NOTE: This user should have read+write permissions in HDFS.

关于你的第二个问题:

我非常确定Hadoop服务不仅仅用于连接。我从未尝试过。

这是我的假设,因为我们需要在连接URL中提到一个数据库,这是HDFS中的一个目录。因此,可能需要NAMENODE服务来检查该目录的存在。

希望它有所帮助...... !!!