1、概述
Scribe是facebook開源的日誌收集系統,可用於搜索引擎中進行大規模日誌分析處理。其通常與Hadoop結合使用,scribe用於向HDFS中push日誌,而Hadoop通過MapReduce作業進行定期處理,具體可參見日文日誌:
http://d.hatena.ne.jp/tagomoris/touch/20110202/1296621133
其安裝非常複雜,主要是因爲其依賴的包,需要設置的環境變量非常多,另外,它與Hadoop兼容不好,安裝急需要技巧。目前對於Scirbe的安裝方法,網上儘管有人介紹,但往往過於粗略,用處不大。本文比較全面的介紹了Scribe的安裝方法,方法已經得到驗證。
2、安裝前的準備
(1)Thrift依賴軟件
具體參見文章:http://wiki.apache.org/thrift/ThriftRequirements, 關於Thrift的介紹,參見我的另一篇日誌:http://dongxicheng.org/search-engine/thrift-framework-intro/
(2)Thrift
最新版本即可。
(3)Scribe
版本2.1和2.2存在問題,直接下載github的當前版本纔可用(見參考資料4)。
(4)Hadoop
Apache的所有版本(0.20.2(包括)之前)不可用,因爲它們的libhdfs與Scribe均不兼容。
Cloudera的幾乎所有版本不可用,只有CDH3 beta2(0.20.2+320)可用。需要強調的是:Cloudera的0.20.2+737和 0.20.2+320之間不可以相互通信(在此指HDFS不可相互通信),Apache 0.20.2版本和Cloudera 0.20.2之間也不可相互通信。具體錯誤參見參考資料1。
需要注意的是,我所用的機器是64位的,操作系統是Ubuntu。
3、安裝流程
(1)安裝Thrift依賴軟件
必須得安裝的是:g++, boost,autoconf,libevent,Apache ant, JDK, PHP,python
其它腳本語言根據需要安裝
(2)安裝Thirft
大體流程是:
tar -zxvf thrift-0.2.0.tar.gz
cd thrift-0.2.0
./bootstrap.sh
./configure
sudo make
sudo make install
遇到具體問題,可到google上查找,這方面資料很多。
安裝完Thirft後,記得運行一下它提供的example,看是否安裝成功。方法:在thrift源代碼目錄有一個叫tutorial的目錄,進行其中後運行thrift命令生成相應的服務代碼:
$ thrift -r –gen cpp tutorial.thrift // -r對其中include的文件也生成服務代碼 -gen是生成服務代碼的語言
運行完之後會在當前目錄看到一個gen-cpp目錄,其中就是thrfit命令生成的代碼。這時你cd到tutorial/cpp目錄,運行make,生成相應的CppServer與CppClient程式。
此時你可以分別運行CppServer和CppClient,讓它們通信。
(3)安裝Hadoop
如果你發現Hadoop中自帶的已經編譯好的libhdfs不可用(libhdfs在$HADOOOP_HOME/c++中),可自己編譯生成libhdfs,方法是,在$HADOOP_HOME下,輸入: ant compile-c++-libhdfs -Dislibhdfs=true ,同時設置Hadoop的CLASSPATH。
(4)安裝Scribe
./boottrap.sh (主要目的是生成configure, 如果出現類似於configure: error: Could not link against !的錯誤,不要管,進行下一步好了!)
———————————
./configure –with-boost=/usr/local/boost –prefix=/usr/local/scribe –with-hadooppath=/home/dong/hadoop-0.20.2/ –enable-hdfs CPPFLAGS=”-I/opt/jdk1.6.0_21/include/ -I/opt/jdk1.6.0_21/include/linux -I/home/dong/hadoop-0.20.2/src/c++/libhdfs” LDFLAGS=”-L/opt/jdk1.6.0_21/jre/lib/amd64 -L/opt/jdk1.6.0_21/jre/lib/amd64/server -L/home/dong/hadoop-0.20.2/build/c++/Linux-amd64-64/lib -ljvm -lhdfs”
————————————————
make
———————————————–
sudo make install
安裝成功驗證方法參見參考文獻(5)。
4、可能出現的錯誤及解決方法
(1)運行boottrap.sh時,產生以下錯誤:
checking whether the Boost::System library is available… yes
checking whether the Boost::Filesystem library is available… yes
configure: error: Could not link against !
當安裝的boost目錄不在默認的/usr目錄下時,用戶需要配置boost安裝目錄,如:
./configure –with-boost=/usr/local/boost –prefix=/usr/local/scribe
(2)運行examples時,產生以下錯誤:
Traceback (most recent call last):
File “examples/scribe_cat”, line 24, in <module>
from scribe import scribe
ImportError: No module named scribe
解決方法:python找不到scribe模塊,需要把scribe package包含進來,如:
export PYTHONPATH=”/usr/lib/python2.6/site-packages/”
(3)Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/ hadoop/conf/Configuration
解決方法,將Hadoop的classpath加到環境變量中,如:
export CLASSPATH=$HADOOP_HOME/hadoop-core-0.20.2+320.jar
5、參考資料
(1)介紹scribe與libhdfs的兼容性問題(日文):
http://d.hatena.ne.jp/tagomoris/touch/20110107/1294368321
(2)介紹scribe的安裝方法(日文):
http://d.hatena.ne.jp/tagomoris/touch/20110106/1294311969
(3)介紹scribe的安裝方法(英文):http://www.myhpcblog.blogspot.com/
(4)scribe下載官方主頁:https://github.com/facebook/scribe
(5)Scribe應用介紹:
http://blog.octo.com/en/scribe-a-way-to-aggregate-data-and-why-not-to-directly-fill-the-hdfs/
(6)Scribe安裝方法:http://blog.octo.com/en/scribe-installation/
(7)Hadoop的各個CDH版本下載地址:http://archive.cloudera.com/cdh/3/