White Elephant 是一個Hadoop日志收集器和展示器,它提供了用戶角度的Hadoop集群可視化。White Elephant 是全球最大的職業社交網站Linkedin開發的一套分析Hadoop作業日志的系統,完全開源。代碼在GitHub上的鏈接https://github.com/linkedin/white-elephant。
不過White Elephant當前只支持hadoop1.0系列的jobhistory解析,暫時不支持hadoop2.0系列的版本。
快速入門
你可以在GitHub上的 White Elephant項目check out代碼,或者下載最新的snapshot版本。
可以使用一些測試數據嘗試這個服務:
cd server
ant
./startup.sh
然后訪問 http://localhost:3000。它可能需要幾分鍾的時間加載測試數據。
服務端
服務端是一個JRuby的web應用,在生產環境中它可以部署到tomcat中,然后可以直接從Hadoop中讀取收集到的數據。數據存儲在 HyperSQL提供的 in-memory 類型的數據庫中,圖表由 Rickshaw提供。
開始使用
開始使用這個服務之前,首先需要設置環境:
cd server
ant
默認會做以下的事情:
-
安裝JRuby 到 .rbenv下的本地目錄
-
安裝RubyRuby gems到上述目錄
-
下載JAR包
-
在 data/usage下創建測試數據
這時候你可以通過下面的命令啟動服務:
./startup.sh
你可以訪問 http://localhost:3000,它可能需要幾分鍾的時間加載測試數據。
這里使用trinidad在開發環境中運行JRuby 網頁應用。由於這是在開發模式,應用假設本地數據(在config.yml中指定的路徑)可以使用。
配置
服務端的配置在config.yml中指定,你可以在sample_config.yml中查看示例。
當通過./startup.sh 運行在開發模式中時,sample_config.yml會被使用,並且它和 local目錄下的配置一起生效。這里唯一的可配置參數是file_pattern,它指定了從本地加載數據的目錄。
當打包成WAR並運行在生產模式下,使用hadoop下指定的配置,假設收集到的數據可用,下述配置必須指定:
file_pattern: 從Hadoop加載使用文件的全局的文件模式。
libs: 包含Hadoop JAR文件的目錄 (加到classpath)。
conf_dir: 包含Hadoop配置的目錄(加到 classpath)。
principal: 用戶名用於訪問安全的Hadop。
keytab: keytab 文件的路徑,用於訪問安全的Hadoop 。
White Elephant並不基於某個特定版本的Hadoop,所以JARs並不會打包到WAR包中。因此配置中必須指定到Hadoop JARs的路徑。
部署
編譯一個可以部署到tomcat的WAR文件:
ant war -Dconfig.path=<path-to-config>
你指定的配置文件config.yml將一起打包到WAR文件中。
Hadoop日志上傳
hadoop/scripts/statsupload.pl腳本可以用於上傳Hadoop日志文件到HDFS,主要就可以被處理了。
Hadoop 作業
一共兩個Hadoop作業,都被一個作業執行器管理,並追蹤需要的工作。
第一個作業是Hadoop日志解析器,它從存儲在Hadoop中的文件讀日志,解析出相應的信息,並以Avro的格式寫出去。
第二個作業讀取Avro格式的日志數據,並以小時為單位聚合,數據以Avro格式寫出去,它本質上建立一共數據立方體,可以很容易的被wen應用加載到DB和查詢。
配置
示例配置存儲在 hadoop/config/jobs:
base.properties: 包括大多配置。
white-elephant-full-usage.job: 處理所有日志時被使用的作業文件。
white-elephant-incremental-usage.job: 處理增量日志時需要的作業文件。
base.properties文件包括White Elephant指定的配置,也包括Hadoop配置。所有Hadoop配置參數以hadoop-conf開頭。兩個job的配置項相同,當然其值需要根據作業配置。
Hadoop 日志
在base.properties中存在一個參數log.root。這是解析程序查找Hadoop日志的根目錄。解析作業假設日志存儲在Hadoop每天的目錄下,目錄格式如下:
<logs.root>/<cluster-name>/daily/<yyyy>/<MMdd>
例如,2013年1月23日的目錄格式為:
/data/hadoop/logs/prod/daily/2013/0123
打包
創建一個包含所有文件的zip包可以通過下述命令生成:
ant zip -Djob.config.dir=<path-to-job-config-dir>
job.config.dir應該包含.properties和.job文件。
如果你使用 Azkaban作為你的作業調度器,則zip文件可以工作到base.propreties中指定的配置的時間。
運行
解壓zip文件后可以運行run.sh腳本,這需要配置兩個環境變量:
-
HADOOP_CONF_DIR: Hadoop configuration directory
-
HADOOP_LIB_DIR: Hadoop JARs directory
運行全量job:
./run.sh white-elephant-full-usage.job
運行增量job:
./run.sh white-elephant-incremental-usage.job
增量作業只處理增量數據,全量作業處理所有數據。