hue是一個開源的apache hadoop ui系統,最早是由cloudera desktop演化而來,由cloudera貢獻給開源社群,它是基于python web架構django實作的。通過使用hue我們可以在浏覽器端的web控制台上與hadoop叢集進行互動來分析處理資料,例如操作hdfs上的資料,運作mapreduce job等等。很早以前就聽說過hue的便利與強大,一直沒能親自嘗試使用,下面先通過官網給出的特性,通過翻譯原文簡單了解一下hue所支援的功能特性集合:
預設基于輕量級sqlite資料庫管理會話資料,使用者認證和授權,可以自定義為mysql、postgresql,以及oracle
基于檔案浏覽器(file browser)通路hdfs
基于hive編輯器來開發和運作hive查詢
支援基于solr進行搜尋的應用,并提供可視化的資料視圖,以及儀表闆(dashboard)
支援基于impala的應用進行互動式查詢
支援spark編輯器和儀表闆(dashboard)
支援pig編輯器,并能夠送出腳本任務
支援oozie編輯器,可以通過儀表闆送出和監控workflow、coordinator和bundle
支援hbase浏覽器,能夠可視化資料、查詢資料、修改hbase表
支援metastore浏覽器,可以通路hive的中繼資料,以及hcatalog
支援job浏覽器,能夠通路mapreduce job(mr1/mr2-yarn)
支援job設計器,能夠建立mapreduce/streaming/java job
支援sqoop 2編輯器和儀表闆(dashboard)
支援zookeeper浏覽器和編輯器
支援mysql、postgresql、sqlite和oracle資料庫查詢編輯器
下面,我們通過實際安裝來驗證hue的一些功能。
環境準備
這裡,我所基于的基本環境及其配置情況,如下所示:
centos-6.6 (final)
jdk-1.7.0_25
maven-3.2.1
git-1.7.1
hue-3.7.0(branch-3.7.1)
hadoop-2.2.0
hive-0.14
python-2.6.6
基于上面的軟體工具,要保證正确安裝和配置。需要說明的是,我們通過hue來執行hive查詢,需要啟動hiveserver2服務:
<code>1</code>
<code>cd</code> <code>/usr/</code><code>local</code><code>/hive</code>
<code>2</code>
<code>bin/hiveserver2 &</code>
否則通過hue web控制無法執行hive查詢。
安裝配置
我建立了一個hadoop使用者,以hadoop使用者,首先使用yum工具來安裝hue相關的依賴軟體:
<code>sudo</code> <code>yum</code><code>install</code> <code>krb5-devel cyrus-sasl-gssapi cyrus-sasl-deve libxml2-devel libxslt-devel mysql mysql-devel openldap-devel python-devel python-simplejson sqlite-devel</code>
然後,執行如下指令進行hue軟體包的下載下傳建構:
<code>cd</code> <code>/usr/</code><code>local</code><code>/</code>
<code>3</code>
<code>sudo</code> <code>chown</code> <code>-r hadoop:hadoop branch-3.7.1/</code>
<code>4</code>
<code>cd</code> <code>branch-3.7.1/</code>
<code>5</code>
<code>make</code> <code>apps</code>
上述過程如果沒有任何問題,我們就已經安裝好hue。hue的配置檔案為/usr/local/branch-3.7.1/desktop/conf/pseudo-distributed.ini,預設的配置檔案不能正常運作hue,是以需要修改其中的内容,與我們對應的hadoop叢集配置相對應。該配置檔案根據整合不同的軟體,将配置分成多個段,每個段下面還有子段,便于管理配置,如下所示(省略子段名稱):
desktop
libsaml
libopenid
liboauth
librdbms
hadoop
filebrowser
liboozie
oozie
beeswax
impala
pig
sqoop
proxy
hbase
search
indexer
jobsub
jobbrowser
zookeeper
spark
useradmin
libsentry
我們很容易根據需要來配置自己需要的内容。我們修改配置檔案的情況,如下表所示:
<b>hue配置段</b>
<b>hue配置項</b>
<b>hue配置值</b>
<b>說明</b>
default_hdfs_superuser
hdfs管理使用者
http_host
10.10.4.125
hue web server所在主機/ip
http_port
8000
hue web server服務端口
server_user
運作hue web server的程序使用者
server_group
運作hue web server的程序使用者組
default_user
yanjun
hue管理者
hadoop/hdfs_clusters
fs_defaultfs
hdfs://hadoop6:8020
對應core-site.xml配置項fs.defaultfs
hadoop_conf_dir
/usr/local/hadoop/etc/hadoop
hadoop配置檔案目錄
hadoop/yarn_clusters
resourcemanager_host
hadoop6
對應yarn-site.xml配置項yarn.resourcemanager.hostname
resourcemanager_port
8032
resourcemanager服務端口号
resourcemanager_api_url
http://hadoop6:8088
對應于yarn-site.xml配置項yarn.resourcemanager.webapp.address
proxy_api_url
http://hadoop6:8888
對應yarn-site.xml配置項yarn.web-proxy.address
history_server_api_url
http://hadoo6:19888
對應mapred-site.xml配置項mapreduce.jobhistory.webapp.address
hive_server_host
hive所在節點主機名/ip
hive_server_port
10000
hiveserver2服務端口号
hive_conf_dir
/usr/local/hive/conf
hive配置檔案目錄
上面主要配置了hadoop叢集相關的内容,以及hive(beeswax段配置的是hive,通過hiveserver2與hive互動)。
最後,啟動hue服務,執行如下指令:
<code>cd</code> <code>/usr/</code><code>local</code><code>/branch-3.7.1/</code>
<code>build/</code><code>env</code><code>/bin/supervisor &</code>
hue功能驗證
我們主要通過在hue web控制台上執行hive查詢,是以需要準備hive相關的表和資料。
hive準備
我們首先在hive中建立一個資料庫(如果沒有權限則授權):
<code>grant</code> <code>all</code> <code>to</code> <code>user</code> <code>hadoop;</code>
<code>create</code> <code>database</code> <code>user_db;</code>
這裡,hadoop使用者是hive的管理使用者,可以将全部權限賦給該使用者。
建立示例表,建表ddl如下所示:
<code>01</code>
<code>create</code> <code>table</code> <code>user_db.daily_user_info (</code>
<code>02</code>
<code></code><code>device_type</code><code>int</code><code>,</code>
<code>03</code>
<code></code><code>version string,</code>
<code>04</code>
<code></code><code>channel string,</code>
<code>05</code>
<code></code><code>udid string)</code>
<code>06</code>
<code>partitioned</code><code>by</code> <code>(</code>
<code>07</code>
<code></code><code>stat_date string)</code>
<code>08</code>
<code>row format delimited</code>
<code>09</code>
<code></code><code>fields terminated</code><code>by</code> <code>'\t'</code>
<code>10</code>
<code>stored</code><code>as</code> <code>inputformat</code>
<code>11</code>
<code></code><code>'org.apache.hadoop.mapred.textinputformat'</code>
<code>12</code>
<code>outputformat</code>
<code>13</code>
<code></code><code>'org.apache.hadoop.hive.ql.io.hiveignorekeytextoutputformat'</code><code>;</code>
準備的資料檔案格式,示例如下所示:
<code>0 3.2.1 c-gbnpk b01b8178b86cebb9fddc035bb238876d</code>
<code>0 3.0.7 a-wanglouko e2b7a3d8713d51c0215c3a4affacbc95</code>
<code>0 1.2.7 h-follower 766e7b2d2eedba2996498605fa03ed33</code>
<code>0 1.2.7 a-shiry d2924e24d9dbc887c3bea5a1682204d9</code>
<code>0 1.5.1 z-wammer f880af48ba2567de0f3f9a6bb70fa962</code>
<code>6</code>
<code>0 1.2.7 h-clouda aa051d9e2accbae74004d761ec747110</code>
<code>7</code>
<code>0 2.2.13 h-clouda 02a32fd61c60dd2c5d9ed8a826c53be4</code>
<code>8</code>
<code>0 2.5.9 b-ywsy 04cc447ad65dcea5a131d5a993268edf</code>
各個字段之間使用tab分隔,每個字段含義與上面表user_db.daily_user_info的字段對應,然後我們将測試資料加載到示例表的各個分區之中:
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-05.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-05'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-06.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-06'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-07.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-07'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-08.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-08'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-09.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-09'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-10.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-10'</code><code>);</code>
<code>load</code> <code>data</code><code>local</code> <code>inpath</code><code>'/home/hadoop/u2014-12-11.log'</code> <code>overwrite</code><code>into</code> <code>table</code><code>user_db.daily_user_info partition (stat_date=</code><code>'2014-12-11'</code><code>);</code>
可以通過hive cli接口登入,檢視表中資料:
<code>select</code> <code>count</code><code>(1)</code><code>from</code> <code>daily_user_info;</code>
我這裡有241709545條記錄作為測試資料。
hue登入頁面
hue服務啟動成功後,可以直接通過浏覽器打開連接配接http://10.10.4.125:8000/,就可以登入。第一次打開,需要輸入預設使用者和密碼,然後就可以登入進去,如下圖所示:
首次登入,選擇使用的使用者即為hue管理者使用者,權限很大,可以添加使用者并管理使用者及其使用者組的操作權限。
hue使用者首頁
登入成功以後,進入hue web控制台首頁,如下圖所示:
登入成功後,首先會執行一些基本環境的配置檢查工作,它與我們實際修改配置時都指定了哪些應用有關系。
hive查詢編輯器頁面
使用者登入成功後,選擇query editors下面的hive菜單項,如圖所示:
在送出查詢的時候,由于該查詢執行時間較長,可以等待查詢執行,最後結果顯示在的現房的results标簽頁上,也可以在執行過程中檢視hive背景執行情況。
job浏覽器頁面
通過job浏覽器(job browser)頁面http://10.10.4.125:8000/jobbrowser/,可以檢視運作在hadoop叢集上各種狀态的job,包括succeeded、running、failed、killed這4種狀态,如圖所示:
如果想要看到job具體執行狀态資訊,需要正确配置并啟動hadoop叢集的jobhistoryserver和webappproxyserver服務,可以通過web頁面看到相關資料,我們的示例,如圖所示:
如果想看某個job對應的maptask或者reducetask執行情況,可以點選對應連結進去,和通過hadoop yarn的job web管理界面類似,監控起來非常友善。
使用者管理和授權認證
以授權管理者使用者登入成功後,可以通過點選右上角使用者(我這裡是yanjun),下拉清單中有“manage users”菜單項,在這裡面可以建立新使用者,并指定通路權限,如下圖所示:
上面,我建立了幾個使用者,并指定使用者所屬的組(groups,支援組管理)。實際上,我們可以将不同的hue應用設定為不同的組,然後将建立的使用者配置設定到該相關組,通過這種方式可以控制使用者通路hue應用的權限。上面建立并配置設定權限的使用者可以通過設定的使用者名和密碼登入hue web管理系統,與各種hadoop相關的應用(不僅僅限于此,如mysql、spark等)進行互動。
總結
通過上面的了解,以及安裝配置過程所遇到的問題,做一個總結:
如果基于centos環境安裝配置hue,可能相對複雜一點,不一定能夠很容易的配置成功。我開始基于centos-5.11(final)進行配置,沒有配置成功,可能是使用的hue的版本太高(branch-3.0和branch-3.7.1我都試過),或者可能是centos依賴的一些軟體包無法安裝等問題導緻的。建議最好使用較新版本的centos,我這裡使用的是centos-6.6 (final),hue使用的branch-3.7.1源碼編譯,并且python版本需要2.6+。
使用hue,我們可能會對使用者管理及其權限配置設定也很感興趣,是以資料存儲,可以根據需要使用我們熟悉的其他關系資料庫,如mysql等,并做好備份,以防使用hue應用的相關使用者資料丢失,造成無法通路hadoop叢集等問題。需要修改hue的配置檔案,将預設存儲方式sqlite3改成我們熟悉的關系資料庫,目前支援mysql、postgresql,以及oracle。
如果有必要,可能結合hadoop叢集底層的通路控制機制,如kerberos,或者hadoop sla,配合hue的使用者管理和授權認證功能,更好地進行通路權限的限制和控制。
根據前面我們提到的hue特性,我們可以根據自己實際的應用場景,來選擇不同的hue應用,通過這種插件式的配置來啟動應用,通過hue與其互動,如oozie、pig、spark、hbase等等。
使用更低版本的hive,如0.12,可能在驗證過程中會遇到問題,可以根據hive的版本來選擇相容版本的hue來安裝配置。
由于本次安裝配置實踐,并沒有使用cloudera發行的cdh軟體包,如果使用cdh可能會更加順利一些。