Nutch+Hadoop集群搭建

fmms 12年前發布 | 170K 次閱讀 Hadoop 搜索引擎 nutch

1、Apache Nutch

   Apache Nutch是一個用于網絡搜索的開源框架,它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。

1.1、Nutch的組件結構

Nutch+Hadoop集群搭建

WebDB:存儲網頁數據和連接信息

Fetch lists:將WebDB所存儲的連接分成多個組,來用于分布式檢索

Fetchers:檢索Fetch list中的內容并下載到本地,共有兩項輸出:分別是連接的update

信息和內容content

Updates:更新WebDB的頁面檢索狀態

WebDB、updates、fetch lists和fetchers組成循環結構,不斷運行下去,來確保所得到的Web鏡像是最新的

Content:界面內容,獲取內容之后,Nutch便可以根據它來創建索引并執行查詢操作

Indexers:對目標Content創建索引,當索引內容較大時,可把索引劃分成多個索引片段,然后分配給不同的seracher實現并行檢索

Searchers:實現查詢功能的同時也會緩存content

Webservers:有兩種角色:

1處理用戶的交互請求(Nutch Search Client)

2從searchers中獲取查詢結果(HTTP Server)

注:fetchers和searchers兩個節點所對應的操作可放到分布式環境(hadoop)中去完成

創建索引及查詢的操作可通過solr框架來實現

1.2、Nutch的數據結構:

Nutch數據包含3個目錄結構,分別是:

1、Crawldb:用于存儲Nutch將要檢索的url信息,以及檢索狀態(是否檢索、何時檢索)

2、Linkdb:用于存儲每一個url所包含的超鏈接信息(包括錨點)

3、Segments:一組url的集合,他們作為一個檢索單元,可用于分布式檢索

Segment目錄包含以下子目錄信息:

(1)   crawl_generate:定義將要檢索的url集合(文件類型為SequenceFile)

(2)   crawl_fetch:存儲每一個url的檢索狀態(文件類型為MapFile)

(3)   content:存儲每一個url所對應的二進制字節流(文件類型為MapFile)

(4)   parse_text:存儲每一個url所解析出的文本內容(文件類型為MapFile)

(5)   parse_data:存儲每一個url所解析出的元數據(文件類型為MapFile)

(6)   crawl_parse:用于及時更新crawldb中的內容(如要檢索的url已不存在等情況)--文件類型為SequenceFile

注:結合Nutch的數據結構和組件結構來看,crawldb相當于WebDB,而segment相當于是fetchlists.

分布式crawl過程中,每個MapReduce Job都會生成一個segment,名稱以時間來命名

2、Apache Hadoop

       Nutch的單機采集(local方式)并不復雜,然而當所采集的數據源較大時,一臺機器難以滿足性能上的需求,因此通常的做法是將Nutch集成到Hadoop環境中以完成分布式采集和分布式查詢的效果(deploy方式)。

       Hadoop框架在功能劃分上包含3個子框架,分別是:

       MapReduce:用于分布式并行計算

       HDFS:用于分布式存儲

       Common:封裝HDFS和MapReduce所需要的實用類

2.1、MapReduce工作流程

Nutch+Hadoop集群搭建

1.將輸入源(Inputfiles)切割成不同的片段,每個片段的大小通常在16M-64M之間(可通過參數配置),然后啟動云端程序。

2.MapReduce程序基于master/slaves方式部署,在云端機器中選中一臺機器運行master程序,職責包括:調度任務分配給slaves,監聽任務的執行情況。

3.在圖形中,slave的體現形式為worker,當worker接到Map任務時,會讀取輸入源片段,從中解析出Key/Value鍵值對,并作為參數傳遞到用戶自定義的Map功能函數之中,Map功能函數的輸出值同樣為Key/Value鍵值對,這些鍵值對會臨時緩存在內存里面。

4.緩存之后,程序會定期將緩存的鍵值對寫入本地硬盤(執行如圖所示的local write操作),并且把存儲地址傳回給master,以便master記錄它們的位置用以執行Reduce操作。

5.當worker被通知執行Reduce操作時,master會把相應的Map輸出數據所存儲的地址也發送給該worker,以便其通過遠程調用來獲取這些數據。得到這些數據之后,reduce worker會把具有相同Key值的記錄組織到一起來達到排序的效果。

6.Reduce Worker會把排序后的數據作為參數傳遞到用戶自定義的Reduce功能函數之中,而函數的輸出結果會持久化存儲到output file中去。

7.當所有的Map任務和Reduce任務結束之后,Master會重新喚醒用戶主程序,至此,一次MapReduce操作調用完成。

2.2、HDFS組件結構

Nutch+Hadoop集群搭建

同MapReduce部署結構類似,HDFS同樣具備master/slaves主仆結構

1.如圖所示中,NameNode充當master角色,職責包括:管理文檔系統的命名空間(namespace);調節客戶端訪問到需要的文件(存儲在DateNode中的文件)

注:namespace—映射文件系統的目錄結構

2.DataNodes充當slaves角色,通常情況下,一臺機器只部署一個Datenode,用來存儲MapReduce程序需要的數據

Namenode會定期從DataNodes那里收到Heartbeat和Blockreport反饋

Heartbeat反饋用來確保DataNode沒有出現功能異常;

Blockreport包含DataNode所存儲的Block集合

