玩了一下安裝實作大數據Big Data的一些工具軟體: Crawlzilla 與 Hadoop , ZooKeeper , Pig

大數據本身是個很寬泛的概念,Hadoop生態圈(或者泛生態圈)基本上都是為了處理超過單機尺度的數據處理而誕生的。你可以把它比作一個廚房所以需要的各種工具。鍋碗瓢盆,各有各的用處,互相之間又有重合。你可以用湯鍋直接當碗吃飯喝湯,你可以用小刀或者刨子去皮。但是每個工具有自己的特性,雖然奇怪的組合也能工作,但是未必是最佳選擇。大數據,首先你要能存的下大數據。傳統的文件系統是單機的,不能橫跨不同的機器。

HDFS(Hadoop Distributed FileSystem)的設計本質上是為了大量的數據能橫跨成百上千台機器,但是你看到的是一個文件系統而不是很多文件系統。比如你說我要獲取/hdfs/tmp/file1的數據,你引用的是一個文件路徑,但是實際的數據存放在很多不同的機器上。你作為用戶,不需要知道這些,就好比在單機上你不關心文件分散在什麼磁道什麼扇區一樣。

HDFS為你管理這些數據。存的下數據之後,你就開始考慮怎麼處理數據。雖然HDFS可以為你整體管理不同機器上的數據,但是這些數據太大了。一台機器讀取成T上P的數據(很大的數據哦,比如整個東京熱有史以來所有高清電影的大小甚至更大),一台機器慢慢跑也許需要好幾天甚至好幾週。

對於很多公司來說,單機處理是不可忍受的,比如微博要更新24小時熱博,它必須在24小時之內跑完這些處理。那麼我如果要用很多台機器處理,我就面臨瞭如何分配工作,如果一台機器掛瞭如何重新啟動相應的任務,機器之間如何互相通信交換數據以完成複雜的計算等等。這就是MapReduce / Tez / Spark的功能。

MapReduce是第一代計算引擎,Tez和Spark是第二代。 MapReduce的設計,採用了很簡化的計算模型,只有Map和Reduce兩個計算過程(中間用Shuffle串聯),用這個模型,已經可以處理大數據領域很大一部分問題了。那什麼是Map什麼是Reduce?考慮如果你要統計一個巨大的文本文件存儲在類似HDFS上,你想要知道這個文本里各個詞的出現頻率。你啟動了一個MapReduce程序。

Map階段,幾百台機器同時讀取這個文件的各個部分,分別把各自讀到的部分分別統計出詞頻,產生類似(hello, 12100次),(world,15214次)等等這樣的Pair(我這裡把Map和Combine放在一起說以便簡化);這幾百台機器各自都產生瞭如上的集合,然後又有幾百台機器啟動Reduce處理。

Reducer機器A將從Mapper機器收到所有以A開頭的統計結果,機器B將收到B開頭的詞彙統計結果(當然實際上不會真的以字母開頭做依據,而是用函數產生Hash值以避免數據串化。因為類似X開頭的詞肯定比其他要少得多,而你不希望數據處理各個機器的工作量相差懸殊)。然後這些Reducer將再次匯總,(hello,12100)+(hello,12311)+(hello,345881)= (hello,370292)。

HBase:

是一個高可靠性、高性能、面向列、可伸縮的分佈式存儲系統,利用HBase技術可在廉價PC Server上搭建起大規模結構化數據集群。像Facebook,都拿它做大型實時應用 Facebook’s New Realtime Analytics System: HBase to Process 20 Billion Events Per Day

Pig:

Yahoo開發的,並行地執行數據流處理的引擎,它包含了一種腳本語言,稱為Pig Latin,用來描述這些數據流。 Pig Latin本身提供了許多傳統的數據操作,同時允許用戶自己開發一些自定義函數用來讀取、處理和寫數據。在LinkedIn也是大量使用。

Hive:

Facebook領導的一個數據倉庫工具,可以將結構化的數據文件映射為一張數據庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapReduce任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapReduce統計。像一些data scientist 就可以直接查詢,不需要學習其他編程接口。

