Hue Web應用的架構
Hue 是一個Web應用,用來簡化用戶和Hadoop集群的交互。Hue技術架構,如下圖所示,從總體上來講,Hue應用采用的是B/S架構,該web應用的后台采用python編程語言別寫的。大體上可以分為三層,分別是前端view層、Web服務層和Backend服務層。Web服務層和Backend服務層之間使用RPC的方式調用。
Hue整合大數據技術棧架構
由於大數據框架很多,為了解決某個問題,一般來說會用到多個框架,但是每個框架又都有自己的web UI監控界面,對應着不同的端口號。比如HDFS(50070)、YARN(8088)、MapReduce(19888)等。這個時候有一個統一的web UI界面去管理各個大數據常用框架是非常方便的。這就使得對大數據的開發、監控和運維更加的方便。
從上圖可以看出,Hue幾乎可以支持所有大數據框架,包含有HDFS文件系統對的頁面(調用HDFS API,進行增刪改查的操作),有HIVE UI界面(使用HiveServer2,JDBC方式連接,可以在頁面上編寫HQL語句,進行數據分析查詢),YARN監控及Oozie工作流任務調度頁面等等。Hue通過把這些大數據技術棧整合在一起,通過統一的Web UI來訪問和管理,極大地提高了大數據用戶和管理員的工作效率。這里總結一下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數據庫查詢編輯器
使用sentry基於角色的授權以及多租戶的管理.(Hue 2.x or 3.x)
Hue操作數據
使用Hue可以以圖形界面的形式創建solr集合,導入數據到Solr中,並建立數據查找索引。
提供了人性化的UI頁面把數據從文件系統(比如Linux文件系統、HDFS)導入Hive中,導入的時候可以把數據轉換成相應的Hive表,導入完成之后就可以直接使用Hive SQL查詢剛剛導入的數據了。[^import-hive]
使用Hue以圖形界面的形式操作HDFS,包括導入、移動、重命名、刪除、復制、修改、下載、排序、查看其中的數據等等操作。
Hue集成了Sqoop組件,這樣就可以通過Hue把數據從其他文件系統批量導入到Hadoop中,或者從Hadoop中導出。[^http://blog.cloudera.com/blog/2013/11/sqooping-data-with-hue/]
可以通過圖形界面的方式操作HBase,可以導入數據到HBase中,可以通過UI界面進行相關的增加、刪除和查詢操作。[^http://blog.cloudera.com/blog/2013/09/how-to-manage-hbase-data-via-hue/]
Hue數據查詢分析
通過Hue使用Hive進行數據分析
Hue提供了非常人性化的Hive SQL編輯界面,編輯好SQL語句之后就可以直接查詢數據倉庫中的數據,還可以保存SQL語句、查看和刪除歷史SQL語句。對於所查詢出來的數據,可以下載以及以多種圖表的形式展示它們。通過Hue,用戶還可以通過自定義函數然后在Hue中通過SQL引用執行。
通過Hue使用Impala進行數據分析
和Hive一樣,Hue提供了類似的圖形界面用來使用Impala進行數據查詢分析。形式和Hive的類似。如下圖所示
使用Hue使用Pig進行數據分析
類似於Hive和Impala在Hue中編輯器,Pig的功能和表達式可以直接在Hue中進行編輯和執行等操作。用戶可以自定義函數和參數,編輯器能夠自動補全Pig關鍵字、別名和HDFS路徑,還支持語法高亮,編寫好腳本之后點擊一下就可以提交執行。用戶可以查看到執行的進度、執行的結果和日志。
Hue數據可視化
Hue使用Web圖形界面的可視化的形式展示所查詢出來的數據,展示的形式有表格、柱狀圖、折線圖、餅狀圖、地圖等等。這些可視化功能的使用非常簡單。比如,使用Hive SQL查詢出相關的數據出來之后,我想以柱狀圖的形式展示它們,我只需要勾選橫坐標和縱坐標的字段就可以顯示出我想要的柱狀圖。
Hue提供了可視化的HDFS文件系統,使得對HDFS中的數據的操作完全能夠通過UI界面完成,包括查看文件中的內容。
類似地,Hue提供了可視化的UI界面操作HBase中的數據。包含了數據展示,各個版本的數據的查看和其他編輯操作的UI界面,提供了展示數據的排序方式等等。
下圖表示,編輯HBase數據的可視化界面
Hue提供了用戶自定義儀表盤(Dashboard)展示數據的功能。數據的來源是Solr這個搜索引擎。通過拖拽的方式設置儀表盤(也就是數據展示的方式),有文本框、時間表、餅狀圖、線、地圖、HTML等組件。圖表支持實時動態更新。設置儀表盤的全部操作都是通過圖形界面完成的,對於不同的展示方式,用戶可以選擇相應的字段,整個過程非常簡單方便。保存好剛剛配置好的儀表盤之后,我們可以選擇分享給相應權限的用戶,擁有不同的權限的用戶將看到不同的內容。[^http://gethue.com/hadoop-search-dynamic-search-dashboards-with-solr/]
上圖表示表盤設置中的以地圖的方式展示國家碼。
上圖表示:多種展示方式的表盤。
Hue對任務調度的可視化
Hue以可視化的方式向用戶展示任務的執行情況,具體包括任務的執行進度、任務的執行狀態(正在運行、執行成功、執行失敗、被killed),任務的執行時間,還能夠顯示該任務的標准輸出信息、錯誤日志、系統日志等等信息。還可以查看該任務的元數據、向用戶展示了正在運行或者已經結束的任務的詳細的執行情況。除此之外,Hue還提供了關鍵字查找和按照任務執行狀態分類查找的功能。
上圖表示:任務執行情況和相關信息顯示
上圖表示:任務的日志顯示。
Hue權限控制
Hue在HueServer2中使用了Sentry進行細粒度的、基於角色的權限控制。這里的細粒度是指,Sentry不僅僅可以給某一個用戶組或者某一個角色授予權限,還可以為某一個數據庫或者一個數據庫表授予權限,甚至還可以為某一個角色授予只能執行某一類型的SQL查詢的權限。Sentry不僅僅有用戶組的概念,還引入了角色(role)的概念,使得企業能夠輕松靈活的管理大量用戶和數據對象的權限,即使這些用戶和數據對象在頻繁變化。除此之外,Sentry還是“統一授權”的。具體來講,就是訪問控制規則一旦定義好之后,這些規則就統一作用於多個框架(比如Hive、Impala、Pig)。舉一個例子:我們為某一個角色或者用戶組授權只能進行Hive查詢,我們可以讓這個權限不僅僅作用於Hive,還可以是Impala、MapReduce、Pig和HCatalog。
Sentry的優勢還體現在它本身對Hadoop生態組件的集成。如下圖所示,我們可以使用Sentry為Hadoop中的多個框架進行權限控制。
管理員使用瀏覽器就能修改相關權限。
Airflow工作流
工作流就是一系列相互銜接、自動進行的業務活動或任務。一個工作流包括一組任務(或活動)及它們的相互順序關系,還包括流程及任務(或活動)的啟動和終止條件,以及對每個任務(或活動)的描述。
Airflow目前正在Apache孵化器中[^airflow-incubator],但是已經被包括雅虎在內的很多公司使用[^github-airflow]。
這個平台擁有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,並且提供了鈎子使得系統擁有很好的擴展性。
Airflow的優勢
動態的:Airflow通過代碼(python)來配置管道(pipeline)而不是通過xml配置文件,這使得用戶可以編寫代碼來實例化動態管道。使用代碼定義任務(DAG)在執行一個特定的可重復的任務時非常管用。用代碼來定義工作流是這個系統最強大之處。這在沒有人工干預的情況下自動接入新的數據源的時候非常有用。
可伸縮的:可以很容易地編輯、運行和擴展相關的庫文件,
優雅的:Airflow的管道(pipeline)是精煉直接的,Airflow的核心使用了參數化的腳本,還使用了強大的Jinja模板引擎。
可拓展的:Airflow具有模塊化結構,使用消息隊列來整合任意數量的worker。[^apache-airflow]
任務隔離:在一個分布式環境中,宕機是時有發生的。Airflow通過自動重啟任務來適應這一變化。到目前為止一切安好。當我們有一系列你想去重置狀態的任務時,你就會發現這個功能簡直是救世主。為了解決這個問題,我們的策略是建立子DAG。這個子DAG任務將自動重試自己的那一部分,因此,如果你以子DAG設置任務為永不重試,那么憑借子DAG操作你就可以得到整個DAG成敗的結果。如果這個重置是DAG的第一個任務設置子DAG的策略就會非常有效,對於有一個相對復雜的依賴關系結構設置子DAG是非常棒的做法。注意到子DAG操作任務不會正確地標記失敗任務,除非你從GitHub用了最新版本的Airflow。解決這個問題的另外一個策略是使用重試柄,這樣你的重試柄就可以將任務隔離,每次執行某個特定的任務。
人性化的:Airflow提供了非常人性化的Web UI,用戶可以使用瀏覽器編輯、查看等操作工作流,提供了人性化的任務監控UI。
上圖表示:Airflow的web UI.
Airflow其他有趣的特點
服務級別協議:用戶能夠通過設置某一個任務或者DAG(在一定時間內)必須要成功執行,如果一個或多個任務在規定時間內沒有成功完成,就會有郵件提醒用戶。
XCom:XCom使得任務(task)之間能夠交換信息,從而實現更微妙的控制和狀態共享。
變量:這可以讓用戶在Airflow中自定義任意key-value形式的變量。用戶可以通過web UI或者代碼對變量進行增刪改查操作。把這些變量當作系統的配置項是非常有用的。[^http://bytepawn.com/airflow.html]
使用Airflow
下載安裝Airflow是一件很簡單的事情,使用pip就可以了。
編寫DAG(有向無環圖),使用python語言編寫。Airflow提供了和Hive、Presto、MySQL、HDFS、Postgres和S3等交互的接口。
導入DAG到Airflow中,開始執行。
使用Airflow提供的web UI查看BAG執行情況,運行結束之后還可以通過Web UI查看各個任務的執行狀況,比如執行時間,便於進一步優化。[^https://www.pandastrike.com/posts/20150914-airflow]