Hadoop蜂巢-我如何';添加jar';用于配置单元JDBC客户端?

Hadoop蜂巢-我如何';添加jar';用于配置单元JDBC客户端?,jdbc,hadoop,hive,hdfs,Jdbc,Hadoop,Hive,Hdfs,所以,我让hdfs和hive一起工作。我还拥有用于配置单元的jdbc驱动程序,以便可以进行远程jdbc调用 现在,我添加了一个配置单元用户定义函数(UDF)。它在气候条件下工作得很好。。。我甚至通过.hiverc文件自动加载jar和相关函数。但是,我无法使用HiveJDBC驱动程序实现这一点。我认为它也会使用.hiverc文件(默认情况下,位于/usr/lib/hive/bin/),但它似乎不起作用。我还尝试首先通过“add jar”SQL命令添加它,但无论我将jar文件放在何处,我都会在hiv

所以,我让hdfs和hive一起工作。我还拥有用于配置单元的jdbc驱动程序,以便可以进行远程jdbc调用

现在,我添加了一个配置单元用户定义函数(UDF)。它在气候条件下工作得很好。。。我甚至通过.hiverc文件自动加载jar和相关函数。但是,我无法使用HiveJDBC驱动程序实现这一点。我认为它也会使用.hiverc文件(默认情况下,位于/usr/lib/hive/bin/),但它似乎不起作用。我还尝试首先通过“add jar”SQL命令添加它,但无论我将jar文件放在何处,我都会在hive.log中发现一个错误,即找不到该文件

有人知道怎么做吗?我使用的是Cloudera发行版(CDH3u2),它使用Hive-0.7.1


提前谢谢。

我认为JDBC驱动程序使用Thrift,这意味着JAR可能需要位于Thrift服务器(您在conn字符串中连接到的配置单元服务器)上,并且位于配置单元类路径中。

我也使用JDBC驱动程序连接到配置单元。我将jar压缩到集群的主节点上,这也是安装配置单元的地方,然后在addjar命令中使用文件的绝对路径(在主节点上)。与任何其他HQL命令一样,我通过JDBC驱动程序发出add jar命令。

根据Hive developer邮件列表,在当前的Hive版本(0.9)中,没有解决此问题的方法。为了解决这个问题,我使用了一个连接工厂类,它可以在每次启动连接会话时正确注册JAR和函数。下面的代码非常有效:

    package com.rapidminer.operator.bigdata.runner.helpers;
import java.sql.*;

/** A Hive connection factory utility 
@author Marcelo Beckmann
*/
public class ConnectionFactory {

private static ConnectionFactory instance;

/** Basic attributes to make the connection*/
public String url = "jdbc:hive://localhost:10000/default";
public final String DRIVER = "org.apache.hadoop.hive.jdbc.HiveDriver";

public static ConnectionFactory getInstance(){
    if (instance==null)
        instance = new ConnectionFactory();
    return instance;
}
private ConnectionFactory()
{}
/**
 * Obtains a hive connection.
 * Warning! To use simultaneous connection from the Thrift server, you must change the
 * Hive metadata server from Derby to other database (MySQL for example).
 * @return
 * @throws Exception
 */
public Connection getConnection() throws Exception {

    Class.forName(DRIVER);

    Connection connection = DriverManager.getConnection(url,"","");

    runInitializationQueries(connection);
    return connection;
}

/**
 * Run initialization queries after the connection be obtained. This initialization was done in order
 * to workaround a known Hive bug (HIVE-657).
 * @throws SQLException
 */
private void runInitializationQueries(Connection connection) throws SQLException
{
    Statement stmt = null;
    try {
        //TODO Get the queries from a .hiverc file
        String[] args= new String[3];
        args[0]="add jar /home/hadoop-user/hive-0.9.0-bin/lib/hive-beckmann-functions.jar";  
        args[1]="create temporary function row_number as 'com.beckmann.hive.RowNumber'"; 
        args[2]="create temporary function sequence as 'com.beckmann.hive.Sequence'";
        for (String query:args)
        {
            stmt.execute(query);
        }
    }
    finally {
        if (stmt!=null)
            stmt.close();
    }

}
}

谢谢你的快速回复。然而,我不确定我会在哪里这样做。我已经尝试将这些JAR添加到服务器的hadoop-env.sh文件(CLASSPATH)以及hive-env.sh文件(CLASSPATH)。这两个似乎都不起作用。