Cascading/Scalding:

Cascading是Twitter收購的一個公司技術,主要是提供數據管道的一些抽象接口,然後又推出了基於Cascading的Scala版本就叫Scalding。 Coursera是用Scalding作為MapReduce的編程接口放在Amazon的EMR運行。

Zookeeper:

一個分佈式的,開放源碼的分佈式應用程序協調服務,是Google的Chubby一個開源的實現。

Oozie:

一個基於工作流引擎的開源框架。由Cloudera公司貢獻給Apache的,它能夠提供對Hadoop MapReduce和Pig Jobs的任務調度與協調。

Azkaban:

跟上面很像,Linkedin開源的面向Hadoop的開源工作流系統,提供了類似於cron 的管理任務。

Tez:

Hortonworks主推的優化MapReduce執行引擎,與MapReduce相比較,Tez在性能方面更加出色。

Crawlzilla 安裝記錄

Crawlzilla 是一套簡易的搜尋引擎, 很好上手 因為幾乎是全自動安裝
介紹網站說明得很清楚 : https://code.google.com/p/crawlzilla/
簡易安裝PDF檔: http://crawlzilla.googlecode.com/svn-history/r334/trunk/docs/crawlzilla_Usage_zhtw.pdf

——–

於是我就開始玩弄Crawlzilla 了
但是我在安裝的時候, 發現我無法全自動安裝成功
原因不難發現…
我的JAVA的目錄位置與Crawlzilla安裝程式碼裡面的不同

由於Crawlzilla 是Hard Code寫死在 conf/ntuch_conf/hadoop-env.sh 約第9行

同時 hadoop-env.sh 也定義了許多會固定路徑:

改完後就可以安裝囉….
對了要先確認你的主機可以連上internel了~

以下為安裝過程:

附錄:HDFS Web Interface
HDFS exposes a web server which is capable of performing basic status monitoring and file browsing operations. By default this is exposed on port 50070 on the NameNode. Accessing http://namenode:50070/ with a web browser will return a page containing overview information about the health, capacity, and usage of the cluster (similar to the information returned by bin/hadoop dfsadmin -report).

The address and port where the web interface listens can be changed by setting dfs.http.address in conf/hadoop-site.xml. It must be of the form address:port. To accept requests on all addresses, use 0.0.0.0.

From this interface, you can browse HDFS itself with a basic file-browser interface. Each DataNode exposes its file browser interface on port 50075. You can override this by setting the dfs.datanode.http.address configuration key to a setting other than 0.0.0.0:50075. Log files generated by the Hadoop daemons can be accessed through this interface, which is useful for distributed debugging and troubleshooting.

Hadoop 單節點安裝記錄

參考了一些部落格的安裝過程, Hadoop 2.6.0单节点安装参考, hadoop 2.6.0单节点-伪分布式模式安装, 以及 Mac OSX 下 Hadoop 单节点集群配置 . Hadoop快速入门

這網站還有2014競賽的內容耶

1.我的環境:

OS: Ubuntu 12.04.1 LTS
Hadoop: 2.6.0
Java: jdk1.6.0_45

2.下載Hadoop
到這 apache的網站內hadoop部分, 去找出最新版下載吧, 我是使用2.6.0版本

3. 安裝Hadoop後, 直接進入hadoop-2.6.0目錄底下
編輯 etc/hadoop/hadoop-env.sh

但是為了確保以後每次登入linux主機, 都不用再重新設定 JAVA_HOME (參考)
請執行並修改你的 ~/.bashrc 檔案
(其實也可以寫到 /etc/profile 檔啦, 因為全體使用者環境變數設定檔位於 /etc/profile ,但只有 root 可以修改, 使用者登入後使用 BASH 的同時,第一時間會來執行 /etc/profile 這個檔案,,而才是個人的「~/.bashrc」( ~/.bash_profile, ~/.bash_login , ~/.profile 細節請 man bash)。 系統管理者可透過撰寫 /etc/profile 來提供使用者一個初始化的使用者環境設定, 如果 /etc/profile 與 .bashrc 兩者都寫的話, 會以最後設定得為主, 因為後者會蓋過前者!)

