必威电竞|足球世界杯竞猜平台

scribe
來源:互聯網

Scribe是Facebook開源的日志收集系統,在Facebook內部已經得到的應用。它能夠從各種日志源上收集日志,存儲到一個中央存儲系統(可以是NFS,分布式文件系統等)上,以便于進行集中統計分析處理。

簡介

它為日志的“分布式收集,統一處理”提供了一個可擴展的,高容錯的方案。當中央存儲系統的網絡或者機器出現故障時,scribe會將日志轉存到本地或者另一個位置,當中央存儲系統恢復后,scribe會將轉存的日志重新傳輸給中央存儲系統。其通常與Hadoop結合使用,scribe用于向hdfs中push日志,而Hadoop通過MapReduce作業進行定期處理。

架構

如右圖所示,Scribe從各種數據源上收集數據,放到一個共享隊列上,然后push到后端的中央存儲系統上。當中央存儲系統出現故障時,scribe可以暫時把日志寫到本地文件中,待中央存儲系統恢復性能后,scribe把本地日志續傳到中央存儲系統上。需要注意的是,各個數據源須通過thrift(由于采用了thrift,客戶端可以采用各種語言編寫向scribe傳輸數據(每條數據記錄包含一個category和一個message)。可以在scribe配置用于監聽端口的thrift線程數(默認為3)。在后端,scribe可以將不同category的數據存放到不同目錄中,以便于進行分別處理。后端的日志存儲方式可以是各種各樣的store,包括file(文件),buffer(雙層存儲,一個主儲存,一個副存儲),network(另一個scribe服務器),bucket(包含多個store,通過hash的將數據存到不同store中),null(忽略數據),thriftfile(寫到一個Thrift TFileTransport文件中)和multi(把數據同時存放到不同store中)。

流程原理

scribe為日志收集提供了一種容錯且可擴展的方案。scribe可以從不同數據源,不同機器上收集日志,然后將它們存入一個中央存儲系統,以便于進一步處理。當采用hdfs作為中央系統時,可以進一步利用Hadoop進行處理數據,于是scribe+HDFS+MapReduce方案便誕生了。

類型介紹

file

將日志寫到文件或者NFS中。支持兩種文件格式,即std和hdfs,分別表示普通文本文件和HDFS??膳渲玫倪x項有:

max_size:文件大小上限,即當文件大小達到max_size時,創建新的文件繼續存儲數據。

rotate_period:文件創建周期,可以是hourly,daily,never和number[sufix]。sufix可以是s(second),m(minute),h(hour),d(day),w(week)。

sub_directory:子目錄名字

base_filename:文件前綴,如news,則會依次將數據存儲到文件news_20110403_00000,news_20110403_00001,……

null

這也是一種常用的store。用戶可以在配置文件中配置一種叫default的category,如果數據所屬的category沒有在配置文件中設置相應的存儲方式,則該數據會被當做default。如果用戶想忽略這樣的數據,可以將它放入null store中。

其它store的介紹,可參見擴展閱讀資料1。

需要注意的是,Scribe會將數據首先緩存到buffer中,待buffer滿后再flush到hdfs上。當數據量非常少時,由于緩存的原因,部分數據可能未寫到HDFS中,這時用戶可以調整scribe的相關配置參數或者關閉scribe(如減小max_size),使數據全部寫到HDFS中。如果用戶采用減小max_size的方案,此時需要注意,HDFS不能很好的保存小文件(可能會丟失數據,見擴展閱讀資料3)。

buffer

這是最常用的一種store。該store中包含兩個子store,其中一個是primary store,另一個是secondary store。日志會優先寫到primary store中,如果primary store出現故障,則scribe會將日志暫存到secondary store中,待primary store恢復性能后,再將secondary store中的數據拷貝到primary store中。其中,secondary store僅支持兩種store,一個是file,另一個是hdfs。

安裝使用

Thrift需求

必須得安裝的是:g++, boost,autoconf,libevent,apache ant, JDKPHPPython

其它腳本語言根據需要安裝

安裝Thirft

大體流程是見擴展閱讀11~16

#安裝完Thrift后,記得運行一下它提供的example,看是否安裝成功。方法:在thrift源代碼目錄有一個叫tutorial的目錄,進行其中后運行thrift命令生成相應的服務代碼:

$thrift -r –gen cpp tutorial.thrift // -r對其中include的文件也生成服務代碼 -gen是生成服務代碼的語言

#運行完之后會在當前目錄看到一個Gen.Gcpp目錄,其中就是thrfit命令生成的代碼。這時你cd到tutorial/cpp目錄,運行make,生成相應的CppServer與CppClient程式。

#此時你可以分別運行CppServer和CppClient,讓它們通信。

安裝Hadoop

如果你發現Hadoop中自帶的已經編譯好的libhdfs不可用(libhdfs在$HADOOOP_HOME/C++中),可自己編譯生成libhdfs,方法是,在$HADOOP_HOME下,輸入: ant compile-C++libhdfs -Dislibhdfs=true ,同時設置Hadoop的CLASSPATH。

安裝Scribe

運行boottrap腳本(見擴展閱讀17)

#(主要目的是生成configure,如果出現類似于configure: error: Could not link against !的錯誤,不要管,進行下一步好了?。?/p>

$./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/天秤座/amd64/server -L/home/dong/hadoop-0.20.2/build/c++/Linux-amd64-64/lib -ljvm -lhdfs”

$make

$sudo make install

安裝成功驗證方法參見擴展閱讀8。

錯誤以及解決方法

(1)運行boottrap腳本時,產生以下錯誤:

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

from scribe import scribe

ImportError: No module named scribe

解決方法:Python找不到scribe模塊,需要把scribe package包含進來,如:

$exportPythonPATH=”/usr/lib/python2.6/site-packages/”

(3)Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/ hadoop/conf/Configuration

解決方法,將HadoopCLASSPATH加到環境變量中,如:

$export CLASSPATH=$HADOOP_HOME/hadoop-core-0.20.2+320.jar

參考資料 >

生活家百科家居網