版本信息
Ambari:2.7.4
HDP:3.1.4
HUE:4.6.0
ambari-hue-service 集成插件:https://github.com/lijufeng2016/ambari-hue-service 本人已把所有坑填完,插件已適配組新版ambari
環境準備
1.hue的master節點上執行,爲編譯環境做準備
yum install sqlite-devel libxslt-devel.x86_64 python-devel openldap-devel asciidoc cyrus-sasl-gssapi libxml2-devel.x86_64 mysql-devel gcc gcc-c++ kernel-devel openssl-devel gmp-devel libffi-devel install npm
2.所有機器上創建用戶和組
useradd -g hue hue
3.提前在mysql創建好hue的庫並授權
CREATE DATABASE hue;
GRANT ALL PRIVILEGES ON hue.* TO hue@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
4.提前建好hue在hdfs的HOME目錄
hadoop fs -mkdir /user/hue
hadoop fs -chown hue:hue /user/hue
5.下載插件源碼
在ambari server節點執行
VERSION=`hdp-select status hadoop-client | sed 's/hadoop-client - \([0-9]\.[0-9]\).*/\1/'`
rm -rf /var/lib/ambari-server/resources/stacks/HDP/$VERSION/services/HUE
sudo git clone https://github.com/lijufeng2016/ambari-hue-service.git /var/lib/ambari-server/resources/stacks/HDP/$VERSION/services/HUE
6.hue的安裝包並放到你的Apache服務器上
在ambari server節點執行
代碼修改
-
package/files/configs.sh文件
USERID='ambari的管理員賬號' PASSWD='ambari的管理員密碼'
-
package/scripts/params.py文件
第32行 download_url 改成你自己的地址,可以跟hdp的本地倉庫放一起
第40行 ambari_server_hostname 改成你自己的地址
部署安裝
重啓ambari
ambari-server restart
ambari界面操作
界面左側 >> services >> Add service >> Hue >> NEXT >> 選擇Hue Server >> NEXT >> 配置
數據庫配置,這裏選了mysql:
一路next, 啓動失敗先忽視
啓動hue報錯:
UnicodeEncodeError: 'ascii' codec can't encode character u'\u201c' in position 3462: ordinal not in range(128)
解決辦法:
在hue的安裝節點上:
vim /usr/lib/ambari-agent/lib/resource_management/core/sudo.py
網上的說的/usr/lib/python2.7/site-packages/resource_management/core/sudo.py文件在新版本中不適用!
添加如下代碼:
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8’)
編譯
cd /usr/hdp/3.1.4.0-315/hue/
make apps
注意:在準備工作的第一步的包必須安裝才能編譯成功
再次啓動報錯:Invalid HTTP_HOST header: ‘sh05-hdp3-manage002:8888’. You may need to add u’sh05-hdp3-manage002’ to ALLOWED_HOSTS.
解決辦法:找到Advanced pseudo-distributed.ini 配置
allowed_hosts=*
改完重啓,終於看到人樣的頁面了,輸入hue hue,你隨意
進去發現加載數據庫錯誤
解決方法:
vim /usr/hdp/3.1.4.0-315/hue/desktop/core/src/desktop/lib/conf.py
第293行改爲:
if raw is None or raw=='':
再次重啓hue,又報錯:ERROR Error running create_session
明顯的哪裏把端口號當成字符串輸入了
解決方法:
把hiveserver2的host和端口號手動設置一下
重啓,又報錯:TSocket read 0 bytes (code THRIFTTRANSPORT): TTransportException(‘TSocket read 0 bytes’,)
解決辦法:
在beeswax的配置下面加上 use_sasl=true
從哪裏跌倒就從哪裏爬起,再重啓,頁面終於正常啦!盡情的玩耍了!咦?不對啊?
怎麼會顯示無列呢?
新版的hue4.6.0與hdp3.1.4這種雙新組合往往自帶坑位,網上也找不到任何答案,經過一步步推測排查,首先可以確定的是後端返回字段的時候有問題,與之相關的是hive相關的包,經過漫長的一步一步排查,確定到了哪一行代碼,python真不習慣,也沒開發過,太難了,中間過程就不細說了,直接上解決方法:
vim /usr/hdp/3.1.4.0-315/hue/apps/beeswax/src/beeswax/server/hive_server2_lib.py
118行和119行的2改成1即可
重啓,想查看hdfs,又遇到問題
解決方法:
webhdfs_url=http://sh05-hdp3-manage001:50070/webhdfs/v1
繼續,查看hbase報錯
Api 錯誤:HTTPConnectionPool(host=‘sh05-hdp3-manage003’, port=9090): Max retries exceeded with url: / (Caused by NewConnectionError(’: Failed to establish a new connection: [Errno 111] Connection refused’,))
解決辦法:
hdp3中,hbase的thrift默認不開啓,需要手動在各個Hmaster節點啓動,注意,一定要使用hbase用戶啓動thrift,而不是thrift2!!否則後面還會有問題,上代碼
su hbase
/usr/hdp/current/hbase-master/bin/hbase-daemon.sh start thrift
建議把啓動thrift的命令寫到啓動hbase master的腳本里,這樣就不用每次手動起了
集成sparksql無法正常顯示錶名,庫下所有表名都變成庫名的問題
由於是用spark的thrift方式連接的sparksql,在hue.ini裏面的配置
[[[sql]]]
name=SparkSql
interface=sqlalchemy
options='{"url": "hive://sh05-hdp3-manage003:10016/default"}'
注意是[[[sql]]]不是[[[sparksql]]],這裏的spark的thrift端口是10016,而不是用的hive的10000
出現上述圖片的錯誤,由於spark與hive用的都是sqlalchemy,但是接口返回的結果格式不一樣,需要修改pyhive的相關代碼,前提必須是pip方式安裝pyhive,setup方式由於會打包編譯py文件導致沒有明文代碼可以修改,修改如下:
vim ./build/env/lib/python2.7/site-packages/pyhive/sqlalchemy_hive.py
# get_table_names 方法裏面的最後一行替換爲如下,由於我這裏是10016端口,需要根據自己的spark thrift端口的實際配置
url = '{0}'.format(connection)
if '10016' in url:
return [row[1] for row in connection.execute(query)]
else:
return [row[0] for row in connection.execute(query)]
到這裏基本上差不多解決了,記住一定要按步驟來,一步棋錯全盤皆輸!在解決這些問題的時候折騰了很久。在ambari-hue-service插件上面的改造上面畫了比較長的時間,由於是全新版本,只能站在巨人肩膀上。安裝過程中,兼容問題頻頻發生,需要耐心的從原理源碼角度出發解決問題,所有問題都不是問題!