在最末行下加入:

4.測試一下, 如果有輸出help指示就OK

5. 編輯 etc/hadoop/core-site.xml:

6. 編輯etc/hadoop/hdfs-site.xml:

7.先配置成ssh若使用本機登入則免密碼

8.測試是否真的可以免密碼登入

9. 複製一份mapred-site.xml

10. 再编辑 etc/hadoop/mapred-site.xml:

11. 编辑etc/hadoop/yarn-site.xml:

12. 確認本機是否, 避免java.lang.RuntimeException: java.net.UnknownHostException: myhostname: myhostname
編輯 /etc/hosts

12.格式化HDFS的文件系统

13. 启动 NameNode 和 DataNode 守护进程
如果想以网页方式查看NameNode: http://localhost:50070/ http://0.0.0.0:50070/

14. 启动 ResourceManager和NodeManager守护进程
如果想以网页方式查看ResourceManager: http://localhost:8088/

15. 创建文件夹 input 並 list出來

16. 将要处理的文件复制到HDFS文件夹中 (參考)

17. 执行最经典的 wordcount 也算是hadoop中的hello word 了 (參考)

18. 运行一个MapReduce 任务

19. 執行 jps 看 processs
(如果找不到jps指令, 就把指令的路徑加入PATH吧 如: PATH=$PATH:/usr/lib/jvm/jdk1.6.0_45/bin/)
如果上面操作一切正确的话,通过”jps”命令查看是否包含ResourceManager、NodeManager、NameNode、SecondaryNameNode、DataNode等5个Java进程,参考如下:

20. 在分布式文件系统上查看输出文件:

21. 完成全部操作后,停止守护进程:

安裝設定 ZooKeeper

Apache ZooKeeper 是一個致力於開發與維護的開源伺服器( open-source server), 它能夠實現高度可靠的分佈式協調。

Zookeeper 作為Hadoop 項目中的一個子項目,是Hadoop 集群管理的一個必不可少的模塊,它主要用來控制集群中的數據,如它管理Hadoop 集群中的NameNode,還有Hbase 中Master Election、Server 之間狀態同步等。本文介紹的Zookeeper 的基本知識,以及介紹了幾個典型的應用場景。這些都是Zookeeper 的基本功能,最重要的是Zoopkeeper 提供了一套很好的分佈式集群管理的機制,就是它這種基於層次型的目錄樹的數據結構,並對樹中的節點進行有效管理,從而可以設計出多種多樣的分佈式的數據管理模型,而不僅僅局限於上面提到的幾個常用應用場景。(出處:分佈式服務框架Zookeeper — 管理分佈式環境中的數據)

1. 程式碼下載
老樣子, 找官方網站下載Apache ZooKeeper吧!

2. 解壓縮, 處理conf檔, 啟動

列出zoo.cfg供參考

3. 驗證方式1: 啟動後輸入指令jps 可以正常看到 QuorumPeerMain 的 Java Process

4. 驗證方式2: 可以快速確認是否 ZooKeeper is running (參考)
登入 ZooKeeper 主機並輸入指令: (請先確定Client Port為2181)
確認你有沒有接收到 imok 回應, 如果沒收到就表示 ZooKeeper is not running.

獲得更多資訊關於 Zookeeper

5.用Client端的程式去測試:

6. 停止服務

安裝HBase (單機安裝且可以與zookeeper互動)

就是Hadoop的資料庫 (安裝參考)
另外要注意Hadoop與HBase版本之間的support與否, 可以看這個地方, 裡面也有提到JDK版本與HBase支援關係! 這個很重要~~

1. 下載

2. 解壓縮 與 進入目錄

