Hadoop實戰讀書筆記(2)

若是是MapReduce如何實現一個WordCount的?node

MapReduce程序執行分爲兩個主要階段:爲mappingreducing,每一個階段均定義爲一個數據處理函數,分別被稱爲mapperreducershell

運行邏輯數據庫

mapping階段,MapReduce獲取輸入數據並將數據單元裝入mapperapache

reducing階段,reducer處理來自mapper的全部輸出,並給出最終結果。編程

簡而言之網絡

mapper意味着將輸入進行過濾與轉換,使reducer能夠完成聚合。架構

 

mappingreducingpartitioningshufflingHadoop都是什麼玩意?他們是如何的無縫的工做在一塊兒的?app

爲了使他們無縫的工做在一塊兒,咱們須要在通用結構上達成一致。負載均衡

 

MapReduce的數據原語是?框架

MapReduce使用列表和鍵/值對做爲其主要的數據原語,鍵與值一般爲整數或字符串,但也能夠是可忽略的假值,或者是複雜的對象類型。

 

mapreduce函數必須遵循如下對鍵和值類型的約束?

MapReduce框架中編寫應用程序就是定製化mapperreducer的過程。

完整的數據流是?


輸入

輸出

map

<k1, v1>

list(<k2, v2>)

reduce

<k2, list(v2)>

list(<k3, v3>)

1、應用的輸入必須爲一個鍵/值對的列表list(<k1, k2>)

用於處理多個文件的輸入格式一般爲list(<String filename, String file_content>)

用於處理日誌文件這種大文件輸入格式爲list(<Integer line_number, String log_event>)

2、含有鍵/值對的列表被拆分,進而經過調用mappermap函數對每一個單獨的鍵/值對<k1,v1>進行處理。在這裏,鍵k1常常被mapper所忽略。mapper轉換每一個<k1, v1>對並將之放入<k2, v2>對的列表中。這種轉換的細節很大程度上決定了MapReduce程序的行爲,值得注意的是,處理鍵/值對能夠採用任意的順序。並且,這種轉換必須是封閉的,使得輸出僅依賴於一個單獨的鍵/值對。

2進行解釋

       對於單詞統計,<String filename, String file_content>被輸入mapper,而其中的filename被忽略。mapper能夠輸出一個<String word, Integer count>的列表。咱們發現計數值將在後續階段聚合,是否能夠提早合併?好比不是輸出3<"foo", 1>而是輸出1<"foo", 3>,能夠看到,前者更容易編程,後者會得到性能上的優化。

3、全部的mapper的輸出 (在概念上) 被聚合到一個包含<k2, v2>對的巨大列表中。全部共享相同k2的對被組織在一塊兒造成一個新的鍵/值對<k2, list<v2>>。框架讓reducer來分別處理每個被聚合起來的<k2, list(v2)>

3進行解釋

       一個文檔的map輸出的列表中可能出現三次<"foo", 1>,而另外一個文檔的map輸出列表可能出現兩次<"foo", 1>reducer所看到的聚合的對爲<"foo", list(1, 1, 1, 1, 1)>。在單詞統計中,reducer的輸出爲<"foo", 5>,表示"foo"在文檔集合中總計出現的次數。每個reducer負責不一樣的單詞。MapReduce框架自動搜索全部的<k3, v3>並將之寫入文件。

 

基於MapReduce重寫單詞統計程序:

map(String filename, String document) {

       List<String> T = tokenize(document);

       for each token in T {

              emit((String)token, (Integer)1);

       }

}

reduce(String token, List<Integer> values) {

       Integer sum = 0;

       for each value in values {

              sum = sum + value;

       }

       emit((String)token, (Integer)sum)

}

 

Hadoop的開發平臺和生產平臺是什麼?

LinuxHadoop公認的開發和生產平臺。其餘,呵呵...

 

Hadoop須要Java支持?

固然,Java1.6或更高版本。

 

Hadoop 1.X的穩定版本是?

1.0.31.0.4目前我用過這兩個版本,2.X沒用過...

 

如何配置HadoopJava的鏈接,使得在運行hadoop時,它能夠自動找到Java組件?

$HADOOP_PREFIX/conf/hadoop-env.sh中, 輸入export JAVA_HOME=/...

