[[PageOutline]] = 如何安裝Hypertable = == 【Google Wiki】 == * [http://code.google.com/p/hypertable/wiki/SourceCode Get Source Code] * [http://code.google.com/p/hypertable/wiki/HowToInstall Build Source Code & Generate Documentation Tree] == 【安裝】 == * 安裝過程運行於Ubuntu作業系統,以下所列說明指令適用於Ubuntu的安裝方式,若使用者要安裝到其他作業平台環境,可以參考下列安裝項目並以通用該平台的安裝指令來取代之,接下來會說明編譯過程中的相關檔案存放位置,以及如何組態並編譯原始程式碼,最後再說明安裝方式及如何執行迴歸測試。 * Hypertable原始程式碼的存放路徑放置於: {{{ ~/src/hypertable }}} * 編譯過程中所產生的連結物件檔存放於: {{{ ~/build/hypertable }}} * 編譯完成的輸出執行檔存放路徑: {{{ ~/hypertable }}} === 【下載原始程式碼】 === * 要取得Hypertable原始碼需要先安裝[http://git.or.cz/ git]這套由google所提出的版本控制軟體,安裝指令如下: {{{ $ sudo apt-get install git-core }}} * 然後執行以下指令設定git所通行的使用者資訊,這一份使用者資訊原則上是由git這套版本控制軟體儲存,以及留作記錄程式碼被哪些使用者下載的一份參考來源,其設定使用者資訊方式如下: {{{ $ git config --global user.name "" $ git config --global user.email "" }}} * 使用git下載Hypertable原始碼之指令: {{{ $ git clone git://scm.hypertable.org/pub/repos/hypertable.git }}} * 更新已下載之Hypertable原始碼方式: {{{ $ cd ~/hypertable $ git pull }}} === 【如何設定編譯組態】 === * 在編譯Hypertable之前,需要先把編譯環境準備好,有一些編譯軟體要先安裝就序,以下條列出在Ubuntu環境下,各項編譯軟體的安裝指令: * 此套件在安裝C語言標準程式庫所需要的編譯環境,如果沒有安裝build-essential套件時可能會出現編譯階段找不到stdio.h這個引入檔案的位置,因此建議要先確認這項套件是否有安裝。 {{{ $ sudo apt-get install build-essential }}} * 在Hypertable會使用到一些資料壓縮與解壓縮功能,因此需要安裝 z library。 {{{ $ sudo apt-get install zlib1g-dev }}} * 安裝可跨平台的makefiles產生工具CMake,因此可以選擇編譯器及編譯環境來產生Hypertable的執行檔;根據官網公佈資訊,目前測試過可執行的平台仍以Linux/Unix為主,Windows平台仍在測試當中。 {{{ $ sudo apt-get install cmake }}} * 安裝Boost 程式庫1.34.1以上版本,這套程式庫為強化C++ Standard Library而設計,內含功能像是記憶體的Buffer處理,數學,Hash,MPI,圖形等等函式庫。 {{{ $ sudo apt-get install libboost.*-dev libboost-doc libboost.*1.34.1 }}} * 安裝log4cpp套件,此套件參考log4j而設計,故名思議是針對c++而設計的記錄日誌檔機制,在Hypertable裡的記錄檔案便是由此套記錄機制在處理Log功能。 {{{ $ sudo apt-get install liblog4cpp* }}} * 安裝expat套件,這個套件是一個XML處理程式庫,在Hypertable舉凡對於XML的存取都是引用這個套件來處理。 {{{ $ sudo apt-get install expat libexpat1 libexpat1-dev }}} * 安裝libattr套件,它是處理檔案的延伸屬性的程式庫。 {{{ $ sudo apt-get install libattr1 libattr1-dev }}} * 安裝readline套件,這份套件內含讀取terminal上的command line程式庫,在Hypertable裡面像是登入hql shell模式,或其他會需要讀取command line的情況會使用到這一類的功能。 {{{ $ sudo apt-get install libreadline5-dev }}} * 安裝ncurses,透過它可以撰寫terminal底下的文字模式介面程式,在Hypertable裡面像是登入hql shell模式,或需要模擬文字模式下的使用者介面,會使用到這一類的功能。 {{{ $ sudo apt-get install libncurses5 libncurses5-dev }}} * 安裝tcmalloc(Thread-Caching Malloc)套件,它是一個記憶體配置套件,可處理多執行緒情況下的記憶體回收之程式庫。 {{{ $ sudo apt-get install libgoogle-perftools0 libgoogle-perftools-dev }}} * 開始編譯程式前還需要建立安裝目錄,以及編譯後的物件檔案存放目錄 {{{ $ mkdir ~/src/hypertable $ mkdir -p ~/build/hypertable }}} * 執行CMake來產生編譯組態文件(makefiles),並指定編譯後的執行檔模式為偵錯模式(Debug)或發行模式(Release),以及安裝路徑,如果組態過程中出現找不到預設路徑下的Boost程式庫時,可以再指定其路徑,指令範例如下列所示,其中 -D代表定義某個變數的前置符號。 {{{ $ cmake -DCMAKE_INSTALL_PREFIX="~/hypertable" -DCMAKE_BUILD_TYPE="Debug" -DBoost_INCLUDE_DIR="/usr/include/boost" ~/src/hypertable }}} * 在產生編譯程式讀取的組態檔過程中,顯示結果加註說明如下: {{{ 組態過程... -- Looking for required boost libraries... 尋找boost程式庫當中... -- Boost include dir: /usr/include/boost 找到boost的header檔案路徑 -- Boost thread lib: /usr/lib/libboost_thread-mt.so 找到boost的多執行緒處理之動態程式庫 -- Boost program options lib: /usr/lib/libboost_program_options-mt.so 找到boost的程式參數處理之動態程式庫 -- Boost lib dir: /usr/lib 找到boost的動態程式庫存放路徑 -- Boost version: 1_34_1 顯示boost的版本資訊 -- Looking for doxygen... 尋找doxygen程式庫當中... -- Looking for doxygen... - found /usr/bin/doxygen 找到doxygen的執行程式路徑 -- Looking for dot tool... 尋找graphviz繪圖使用的dot套件 -- Looking for dot tool... - found /usr/bin/dot 找到dot的執行程式路徑 -- Found Tcmalloc: /usr/lib/libtcmalloc_minimal.so 找到tcmalloc的動態連結程式庫路徑 -- Got boost 1.34.x, prepend fix directory -- Configuring done -- Generating done -- Build files have been written to: ~/build/hypertable 組態完成後把編譯需要的設定檔放到指定路徑~/build/hypertable }}} === 【如何編譯與安裝】 === * 開始編譯之前,要先切換到編譯組態檔的存放路徑,根據上述組態預設路徑為~/build/hypertable,然後再執行編譯指令: {{{ $ cd ~/build/hypertable $ make }}} * 編譯之後的結果顯示如下: {{{ [ 6%] Built target HyperComm [ 10%] Built target HyperCommon [ 11%] Built target commTest [ 12%] Built target commTestDatagram [ 12%] Built target commTestReverseRequest [ 13%] Built target commTestTimeout [ 13%] Built target commTestTimer [ 13%] Built target sampleClient [ 14%] Built target testServer [ 14%] Built target htConvert [ 17%] Built target Hyperspace [ 33%] Built target Hypertable [ 42%] Built target HyperDfsBroker [ 50%] Built target Hyperspace.Master [ 56%] Built target Hypertable.Master [ 57%] Built target htgc [ 73%] Built target Hypertable.RangeServer [ 76%] Built target count_stored [ 79%] Built target csdump [ 79%] Built target bmz-test [ 79%] Built target bmzip [ 80%] Built target compressor_test [ 80%] Built target generate_test_data [ 80%] Built target loadDataSourceTest [ 81%] Built target locationCacheTest [ 81%] Built target schemaTest [ 85%] Built target dfsTest [ 88%] Built target dfsclient [ 94%] Built target hyperspace [ 94%] Built target hyperspaceTest [ 95%] Built target hypertable [ 95%] Built target hypertable_test [ 96%] Built target dumplog [ 96%] Built target merge_diff [ 97%] Built target rsTest [ 98%] Built target rsclient [ 99%] Built target rsdump [ 99%] Built target serverup [100%] Built target localBroker }}} * 安裝指令如下: {{{ $ make install DESTDIR="~/hypertable" }}} * 由於安裝過程較為繁雜,所以省略了其中一些步驟之後說明如下: {{{ 編譯過程省略.. [ 6%] Built target HyperComm ... ... [100%] Built target localBroker 連結程式過程.. Linking CXX executable CMakeFiles/CMakeRelink.dir/Hyperspace.Master Linking CXX executable CMakeFiles/CMakeRelink.dir/Hypertable.Master Linking CXX executable CMakeFiles/CMakeRelink.dir/htgc Linking CXX executable CMakeFiles/CMakeRelink.dir/Hypertable.RangeServer Linking CXX executable CMakeFiles/CMakeRelink.dir/count_stored Linking CXX executable CMakeFiles/CMakeRelink.dir/csdump Linking CXX executable CMakeFiles/CMakeRelink.dir/generate_test_data Linking CXX executable CMakeFiles/CMakeRelink.dir/dfsclient Linking CXX executable CMakeFiles/CMakeRelink.dir/hyperspace Linking CXX executable CMakeFiles/CMakeRelink.dir/hypertable Linking CXX executable CMakeFiles/CMakeRelink.dir/dumplog Linking CXX executable CMakeFiles/CMakeRelink.dir/merge_diff Linking CXX executable CMakeFiles/CMakeRelink.dir/rsclient Linking CXX executable CMakeFiles/CMakeRelink.dir/rsdump Linking CXX executable CMakeFiles/CMakeRelink.dir/serverup Linking CXX executable CmakeFiles/CMakeRelink.dir/localBroker 安裝程式過程,部份內容省略未列出,僅列出整理排列後之內容.. Install the project... -- Install configuration: "Debug" 安裝設定檔.. -- Installing ~/hypertable/0.9.0.5/conf/hypertable.cfg -- Installing ~/hypertable/0.9.0.5/conf/METADATA.xml 安裝引用檔案及應用範例程式及測試資料庫內容(省略).. 安裝Java及C/C++程式庫.. -- Installing ~/hypertable/0.9.0.5/java/lib/commons-logging-1.0.4.jar -- Installing ~/hypertable/0.9.0.5/java/lib/hadoop-0.14.4-core.jar -- Installing ~/hypertable/0.9.0.5/java/lib/junit-4.3.1.jar -- Installing ~/hypertable/0.9.0.5/java/lib/log4j-1.2.13.jar -- Installing ~/hypertable/0.9.0.5/java/lib/hypertable-0.9.0.jar -- Installing ~/hypertable/0.9.0.5/lib/libHyperComm.a -- Installing ~/hypertable/0.9.0.5/lib/libHyperCommon.a -- Installing ~/hypertable/0.9.0.5/lib/libHyperspace.a -- Installing ~/hypertable/0.9.0.5/lib/libHypertable.a -- Installing ~/hypertable/0.9.0.5/lib/libHyperDfsBroker.a 安裝可執行程式.. -- Installing ~/hypertable/0.9.0.5/bin/jrun -- Installing ~/hypertable/0.9.0.5/bin/start-all-servers.sh -- Installing ~/hypertable/0.9.0.5/bin/start-master.sh -- Installing ~/hypertable/0.9.0.5/bin/start-range-server.sh -- Installing ~/hypertable/0.9.0.5/bin/kill-servers.sh -- Installing ~/hypertable/0.9.0.5/bin/slaves.sh -- Installing ~/hypertable/0.9.0.5/bin/Hyperspace.Master -- Installing ~/hypertable/0.9.0.5/bin/Hypertable.Master -- Installing ~/hypertable/0.9.0.5/bin/htgc -- Installing ~/hypertable/0.9.0.5/bin/Hypertable.RangeServer -- Installing ~/hypertable/0.9.0.5/bin/csdump -- Installing ~/hypertable/0.9.0.5/bin/count_stored -- Installing ~/hypertable/0.9.0.5/bin/generate_test_data -- Installing ~/hypertable/0.9.0.5/bin/dfsclient -- Installing ~/hypertable/0.9.0.5/bin/hyperspace -- Installing ~/hypertable/0.9.0.5/bin/hypertable -- Installing ~/hypertable/0.9.0.5/bin/dumplog -- Installing ~/hypertable/0.9.0.5/bin/merge_diff -- Installing ~/hypertable/0.9.0.5/bin/rsclient -- Installing ~/hypertable/0.9.0.5/bin/rsdump -- Installing ~/hypertable/0.9.0.5/bin/serverup -- Installing ~/hypertable/0.9.0.5/bin/localBroker }}} === 【由原始程式碼建立程式說明文件】 === * 要由原始程式碼產生文件資料,需要再額外安裝2個套件,分別為Doxygen及Graphviz,第1個套件是產生類別,屬性及函式功能說明文件之文件產生器程式庫,可協助程式設計者將特定格式之註解裡的說明文件導出,產生說明文件,目前Doxygen支援的程式語言包含C++/C/Java/Object-C/Python/IDL/Fortran/VHDL/PHP/C#等程式語言;另一個套件Graphviz可以將指定格式的結構化資訊,轉換為抽象圖形或網路圖形,在Doxygen套件裡的圖形處理,是引用這個套件來產生類別階層圖。[[BR]]產生說明文件的方式,只要將目錄切換到組態設定檔路徑,然後執行Make指令後可以自動產生文件: {{{ $ cd ~/build/hypertable $ make doc }}} * 文件產生後放置路徑為~/build/hypertable/doc ,文件首頁放置路徑為: {{{ $ ~/build/hypertable/doc/html/index.html }}} === 【執行迴歸測試】 === * 執行程式部署完成之後,還需要再進一步設定Hypertable掛載的磁碟分割區,開啟檔案的延伸屬性功能,然後重新啟動Hypertable之後才算完成安裝步驟。當Hypertable使用的磁碟磁區是本機硬碟空間,並且作業系統為Windows/Linux/Unix,才會需要特別再修改/etc/fstab設定檔,增加user_xattr屬性;若是作業系統為Mac OS或是使用Hadoop File System(HDFS)/Kosmos File System(KFS),則會內建有延伸屬性功能,不用再去修改檔案系統。 * 修改/etc/fstab前的內容範本: {{{ $ /dev/sda1 ext3 defaults,errors=remount-ro 0 1 }}} * 修改/etc/fstab後的內容範本: {{{ $ /dev/sda1 ext3 defaults,user_xattr,errors=remount-ro 0 1 }}} * 不用關機並重新掛載磁碟空間的方法: {{{ $ sudo mount -o remount /home }}} * 重新啟動Hypertable方式是先關閉所有的伺服器,然後再開啟,指令如下: {{{ 切換到執行檔案路徑 $ cd ~/hypertable/0.9.0.5/bin 關閉Server $ ./kill-servers.sh 使用本機端磁碟空間的開啟方式 $ ./start-all-servers.sh local }}} * 啟動所有伺服器的指令格式如下: {{{ Usage: start-test-servers.sh [local|hadoop|kosmos] }}} * 運行迴歸測試之指令及結果如下: {{{ $ make test Running tests... Start processing tests Test project /home/sunny/build/hypertable 1/ 17 Testing HyperComm Passed 2/ 17 Testing HyperComm-datagram Passed 3/ 17 Testing HyperComm-timeout Passed 4/ 17 Testing HyperComm-timer Passed 5/ 17 Testing HyperComm-reverse-request Passed 6/ 17 Testing Schema Passed 7/ 17 Testing LocationCache Passed 8/ 17 Testing LoadDataSource Passed 9/ 17 Testing BlockCompressor-BMZ Passed 10/ 17 Testing BlockCompressor-LZO Passed 11/ 17 Testing BlockCompressor-NONE Passed 12/ 17 Testing BlockCompressor-QUICKLZ Passed 13/ 17 Testing BlockCompressor-ZLIB Passed 14/ 17 Testing HyperDfsBroker Passed 15/ 17 Testing Hyperspace Passed 16/ 17 Testing hypertable Passed 17/ 17 Testing RangeServer Passed 100% tests passed, 0 tests failed out of 17 }}} === 【組態設定說明】 === * 系統組態預設的存放位置為安裝路徑的conf目錄底下: {{{ ~/hypertable/0.9.0.5/conf/hypertable.cfg }}} * 這個組態檔可提供使用者設定3種檔案系統的橋接程式 (DfsBroker)之位址與通訊埠等等資訊,以及Hyperspace與Hypertable的Master伺服器資訊,和Hypertable的Range Server資訊,換言之,這些可設定的伺服器位址可以不限定在同一台機器上,它們可以各別存在於不同台機器上運作,除了Hyperspace與Hypertable的Master伺服器同一時間只允許互動運作一個執行個體之外,Range Server與DfsBroker是可以多個執行個體同時互動執行的,所以啟動Hypertable服務的機器,都會先確認過DfsBroker是否運作正常,Hyperspace與Hypertable的Master是否啟動成功,然後再啟動本機的Range Server;單機版的Hypertable會同時啟動Hyperspace+Master+Range Server+Local DfsBroker在同一台機器上,多機版的Hypertable則可以把這4種服務分散在不同台機器上。 * 預設的設定檔內容如下: {{{ # # hypertable.cfg # # Global properties # Hypertable的等待連線時間 Hypertable.Request.Timeout=180 # HDFS Broker服務的相關設定 HdfsBroker.Port=38030 HdfsBroker.fs.default.name=hdfs://localhost:9000 HdfsBroker.Workers=20 # Local DFS Broker 服務的相關設定 DfsBroker.Local.Port=38030 DfsBroker.Local.Root=fs/local # DFS Broker 給用戶端的相關設定 DfsBroker.Host=localhost DfsBroker.Port=38030 # Hyperspace 的相關設定 Hyperspace.Master.Host=localhost Hyperspace.Master.Port=38040 Hyperspace.Master.Dir=hyperspace Hyperspace.Master.Workers=20 # Hypertable.Master 的相關設定 Hypertable.Master.Host=localhost Hypertable.Master.Port=38050 Hypertable.Master.Workers=20 # Hypertable.RangeServer 的相關設定 Hypertable.RangeServer.Port=38060 }}} === 【參考來源】 === 1. [http://code.google.com/p/hypertable/wiki/HypertableOverview 系統概觀] [[BR]] 2. [http://code.google.com/p/hypertable/wiki/ArchitecturalOverview 系統架構說明] [[BR]] 3. [http://code.google.com/p/hypertable/wiki/HowHypertableWorks 運作方式說明] [[BR]] 4. [http://code.google.com/p/hypertable/wiki/SourceCode 原始程式碼取得說明] [[BR]] 5. [http://code.google.com/p/hypertable/wiki/HowToInstall 安裝說明] [[BR]] 6. [http://labs.google.com/papers/bigtable-osdi06.pdf Bigtable 結構化數據的分佈存儲系統] [[BR]] 7. [http://code.google.com/p/hypertable/wiki/HQLTutorial Hypertable Query Language教學手冊] [[BR]] 8. [http://code.google.com/p/hypertable/wiki/ConfigPropetiesReference 組態設定手冊] [[BR]] 9. [http://code.google.com/p/hypertable/wiki/ReleaseSystemTests 系統測試步驟說明] [[BR]] 10. [http://code.google.com/p/hypertable/wiki/PerformanceTestAOLQueryLog 效能測試] [[BR]] 11. [http://code.google.com/p/hypertable/wiki/KnownDeficiencies 已知的弱點說明]