2.3、hadoop資源

1 http://wiki.apache.org/nutch/NutchHadoopTutorial基于Nutch和Hadoop完成分布式采集和分布式查詢


3、環境搭建

3.1、需要準備

       3.1.1兩臺或以上Linux機器(這里假定為兩臺)

        一臺機器名稱設置為master,另一臺設置為slave01,兩臺機器具有相同的登錄用戶名nutch,并且將兩臺機器的etc/hosts文件設置成相同的內容,如:
       192.168.7.11          master

       192.168.7.12         slave01

        ……

       這樣,便可以通過主機名找到對應的機器

       3.1.2搭建ssh環境

       ssh的安裝可通過如下命令完成:

       $ sudo apt-get install ssh

       $ sudo apt-get install rsync

       3.1.3安裝JDK

       $ apt-get install openjdk-6-jdkopenjdk-6-jre

       3.1.4下載最近版本的hadoop和nutch

              下載地址:

              Hadoop: http://www.apache.org/dyn/closer.cgi/hadoop/common/

              Nutch: http://www.apache.org/dyn/closer.cgi/nutch/

3.2、搭建配置

       3.2.1SSH登錄配置

       (1)在master機器上通過以下命令生成證書文件authorized_keys

       $ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
       $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

       (2)將證書文件復制到其他機器的用戶主目錄下

       $scp /home/nutch/.ssh authorized_keys nutch@slave01:/home/nutch/.ssh/authorized_keys

       通過以上兩步操作,master機器便可以在不需要密碼的情況下ssh到slave01機器上

       3.2.2HADOOP配置

       同ssh登錄證書的配置類似,HADOOP配置同樣是在master機器上完成,然后在復制到slave機器上,確保每一臺機器的hadoop環境相同

       $HADOOP_HOME/conf目錄下:

       (1)hadoop-env.sh文件

        export HADOOP_HOME=/PATH/TO/HADOOP_HOME
        export JAVA_HOME=/PATH/TO/JDK_HOME
        export HADOOP_LOG_DIR=${HADOOP_HOME}/logs

       (2)core-site.xml文件

        <configuration>
           <property>
               <name>fs.default.name</name>
               <value>hdfs://master:9000</value>
           </property>
        </configuration>

       (3)hdfs-site.xml文件

        <configuration>
            <property>
                <name>dfs.name.dir</name>
               <value>/nutch/filesystem/name</value>
           </property>
            <property>
               <name>dfs.data.dir</name>
                <value>/nutch/filesystem/data</value>
            </property>
            <property>
               <name>dfs.replication</name>
               <value>1</value>
            </property>
        </configuration>

       (4)mapred-site.xml文件

       <configuration>
            <property>
               <name>mapred.job.tracker</name>
                <value>master:9001</value>
           </property>
           <property> 
               <name>mapred.map.tasks</name>
               <value>2</value>
           </property> 
           <property> 
               <name>mapred.reduce.tasks</name>
               <value>2</value>
           </property> 
           <property>
               <name>mapred.system.dir</name>
               <value>/nutch/filesystem/mapreduce/system</value>
           </property>
           <property>
               <name>mapred.local.dir</name>
               <value>/nutch/filesystem/mapreduce/local</value>
           </property>
      </configuration>
     (5)masters和slaves配置
     將相應的機器IP加到對應的配置文件中去
    3.2.3 Nutch配置
     $NUTCH_HOME/conf目錄下
      (1)nutch-site.xml文件
      <property>
               <name>http.agent.name</name>
               <value>Nutch Spider</value>
      </property>
      (2)regex-urlfilter.txt
      添加需要檢索的url
      +^http://([a-z0-9]*\.)*nutch.apache.org/
       (3)將修改后的文件放到NUTCH_HOME/runtime/deploy/nutch-*.job中

3.3、啟動運行

   3.3.1 啟動Hadoop

       1.格式化namenode節點

       bin/hadoop namenode –format

       2.啟動hadoop進程

       bin/start-all.sh

       啟動成功后,可通過如下url查看NameNode和MapReduce運行狀態

       NameNode: http://master:50070/

       MapReduce: http://master:50030/

       3.向hdfs放入測試數據

       $ bin/hadoop fs -put conf input

       4.執行測試

       $ bin/hadoop jar hadoop-examples-*.jar grep input output'dfs[a-z.]+'

       5.關閉hadoop進程

       bin/stop-all.sh

   3.3.2 運行Nutch

       1啟動前提:

       (1).hadoop已成功啟動

       (2).將HADOOP_HOME/bin路徑添加到環境變量中,以便Nutch找到hadoop命令

        通過修改/etc/enviroment配置文件實現

       (3)在控制臺執行export JAVA_HOME=/PATH/TO/JAVA命令

    2向HDFS中存入待檢索數據
    $ bin/hadoop fs -put urldir urldir
    注:第一個urldir為本地文件夾,存放了url數據文件,每行一個url
    第二個urldir為HDFS的存儲路徑
    3啟動nutch命令
    在NUTCH_HONE/runtime/deploy目錄下執行以下命令
    $ bin/nutch crawl urldir –dir crawl -depth 3 –topN 10
    命令成功執行后,會在HDFS中生成crawl目錄
    注:一定要在deploy目錄下執行該命令,在local目錄下執行的是單機采集,而沒有使用hadoop環境
 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!