1. 程式人生 > >Beeline連線報錯:Could not open client transport with JDBC Uri: jdbc:hive2://localhost:10000/default

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,如下圖: