目錄
五、Hue、Zeppelin 比較
1. Zeppelin 簡介
2. Zeppelin 安裝配置
(1)安裝環境
(2)Zeppelin 及其相關組件
(3)配置 Zeppelin
(4)啟動 Zeppelin
(5)測試
3. 在 Zeppelin 中添加 MySQL 翻譯器
(1)編譯 MySQL Interpreter 源代碼
(2)部署二進制包
(3)重啟 Zeppelin
(4)加載 MySQL Interpreter
(5)測試
4. Hue 與 Zeppelin 比較
(1)功能
(2)架構
(3)使用場景
五、Hue、Zeppelin 比較
? ? ? ? 上一節簡單介紹了 Hue 這種 Hadoop 生態圈的數據可視化組件,本節討論另一種類似的產品 —— Zeppelin。首先介紹一下 Zeppelin,然后說明其安裝的詳細步驟,之后演示如何在 Zeppelin 中添加 MySQL 翻譯器,最后從功能、架構、使用場景幾方面將 Hue 和 Zeppelin 做一個比較。
1. Zeppelin 簡介
? ? ? ? Zeppelin 是一個基于 Web 的軟件,用于交互式地數據分析。一開始是 Apache 軟件基金會的孵化項目,2016 年 5 月正式成為一個頂級項目(Top-Level Project,TLP)。Zeppelin 描述自己是一個可以進行數據攝取、數據發現、數據分析、數據可視化的筆記本,用以幫助開發者、數據科學家以及相關用戶更有效地處理數據,而不必使用復雜的命令行,也不必關心集群的實現細節。Zeppelin 的架構圖如下所示。
? ? ? ? 從圖中可以看到,Zeppelin 具有客戶端/服務器架構,客戶端一般就是指瀏覽器。服務器接收客戶端的請求,并將請求通過 Thrift 協議發送給翻譯器組。翻譯器組物理表現為 JVM 進程,負責實際處理客戶端的請求并與服務器進行通信。
? ? ? ? 翻譯器是一個插件式的體系結構,允許任何語言/后端數據處理程序以插件的形式添加到 Zeppelin 中。特別需要指出的是,Zeppelin 內建 Spark 翻譯器,因此不需要構建單獨的模塊、插件或庫。Spark 翻譯器的架構圖如下所示。
? ? ? ? 當前的 Zeppelin 已經支持很多翻譯器,如 Zeppelin 0.6.0 版本自帶的翻譯器有 alluxio、cassandra、file、hbase、ignite、kylin、md、phoenix、sh、tajo、angular、elasticsearch、flink、hive、jdbc、lens、psql、spark 等 18 種之多。插件式架構允許用戶在 Zeppelin 中使用自己熟悉的特定程序語言或數據處理方式。例如,通過使用 %spark 翻譯器,可以在 Zeppelin 中使用 Scala 語言代碼。
? ? ? ? 在數據可視化方面,Zeppelin 已經包含一些基本的圖表,如柱狀圖、餅圖、線形圖、散點圖等,任何后端語言的輸出都可以被圖形化表示。
? ? ? ? 用戶建立的每一個查詢叫做一個 note,note 的 URL 在多用戶間共享,Zeppelin 將向所有用戶實時廣播 note 的變化。Zeppelin 還提供一個只顯示查詢結果的 URL,該頁不包括任何菜單和按鈕。用這種方式可以方便地將結果頁作為一幀嵌入到自己的 web 站點中。
2. Zeppelin 安裝配置
? ? ? ? 下面用一個典型的使用場景 —— 使用 Zeppelin 運行 SparkSQL 訪問 Hive 表,在一個實驗環境上說明 Zeppelin 的安裝配置步驟。
(1)安裝環境
? ? ? ? 12 個節點的 Spark 集群,以 standalone 方式部署,各個節點運行的進程如下表所示。
主機名 | 運行進程 |
nbidc-agent-03 | NameNode、Spark Master |
nbidc-agent-04 | SecondaryNameNode |
nbidc-agent-11 | ResourceManager、DataNode、NodeManager、Spark Worker |
nbidc-agent-12 | DataNode、NodeManager、Spark Worker |
nbidc-agent-13 | DataNode、NodeManager、Spark Worker |
nbidc-agent-14 | DataNode、NodeManager、Spark Worker |
nbidc-agent-15 | DataNode、NodeManager、Spark Worker |
nbidc-agent-18 | DataNode、NodeManager、Spark Worker |
nbidc-agent-19 | DataNode、NodeManager、Spark Worker |
nbidc-agent-20 | DataNode、NodeManager、Spark Worker |
nbidc-agent-21 | DataNode、NodeManager、Spark Worker |
nbidc-agent-22 | DataNode、NodeManager、Spark Worker |
- 操作系統:CentOS release 6.4
- Hadoop 版本:2.7.0
- Hive 版本:2.0.0
- Spark 版本:1.6.0
(2)Zeppelin 及其相關組件
? ? ? ? 在 nbidc-agent-04 上安裝部署 Zeppelin 及其相關組件。前提:nbidc-agent-04 需要能夠連接互聯網。
- 安裝 Git:在 nbidc-agent-04 上執行下面的指令。
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel yum install gcc perl-ExtUtils-MakeMaker yum remove git cd /home/work/tools/ wget https://github.com/git/git/archive/v2.8.1.tar.gz tar -zxvf git-2.8.1.tar.gz cd git-2.8.1.tar.gz make prefix=/home/work/tools/git all make prefix=/home/work/tools/git install
- 安裝 Java:在 nbidc-agent-03 機器上執行下面的指令拷貝 Java 安裝目錄到 nbidc-agent-04機器上。
scp -r jdk1.7.0_75 nbidc-agent-04:/home/work/tools/
- 安裝 Apache Maven:在 agent-04 上執行下面的指令。
cd /home/work/tools/ wget ftp://mirror.reverse.net/pub/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar -zxvf apache-maven-3.3.9-bin.tar.gz
- ?安裝 Hadoop 客戶端:在 nbidc-agent-03 機器上執行下面的指令拷貝 Hadoop 安裝目錄到 nbidc-agent-04 機器上。
scp -r hadoop nbidc-agent-04:/home/work/tools/
- 安裝 Spark 客戶端:在 nbidc-agent-03 機器上執行下面的指令拷貝 Spark 安裝目錄到 nbidc-agent-04 機器上。
scp -r spark nbidc-agent-04:/home/work/tools/
- 安裝 Hive 客戶端:在 nbidc-agent-03 機器上執行下面的指令拷貝 Hive 安裝目錄到 nbidc-agent-04 機器上。
scp -r hive nbidc-agent-04:/home/work/tools/
- 安裝 phantomjs:在 nbidc-agent-04 上執行下面的指令。
cd /home/work/tools/ tar -jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2
- 下載最新的 zeppelin 源碼:在 nbidc-agent-04 上執行下面的指令。
cd /home/work/tools/ git clone https://github.com/apache/incubator-zeppelin.git
- 設置環境變量:在 nbidc-agent-04 上編輯 /home/work/.bashrc 文件。
vi /home/work/.bashrc # 添加下面的內容 export PATH=.:$PATH:/home/work/tools/jdk1.7.0_75/bin:/home/work/tools/hadoop/bin:/home/work/tools/spark/bin:/home/work/tools/hive/bin:/home/work/tools/phantomjs-2.1.1-linux-x86_64/bin:/home/work/tools/incubator-zeppelin/bin; export JAVA_HOME=/home/work/tools/jdk1.7.0_75 export HADOOP_HOME=/home/work/tools/hadoop export SPARK_HOME=/home/work/tools/spark export HIVE_HOME=/home/work/tools/hive export ZEPPELIN_HOME=/home/work/tools/incubator-zeppelin # 保存文件,并是設置生效 source /home/work/.bashrc
- 編譯 zeppelin 源碼:在 nbidc-agent-04 上執行下面的指令。
cd /home/work/tools/incubator-zeppelin mvn clean package -Pspark-1.6 -Dspark.version=1.6.0 -Dhadoop.version=2.7.0 -Phadoop-2.6 -Pyarn -DskipTests
(3)配置 Zeppelin
- 配置 zeppelin-env.sh 文件:在 nbidc-agent-04 上執行下面的命令。
cp /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh.template /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh vi /home/work/tools/incubator-zeppelin/conf/zeppelin-env.sh # 添加下面的內容 export JAVA_HOME=/home/work/tools/jdk1.7.0_75 export HADOOP_CONF_DIR=/home/work/tools/hadoop/etc/hadoop export MASTER=spark://nbidc-agent-03:7077
- 配置 zeppelin-site.xml 文件:在 nbidc-agent-04 上執行下面的命令。
cp /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml.template /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml # 修改下面這段的value值,設置zeppelin的端口為9090 <property> <name>zeppelin.server.port</name> <value>9090</value> <description>Server port.</description> </property>
- 將 hive-site.xml 拷貝到 Zeppelin 的配置目錄下:在 nbidc-agent-04 上執行下面的指令。
cd /home/work/tools/incubator-zeppelin cp /home/work/tools/hive/conf/hive-site.xml .
(4)啟動 Zeppelin
? ? ? ? 在 nbidc-agent-04 上執行下面的命令。
zeppelin-daemon.sh start
(5)測試
? ? ? ? 從瀏覽器輸入 http://nbidc-agent-04:9090/,如下圖所示。
? ? ? ? 點擊‘Interpreter’菜單,配置并保存spark解釋器,如下圖所示。
? ? ? ? 配置并保存 hive 解釋器,如下圖所示。
? ? ? ? 點擊‘NoteBook’->‘Create new note’子菜單項,建立一個新的查詢并執行,結果如下圖所示。
? ? ? ? 說明:這是一個動態表單 SQL,SparkSQL 語句為:
%sql
select * from wxy.t1 where rate > ${r}
? ? ? ? 第一行指定解釋器為 SparkSQL,第二行用 ${r} 指定一個運行時參數,執行時頁面上會出現一個文本編輯框,輸入參數后回車,查詢會按照指定參數進行,如圖會查詢 rate > 100 的記錄。
3. 在 Zeppelin 中添加 MySQL 翻譯器
? ? ? ? 數據可視化的需求很普遍,如果常用的如 MySQL 這樣的關系數據庫也能使用 Zeppelin 查詢,并將結果圖形化顯示,那么就可以用一套統一的數據可視化方案處理大多數常用查詢。Zeppelin 本身還不帶 MySQL 翻譯器,幸運的是已經有 MySQL 翻譯器插件了。下面說明該插件的安裝步驟及簡單測試。
(1)編譯 MySQL Interpreter 源代碼
cd /home/work/tools/
git clone https://github.com/jiekechoo/zeppelin-interpreter-mysql
mvn clean package
(2)部署二進制包
mkdir /home/work/tools/incubator-zeppelin/interpreter/mysql
cp /home/work/tools/zeppelin-interpreter-mysql/target/zeppelin-mysql-0.5.0-incubating.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
# copy dependencies to mysql directory
cp commons-exec-1.1.jar mysql-connector-java-5.1.6.jar slf4j-log4j12-1.7.10.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar /home/work/tools/incubator-zeppelin/interpreter/mysql/
vi /home/work/tools/incubator-zeppelin/conf/zeppelin-site.xml
? ? ? ? 在 zeppelin.interpreters 的 value 里增加一些內容“,org.apache.zeppelin.mysql.MysqlInterpreter”,如下圖所示。
(3)重啟 Zeppelin
zeppelin-daemon.sh restart
(4)加載 MySQL Interpreter
? ? ? ? 打開主頁 http://nbidc-agent-04:9090/,‘Interpreter’ -> ‘Create’,完成類似下圖的頁面,完成點擊‘Save’ 。
(5)測試
- 創建名為 mysql_test 的 note,如下圖所示。
- 輸入下面的查詢語句,按創建日期統計建立表的個數。
%mysql
select date_format(create_time,'%Y-%m-%d') d, count(*) c from information_schema.tables group by date_format(create_time,'%Y-%m-%d') order by d;
? ? ? ? 查詢結果的表格表示如下圖所示。
? ? ? ? 查詢結果的柱狀圖表示如下圖所示。
? ? ? ? 查詢結果的餅圖表示如下圖所示。
? ? ? ? 查詢結果的堆疊圖表示如下圖所示。
? ? ? ? 查詢結果的線形圖表示如下圖所示。
? ? ? ? 查詢結果的散點圖表示如下圖所示。
? ? ? ? 報表模式的餅圖表示如下圖所示。
? ? ? ? 可以點擊如下圖所示的鏈接單獨引用此報表。
? ? ? ? 單獨的頁面能根據查詢的修改而實時變化,比如將查詢修改為:
select date_format(create_time,'%Y-%m-%d') d, count(*) c from information_schema.tables where create_time > '2016-06-07'group by date_format(create_time,'%Y-%m-%d') order by d;
? ? ? ? 增加了 where 子句,在運行此查詢,結果如下圖所示。
? ? ? ? 單獨鏈接的頁面也隨之自動發生變化,如下圖所示。
4. Hue 與 Zeppelin 比較
(1)功能
- Zeppelin 和 Hue 都能提供一定的數據可視化的功能,都提供了多種圖形化數據表示形式。單從這點來說,個人認為功能類似,大同小異,Hue 可以通過經緯度進行地圖定位,這個功能我在 Zeppelin 0.6.0 上沒有找到。
- Zeppelin 支持的后端數據查詢程序較多,0.6.0 版本缺省有 18 種,原生支持 Spark。而 Hue 的 3.9.0 版本缺省只支持 Hive、Impala、Pig 和數據庫查詢。
- Zeppelin 只提供了單一的數據處理功能,包括前面提到的數據攝取、數據發現、數據分析、數據可視化等都屬于數據處理的范疇。而Hue的功能相對豐富的多,除了類似的數據處理,還有元數據管理、Oozie 工作流管理、作業管理、用戶管理、Sqoop 集成等很多管理功能。從這點看,Zeppelin 只是一個數據處理工具,而 Hue 更像是一個綜合管理工具。
(2)架構
- Zeppelin 采用插件式的翻譯器,通過插件開發,可以添加任何后端語言和數據處理程序。相對來說更獨立和開放。
- Hue 與 Hadoop 生態圈的其它組件密切相關,一般都與 CDH 一同部署。
(3)使用場景
- Zeppelin 適合單一數據處理、但后端處理語言繁多的場景,尤其適合 Spark。
- Hue 適合與 Hadoop 集群的多個組件交互、如 Oozie 工作流、Sqoop 等聯合處理數據的場景,尤其適合與 Impala 協同工作。