我正在Python中編寫一些ETL流程,對於部分流程使用Hive。根據documentation,Cloudera的impyla客戶端與Impala和Hive都兼容。impyla在連接到HiveServer2時掛起
以我的經驗,客戶一起爲黑斑羚,但掛在我試圖連接到蜂巢:
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
如果我一步到代碼,當它試圖打開一個會話它掛起(line #873 of hiveserver2.py )。
起初,我懷疑防火牆端口可能會阻塞連接,所以我嘗試使用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));
}
}
}
由於蜂巢和Python這樣的常用技術,我很好奇,想知道是否有人遇到過這個問題,如果是這樣,你做了什麼來解決這個問題?
版本:
- 蜂巢1.1.0-cdh5.5.1
- 的Python 2.7.11 |蟒蛇2.3.0
- 紅帽6.7
我看到這個「永久掛起」的事情發生在非安全客戶端嘗試連接到安全服務器時。在這種情況下,服務器端處理程序線程在處理來自客戶端的消息時可能會崩潰,然後它可以發回任何內容。客戶將因此無限期地等待。 – ozw1z5rd