爲何不用HADOOP_HOME,由於它廢棄了。

 

Hadoop腳本有哪些?

在不啓動hadoop時,也可使用該腳本。由於它是shell腳本。

bin目錄下,執行bin/hadoop獲得:

Usagehadoop [--config confdir] COMMAND


這裏COMMAND爲下列其中一個


namenode -format

格式化DFS文件系統

secondarynamenode

運行DFSsecondarynamenode

namenode

運行DFSnamenode

datanode

運行DFSdatanode

dfsadmin

運行DFSadmin客戶端

fsck

運行DFS的文件系統檢查工具

fs

運行普通文件系統用戶客戶端

balancer

集羣負載均衡工具

jobtracker

運行MapReducejobTracker節點

pipes

運行一個Pipes做業

tasktracker

運行MapReducetasktracker

job

處理MapReduce做業

version

打印版本

jar

運行一個jar文件

distcp <srcurl> <desturl>

遞歸地複製文件或者目錄

archive -archiveName NAME <src>*   <dest>

生成一個Hadoop檔案

daemonlogCLASSNAME

獲取或設置每一個daemonlog級別

運行名爲CLASSNAME的類大多數命令會在使用w/o參數時打出幫助信息

 

Hadoop歷史

LuceneNutchHadoop的關係

Hadoop開始時時Nutch的一個子項目,而Nutch又是Apache Lucene的一個子項目。這3個項目都是Doug Cutting所創立的,每一個項目在邏輯上都是前一個項目的演進。

Lucene是什麼?

Lucene是一個功能全面的文本索引和查詢庫。給定一個文本集合,開發者就可使用Lucene引擎方便地在文檔上添加搜索功能。桌面搜索、企業搜索,以及許多領域特定的搜索引擎使用都是Lucene

Nutch是什麼?

做爲Luncene的擴展,Nutch的目標可謂雄心勃勃,它試圖以Lucene爲核心創建一個完整的Web搜索引擎。NutchHTML提供瞭解析器,還具備網頁抓取工具、連接圖形數據庫和其餘網絡搜索引擎的額外組件。Doug Cutting所設想的Nutch是開放與民主的,能夠替代Google等商業產品的壟斷技術。

 

網絡搜索引擎與基本的文檔搜索引擎的區別是?

除了增長了像抓取器和解析器這樣的組件,他倆最大區別就在於規模。

 

Nutch團隊想要打破Google等商業產品的壟斷技術,都面臨哪些困難?

首先:Lucene的目標是索引數百萬的文檔,而Nutch應該可以處理十億的網頁,並且不能帶來過分的操做開銷,這在量級上已經不能相提並論。

其次:Nutch得運行在由商用硬件組成的分佈式集羣上,Nutch團隊面臨的挑戰是解決軟件可擴展性問題,即要在Nutch中創建一個層,來負責分佈式處理、冗餘、自動故障恢復和負載均衡。

以上這些挑戰絕非易事。

 

Doug Cutting此時在幹啥捏?

2004年左右,Google發表了兩篇論文來論述Google文件系統(GFS)MapReduce框架。Google稱使用了這兩項技術來擴展本身的搜索系統。Doug Cutting當即看到了這些技術能夠適用於Nutch,接着他的團隊實現了一個新的框架,將Nutch移植上去。這種新的實現立刻提高了Nutch可擴展性。它開始可以處理幾億個網頁,並可以運行在幾十個節點的集羣上。

Doug認識到設計一個專門的項目能夠充實兩種網絡擴展所需的技術,因而就有了Hadoop

 

雅虎挺給力哈。

雅虎在20061月聘請Doug,讓他和一個專項團隊一塊兒改進Hadoop,並將其做爲一個開源項目。兩年後Hadoop成爲Apache的頂級項目。後來,在2008219,雅虎宣佈其索引網頁的生產系統採用了在10000多個核的Linux集羣上運行的Hadoop

資源

Hadoop的官方網站:http://hadoop.apache.org/.

Google文件系統和MapReduce的原始論文很值得一讀,能夠了解它們的底層設計和架構:

The Google File System

MapReduce: Simplified Data Processing on Large Clusters

原本有連接,可是失效了。童鞋本身搜搜吧。

相關文章
相關標籤/搜索