Beeline連線報錯:Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default
java.sql.SQLException: Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default: java.net.ConnectException: 拒絕連線
解決方案:
通過sudo netstat -anp|grep 10000 檢視誰佔用了10000埠,也就是hiveserver2有沒有啟動。
你不要太著急了,hiveserver2 會顯示七八個Hive Session ID之後,才會真正啟動,這要等個幾分鐘呢。在sudo netstat -anp|grep 10000能查到埠前,都證明hiveserver2沒有啟動
這時候我們再用beeline連線就沒問題了
曹泥嘛,又報了個新錯。
【這個xxx是什麼不重要,他就是個超級代理,然後呢,讓你輸入使用者名稱的時候你輸入你這個xxx就可以,我的xxx寫的是liugen】
解決方式:在hadoop的配置檔案core-site.xml增加如下配置,重啟hdfs,其中“xxx”是連線beeline的使用者,將“xxx”替換成自己的使用者名稱即可。最關鍵的是一定要重啟hadoop,先stop-all.sh,再start-all.sh,否則不會生效的!!那樣就還是報錯!
<property>
<name>hadoop.proxyuser.xxx.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.xxx.groups</name>
<value>*</value>
</property>
“*”表示可通過超級代理“xxx”操作hadoop的使用者、使用者組和主機
nice啊!!!!!!!!!!!!終於啟動了,一個星期的努力!!!!!!!!!
問題解決後將網上的資料總結一下:
主要原因是hadoop引入了一個安全偽裝機制,使得hadoop 不允許上層系統直接將實際使用者傳遞到hadoop層,而是將實際使用者傳遞給一個超級代理,由此代理在hadoop上執行操作,避免任意客戶端隨意操作hadoop,如下圖: