我正在用Python编写一些ETL流程,对于部分流程,使用Hive。根据{{3}},Cloudera的impyla客户端可以与Impala和Hive一起使用。
根据我的经验,客户端为Impala工作,但在我尝试连接到Hive时挂了:
from impala.dbapi import connect
conn = connect(host='host_running_hs2_service', port=10000, user='awoolford', password='Bzzzzz')
cursor = conn.cursor() <- hangs here
cursor.execute('show tables')
results = cursor.fetchall()
print results
如果我进入代码,它会在尝试打开会话时挂起(documentation)。
起初,我怀疑防火墙端口可能会阻止连接,因此我尝试使用Java进行连接。令我惊讶的是,这有效:
public class Main {
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();
System.exit(1);
}
Connection connection = DriverManager.getConnection("jdbc:hive2://host_running_hs2_service:10000/default", "awoolford", "Bzzzzz");
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("SHOW TABLES");
while (resultSet.next()) {
System.out.println(resultSet.getString(1));
}
}
}
由于Hive和Python是如此常用的技术,我很想知道是否有其他人遇到过这个问题,如果有的话,你做了什么修复它?
版本:
答案 0 :(得分:1)
/path/to/bin/hive --service hiveserver2 --hiveconf hive.server2.authentication=NOSASL
from impala.dbapi import connect
conn = connect(host='host_running_hs2_service', port=10000, user='awoolford', password='Bzzzzz', auth_mechanism='NOSASL')
cursor = conn.cursor()
cursor.execute('show tables')
results = cursor.fetchall()
print results
答案 1 :(得分:0)
答案 2 :(得分:0)
在/etc/hive/conf/hive-site.xml
中添加以下代码对我有用:
<property>
<name>hive.server2.authentication</name>
<value>NOSASL</value>
</property>
感谢@ ozw1z5rd的评论为我指出了正确的方向!