本篇博文主要講解的是Hue這個開源軟件。通過閲讀本博客,可以從宏觀的角度瞭解Hue這個應用。
本文介紹了什麼是Hue,Hue的架構,Hue的特點,在Hue上面使用Hive的優點,在Hue上瀏覽文件和數據,使用Hue可以對HDFS做哪些操作, 大數據授權管理的背景,Hue使用的授權管理的組件Sentry,介紹了Sentry的組件和架構,Sentry的特點,工作流的概念,開源工具Oozie和開源工具airflow。
Hue
什麼是Hue
Hue 是一個Web應用,用來簡化用户和Hadoop集羣的交互。Hue可以讓用户瀏覽HDFS文件系統、查看集羣的作業和運行Hive、Pig和Cloudera Impala查詢, 能夠管理Hive Metastore、HBase、Sqoop、Zookeeper和MapReduce作業, 還可以通過Hue使用Oozie創建和安排工作流。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-50eIxEav-1587713720539)(http://demo.gethue.com/static/desktop/art/help/applications.png)]
Hue的架構
Hue應用運行在瀏覽器中,不需要安裝客户端。
下圖所示Hue是如何進行工作的。用户通過瀏覽器訪問Hue的服務器端(Hue Server),Hue Server 再訪問CDH1, 所以Hue Server起到了連接瀏覽器應用和CDH之間的橋樑作用。2
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Z8pniVrg-1587713720540)(http://demo.gethue.com/static/desktop/art/help/huearch.jpg)]
Hue的特點
- 開源,最早是由Cloudera Desktop演化而來,由Cloudera貢獻給開源社區
- 默認基於輕量級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中使用Hive
用户可以在Hue中進行Apache Hive數據倉庫的相關操作。用户可以創建Hive數據庫、表和分區,加載數據,創建、運行和管理Hive查詢, 還可以下載查詢結果並存儲為office Excel表或者CSV文件。
集成HiveServer2之後,增加了用户角色的授權管理,在Hue中操作Hive變得更加安全,比如:如果某用户缺少某數據庫或數據庫表的權限,那麼該用户就沒有相關web頁面的操作接口。
Hue提供了一個能夠提高生產效率的Hive網頁編輯器:
- 支持SQL語法高亮和自動補全
- 提交多個查詢並能夠查看它們的進度。
- 集成了UDF (用户自定義方法)
- 一次能執行多個查詢任務。
- 能夠下載和保存查詢結果
- 可以通過元數據導航
- 能夠保存SQL語句,能夠查看查詢計劃。
除了上面所述的功能特點,還可以:
- 進行相關的高級查詢設置
- 定義數據庫所包含的表
- 設置和覆蓋Hive和Hadoop默認的配置。
- 增加用户自定義函數(UDF)
- 可以事先自定義參數,然後在查詢語句中通過
$parametername引用這些參數。 - 支持查詢完成之後郵件通知功能。
- 查看歷史查詢結果。
- 查看、編輯、複製和刪除已經保存的查詢。
在Hue中瀏覽數據和文件
Hue提供了查看Hive、Hbase、HDFS相關數據的可視化接口。
- 查看Metastore, 比如Hive中數據庫和表的定義信息。
- 查看、搜索和編輯HBase中的數據。
- 瀏覽Zookeeper
- 查看和搜索HDFS文件系統
- 查看S3文件系統。
使用Hue操作HDFS3, 可以:
- 下載
- 重命名
- 移動文件
- 複製文件
- 遞歸修改文件的權限
- 遞歸修改文件的所有權
- 更具屬性排序(比如名字、大小、日期)
- 查看zip/gz文件裏面的內容
- 查看大文件中的內容
- 可以通過拖拽的方式上傳文件。
在Hue中的用户權限管理–Sentry
大數據平台上細粒度的訪問權限控制
背景
- 大數據的安全體系
大數據平台安全體系的四個層次説起:外圍安全、數據安全、訪問安全以及訪問行為監控.
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mLq93OFN-1587713720542)(https://s2.51cto.com//wyfs02/M00/80/9E/wKiom1dEAYOCT1WNAABrygwWDWw691.jpg-wh_651x-s_1081035784.jpg)]
外圍安全技術多指傳統意義上提到的網絡安全技術,如防火牆,登陸認證等;
數據安全從狹義上説包括對用户數據的加解密,又可細分為存儲加密和傳輸加密;還包括用户數據的脱敏,脱敏可以看做“輕量級”的數據加密。如某人的生日為“2014-12-12”,脱敏後的數據為“2014-x-x”。數據的輪廓依然存在,但已無法精確定位數值。脱敏的程度越高數據可辨認度越低。上述的例子還可脱敏為“x-x-x”,相當於完全對外屏蔽該信息。
訪問安全主要是對用户的授權進行管理。Linux/Unix系統中用户-組的讀、寫、執行權限管理堪稱其中的經典模型。HDFS對這一概念進行了擴充,形成了更加完備的ACL體系;另外隨着大數據的應用的普及和深入,文件內部數據訪問權限差異化的需求也變得越來越重要;
訪問行為監控多指記錄用户對系統的訪問行為:如查看哪個文件;運行了哪些SQL查詢;訪問行為監控一方面為了進行實時報警,迅速處置非法或者危險的訪問行為;另一方面為了事後調查取證,從長期的數據訪問行為中分析定位特定的目的。
在這四個安全的層次中,第三層同上層業務的關係最為直接:應用程序的多租户,分權限訪問控制都直接依賴這一層的技術實現。
- HDFS的授權體系
在上述的第三層中,Hadoop生態圈長久以來一直沿用Linux/Unix系統的授權管理模型,將文件的訪問權限分為讀-寫兩種權限(HDFS上沒有可執行文件的概念),將權限的所有者劃分為三個大類:擁有者(owner),所在組(group),以及其他人(other)。這種模型限制權限的所有者只能有三類。如果試圖增加一個新的“組”,並設定該組的用户擁有不同於owner,group或other的權限,現有的Linux/Unix授權模型是無法優雅地解決這個問題的。
舉例來説明上述狀況:假設有一個銷售部門,部門經理manager具有修改銷售數據sales_data的權利;銷售部門的成員具有查看sales_data的權利,銷售部門以外的人無法看到銷售數據sales_data。那麼對於銷售數據sales_data的授權如下所示:
-rw-r----- 3 manager sales 0 2015-01-25 18:51 sales_data
後來該銷售部門擴充了人員,又來兩個銷售經理,一個叫manager1,另一個叫manager2。這兩個銷售經理也被允許修改銷售數據。這種情況下,manager1和manager2只能使用一個新賬號manager_account,然後使該賬號能夠使用setuid對sales_data進行修改。這使得對同一份數據的權限管理變得複雜而不容易維護。
由於上述問題的存在,Hadoop2.4.0中添加了對HDFS ACL(Access Control Lists)的支持。這一新特性很好地解決了上述的問題。然而隨着Hadoop在企業中廣泛地應用,越來越多的業務場景要求大數據訪問控制的粒度也不再侷限在文件級別,而是更加細緻地約束文件內部的數據哪些能被讀寫,哪些只能被讀,哪些完全不允許被訪問。對於基於SQL的大數據引擎來説,數據訪問不止要到表粒度,更要精確到行列級別。
Sentry
Sentry是細粒度的、基於用户角色授權的Hadoop的模塊。它為授權用户提供細粒度的數據訪問權限控制。它在2016年3月成功由Apache的孵化項目變成了Apache的頂級項目4。HueServer2使用了Sentry進行相關授權管理。
Sentry的組件:
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-T6IB6ZIw-1587713720544)(http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/images/sentry_components.png)]
- Sentry Server: 用於管理授權元數據的RPC服務。它提供安全操作元數據的相關接口。5
- Data Engine:這是一個數據處理應用。Data Engine加載sentry plugin,解析客户端的輸入請求並傳給sentry plugin,由sentry plugin來驗證客户端輸入的權限請求。6
- Sentry Plugin:Sentry Plugin運行在data engine中,它提供那些存儲在Sentry Server中的授權元數據的操作接口,負責從文件或者數據庫中讀取出原先設定的訪問權限。Sentry Plugin還包含authorization Policy Engine, Policy Engine判定輸入的權限要求與已保存的權限描述是否匹配(已保存的權限描述就是存儲在Sentry Server中的授權元數據)78
Sentry的特點
- 用户標識和用户組映射
Sentry依賴底層的授權系統(比如Kerberos和LDAP)標識用户,同時,它使用配置在Hadoop中的用户組映射機制來確保當這個用户組被映射成其他Hadoop組件的用户組後,Sentry也能夠識別。
假設用户Alice和Bob屬於同一個用户組,組名叫“finance-department”。Bob還屬於“finance-managers”組。在Sentry中,我們創建一個叫Analyst的角色,然後授予這個角色查詢(SELECT)Customer和Sales表的權限。然後把Analyst這個角色放到“finance-department”用户組中。因為Alice和Bob都是“finance-department”用户組的成員,所以Alice和Bob擁有查詢Customer和Sales表的權限。
- 以角色為基礎的訪問控制
以角色為基礎的訪問控制(role-based access control – RBAC)是企業用來管理大量用户和數據對象權限的強大機制。一個組織中的新數據對象會被頻繁增加和刪除,其成員也會頻繁加入、移動和離開。RBAC讓這些管理工作變得簡單很多。結合上面這個例子,如果一個叫Carol的成員加入了finance department這個部門,我們只需要把她加入“finance department”用户組,她就擁有了訪問Customer和Sales表的權限。
- 統一授權
另一個重要的一點是Sentry是統一授權的。訪問控制規則一旦定義好,這些規則就統一作用於多個數據訪問工具(比如Hive、Impala、Pig)。舉一個例子:結合上面所舉的例子,我們授予Analyst角色給“finance-department”用户組,使得用户Alice、Bob和其他該組成員擁有了查詢權限。這個權限不僅僅作用於Hive、Impala,還作用於MapReduce、Pig和HCatalog。
在Hadoop生態中集成Sentry
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-gCHQmLWj-1587713720545)(http://www.cloudera.com/content/www/en-us/documentation/enterprise/latest/images/sentry_hadoop_ecosystem.png)]
上圖表示,使用Sentry集成Hadoop各個組件。Sentry為Hadoop多個組件提供服務。Sentry Server 存儲着授權元數據,同時提供修改和查詢這些元數據的接口。9
Hive和Sentry
如果Bob用户提交如下Hive查詢語句:
select * from production.sales
Hive將會識別到是Bob在請求查詢Sales表。首先Sentry Plugin組件會獲取Bob訪問Sales表的權限,再由Policy Engine判斷Bob是否有這個權限。
Sentry和查詢
Sentry可以提供許多查詢限制,這些查詢限制具有“一致性”,它們不受用户使用的方式影響。比如,如果某用户沒有通過命令行窗口訪問某一數據的權限,那麼他同樣不能通過瀏覽器或者其他控制枱訪問。
Hue和可視化
Hue提供了非常人性化的結果展示功能。
- 下面的圖片是Hive查詢結果可視化展示圖。橫座標是code,縱座標是salary,它們是可以自定義的。
相同的數據,我們可以選擇餅狀圖來顯示
除此之外,還有其他的展示方式,比如折線圖、地圖等等。
- 使用Hue可以很好地展示Solr的相關數據, 如下圖所示,這些圖標具有很高的自定義性。
- HBase查詢結果可視化
- HDFS文件系統可視化
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-yjUkykXL-1587713720551)()]
工作流
工作流定義和背景
工作流是指業務過程的部分或者整體在計算機應用環境下的自動化。它主要解決的問題是:為實現某個業務目標,利用計算機在多個參與者之間按某種預定規則自動傳遞文檔、信息或者任務。簡單地説,工作流就是一系列相互銜接、自動進行的業務活動或任務。一個工作流包括一組任務(或活動)及它們的相互順序關係,還包括流程及任務(或活動)的啓動和終止條件,以及對每個任務(或活動)的描述。工作流的應用,改進和優化了業務流程,實現更好的業務過程控制,提高業務工作效率。
Oozie
在Hadoop生態圈中,有一個組件叫做Oozie,它讓我們可以把多個Map/Reduce作業組合到一個邏輯工作單元中,從而完成更大型的任務。Oozie其實是一種Java Web工作流應用程序,它運行在Java servlet容器——即Tomcat——中,並使用數據庫來存儲以下內容:
- 工作流定義
- 當前運行的工作流實例,包括實例的狀態和變量
Oozie工作流是放置在控制依賴DAG(有向無環圖 Direct Acyclic Graph)中的一組動作(例如,Hadoop的Map/Reduce作業、Pig作業、Hive、Sqoop、Distcp,甚至Java程序和shell腳本),其中指定了動作執行的順序。我們會使用hPDL(一種XML流程定義語言)來描述這個圖。10工作流任務由時間和數據的可用性觸發。11
開源工具Airflow
Airflow目前正在Apache孵化器中12,但是已經被包括雅虎在內的很多公司使用13。
這個平台擁有和 Hive、Presto、MySQL、HDFS、Postgres和S3交互的能力,並且提供了鈎子使得系統擁有很好地擴展性。
Airflow的特點
- 動態的:Airflow通過代碼(python)來配置管道(pipeline)而不是通過xml配置文件,這使得用户可以編寫代碼來實例化動態管道。
- 可伸縮的:可以很容易地操作、運行 和擴展相關的庫文件,
- 優雅的:Airflow的管道(pipeline)是精煉直接的,Airflow的核心使用了參數化的腳本,還使用了強大的Jinja模板引擎。
- 可拓展的:Airflow具有模塊化結構,使用消息隊列來整合任意數量的worker。14
Airflow界面
Airflow提供了一個基於Web的用户界面,讓用户可以可視化管道的依賴關係、監控進度、觸發任務等。15
- 通過DAGs有向無環圖界面,可以準確查看各個任務的執行狀況。