ambari2.7.4集成hue4.6.0

版本信息

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節點執行

代碼修改

  1. package/files/configs.sh文件

    USERID='ambari的管理員賬號'
    PASSWD='ambari的管理員密碼'
    
  2. 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插件上面的改造上面畫了比較長的時間,由於是全新版本,只能站在巨人肩膀上。安裝過程中,兼容問題頻頻發生,需要耐心的從原理源碼角度出發解決問題,所有問題都不是問題!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章