3. 編輯xml檔的設定
現在你已經可以啟動Hbase了。但是你可能需要先編輯 conf/hbase-site.xml 去配置hbase.rootdir,來選擇Hbase將數據寫到哪個目錄
單機配置,只需要如下配置 hbase-site.xml

將DIRECTORY 替換成你期望寫文件的目錄. 默認hbase.rootdir 是指向/tmp/hbase-${user.name} ,也就說你會在重啟後丟失數據(重啟的時候操作系統會清理/tmp目錄)

我則改成 /home/jamie/share/hadoop/tmp/hbase : (參考出處)

4. 編輯 .bashrc 設定 Hbase PATH 環境變數 :
其實也可以寫到 /etc/profile 檔啦, 因為全體使用者環境變數設定檔位於 /etc/profile ,但只有 root 可以修改, 使用者登入後使用 BASH 的同時,第一時間會來執行 /etc/profile 這個檔案,,而才是個人的「~/.bashrc」( ~/.bash_profile, ~/.bash_login , ~/.profile 細節請 man bash)。 系統管理者可透過撰寫 /etc/profile 來提供使用者一個初始化的使用者環境設定, 如果 /etc/profile 與 .bashrc 兩者都寫的話, 會以最後設定得為主, 因為後者會蓋過前者!

改玩重新執行一下 bashrc:

5. 啟動 HBase

現在你運行的是單機模式的Hbaes。所有的服務都運行在一個JVM上,包括HBase和Zookeeper。 HBase的日誌放在logs目錄,當你啟動出問題的時候,可以檢查這個日誌。

PS: 是否安裝了java ?
你需要確認安裝了Oracle的1.6 版本的java.如果你在命令行鍵入java有反應說明你安裝了Java。如果沒有裝,你需要先安裝,然後編輯 conf/hbase-env.sh,將其中的JAVA_HOME指向到你Java的安裝目錄。 (已在.bashrc檔設定)

6. 進入Hbase Shell模式:

操作幾個小指令: (參考出處)

安裝Pig

1. 下載吧, 找到apache pig網頁

2. 解壓縮

3. 再度編輯 .bashrc

4. 重新啟動界面後, 試試pig -help指令
如果有出現help說明就OK

據說pig有兩種模試: Local & MapReduce

5-1. 試試Local模式

5-2. 試試MapReduce模式
需要測定HADOOP_HOME的環境變數!
再度編輯 .bashrc

即可開啟mapReduce模式


下載Hadoop 程式碼(source code) 並編譯 (compile)

1. 程式碼下載
這裡有管理hadoop source code的github, “Download ZIP”可以直接下載程式碼

2. 安裝工具(@Ubuntu): 參考How to Contribute to Hadoop Common

3. 安裝JDK7
Installation of Oracle Java JDK 7 (which includes JRE, the Java browser plugin and JavaFX) to Ubuntu

4. 更新安装protoc至2.5.0版

5. 編譯 Build it. (參考)
Change directory to top level directory of extracted source where you will find pom.xml, which is build script in case of maven.

分類: 未分類

在〈玩了一下安裝實作大數據Big Data的一些工具軟體: Crawlzilla 與 Hadoop , ZooKeeper , Pig〉中有 2 則留言

  1. 陳政翰 回覆

    不好意思,我最近剛好也在裝Crawzilla但遇到了一些問題想要向您請教
    (1)請問在裝Crawlzilla之前您有安裝nutch和tomcat嗎?
    因為我在安裝時並沒有啟動tomcat的服務,所以在猜想是不是要另外先安裝tomcat和nutch。

    (2)安裝Crawlzilla的過程中並沒有讓我輸入unix password那一段,更沒有進入到之後hadoop的部分,因此在猜想是否hadoop路徑與conf/nutch_conf/hadoop-env.sh中的不同。想請問您有更改conf/nutch_conf/hadoop-env.sh中的路徑嗎?

    謝謝您

  2. 易春木 文章作者回覆

    1) Crawlzilla 我是直接裝耶, 要先確定連上網路喔! 我沒有先裝 nutch和tomcat
    2) 沒有改路徑

發表迴響