Nutch+Hadoop集群搭建
轉(zhuǎn)載自:http://www.open-open.com/lib/view/open1328670771405.html
1、Apache Nutch
?? Apache Nutch是一個用于網(wǎng)絡(luò)搜索的開源框架,它提供了我們運行自己的搜索引擎所需的全部工具,包括全文搜索和Web爬蟲。
1.1、Nutch的組件結(jié)構(gòu)
WebDB:存儲網(wǎng)頁數(shù)據(jù)和連接信息
Fetch lists:將WebDB所存儲的連接分成多個組,來用于分布式檢索
Fetchers:檢索Fetch list中的內(nèi)容并下載到本地,共有兩項輸出:分別是連接的update
信息和內(nèi)容content
Updates:更新WebDB的頁面檢索狀態(tài)
WebDB、updates、fetch lists和fetchers組成循環(huán)結(jié)構(gòu),不斷運行下去,來確保所得到的Web鏡像是最新的
Content:界面內(nèi)容,獲取內(nèi)容之后,Nutch便可以根據(jù)它來創(chuàng)建索引并執(zhí)行查詢操作
Indexers:對目標(biāo)Content創(chuàng)建索引,當(dāng)索引內(nèi)容較大時,可把索引劃分成多個索引片段,然后分配給不同的seracher實現(xiàn)并行檢索
Searchers:實現(xiàn)查詢功能的同時也會緩存content
Webservers:有兩種角色:
1處理用戶的交互請求(Nutch Search Client)
2從searchers中獲取查詢結(jié)果(HTTP Server)注:fetchers和searchers兩個節(jié)點所對應(yīng)的操作可放到分布式環(huán)境(hadoop)中去完成
創(chuàng)建索引及查詢的操作可通過solr框架來實現(xiàn)
1.2、Nutch的數(shù)據(jù)結(jié)構(gòu):
Nutch數(shù)據(jù)包含3個目錄結(jié)構(gòu),分別是:
1、Crawldb:用于存儲Nutch將要檢索的url信息,以及檢索狀態(tài)(是否檢索、何時檢索)
2、Linkdb:用于存儲每一個url所包含的超鏈接信息(包括錨點)
3、Segments:一組url的集合,他們作為一個檢索單元,可用于分布式檢索
Segment目錄包含以下子目錄信息:
(1)???crawl_generate:定義將要檢索的url集合(文件類型為SequenceFile)
(2)???crawl_fetch:存儲每一個url的檢索狀態(tài)(文件類型為MapFile)
(3)???content:存儲每一個url所對應(yīng)的二進(jìn)制字節(jié)流(文件類型為MapFile)
(4)???parse_text:存儲每一個url所解析出的文本內(nèi)容(文件類型為MapFile)
(5)???parse_data:存儲每一個url所解析出的元數(shù)據(jù)(文件類型為MapFile)
(6)???crawl_parse:用于及時更新crawldb中的內(nèi)容(如要檢索的url已不存在等情況)--文件類型為SequenceFile
注:結(jié)合Nutch的數(shù)據(jù)結(jié)構(gòu)和組件結(jié)構(gòu)來看,crawldb相當(dāng)于WebDB,而segment相當(dāng)于是fetchlists.
分布式crawl過程中,每個MapReduce Job都會生成一個segment,名稱以時間來命名
2、Apache Hadoop
?????? Nutch的單機采集(local方式)并不復(fù)雜,然而當(dāng)所采集的數(shù)據(jù)源較大時,一臺機器難以滿足性能上的需求,因此通常的做法是將Nutch集成到Hadoop環(huán)境中以完成分布式采集和分布式查詢的效果(deploy方式)。
?????? Hadoop框架在功能劃分上包含3個子框架,分別是:
?????? MapReduce:用于分布式并行計算
?????? HDFS:用于分布式存儲
?????? Common:封裝HDFS和MapReduce所需要的實用類
2.1、MapReduce工作流程
1.將輸入源(Inputfiles)切割成不同的片段,每個片段的大小通常在16M-64M之間(可通過參數(shù)配置),然后啟動云端程序。
2.MapReduce程序基于master/slaves方式部署,在云端機器中選中一臺機器運行master程序,職責(zé)包括:調(diào)度任務(wù)分配給slaves,監(jiān)聽任務(wù)的執(zhí)行情況。
3.在圖形中,slave的體現(xiàn)形式為worker,當(dāng)worker接到Map任務(wù)時,會讀取輸入源片段,從中解析出Key/Value鍵值對,并作為參數(shù)傳遞到用戶自定義的Map功能函數(shù)之中,Map功能函數(shù)的輸出值同樣為Key/Value鍵值對,這些鍵值對會臨時緩存在內(nèi)存里面。
4.緩存之后,程序會定期將緩存的鍵值對寫入本地硬盤(執(zhí)行如圖所示的local write操作),并且把存儲地址傳回給master,以便master記錄它們的位置用以執(zhí)行Reduce操作。
5.當(dāng)worker被通知執(zhí)行Reduce操作時,master會把相應(yīng)的Map輸出數(shù)據(jù)所存儲的地址也發(fā)送給該worker,以便其通過遠(yuǎn)程調(diào)用來獲取這些數(shù)據(jù)。得到這些數(shù)據(jù)之后,reduce worker會把具有相同Key值的記錄組織到一起來達(dá)到排序的效果。
6.Reduce Worker會把排序后的數(shù)據(jù)作為參數(shù)傳遞到用戶自定義的Reduce功能函數(shù)之中,而函數(shù)的輸出結(jié)果會持久化存儲到output file中去。
7.當(dāng)所有的Map任務(wù)和Reduce任務(wù)結(jié)束之后,Master會重新喚醒用戶主程序,至此,一次MapReduce操作調(diào)用完成。
2.2、HDFS組件結(jié)構(gòu)
同MapReduce部署結(jié)構(gòu)類似,HDFS同樣具備master/slaves主仆結(jié)構(gòu)
1.如圖所示中,NameNode充當(dāng)master角色,職責(zé)包括:管理文檔系統(tǒng)的命名空間(namespace);調(diào)節(jié)客戶端訪問到需要的文件(存儲在DateNode中的文件)
注:namespace—映射文件系統(tǒng)的目錄結(jié)構(gòu)
2.DataNodes充當(dāng)slaves角色,通常情況下,一臺機器只部署一個Datenode,用來存儲MapReduce程序需要的數(shù)據(jù)
Namenode會定期從DataNodes那里收到Heartbeat和Blockreport反饋
Heartbeat反饋用來確保DataNode沒有出現(xiàn)功能異常;
Blockreport包含DataNode所存儲的Block集合
2.3、hadoop資源
1 http://wiki.apache.org/nutch/NutchHadoopTutorial基于Nutch和Hadoop完成分布式采集和分布式查詢
3、環(huán)境搭建
3.1、需要準(zhǔn)備
?????? 3.1.1兩臺或以上Linux機器(這里假定為兩臺)
??????? 一臺機器名稱設(shè)置為master,另一臺設(shè)置為slave01,兩臺機器具有相同的登錄用戶名nutch,并且將兩臺機器的etc/hosts文件設(shè)置成相同的內(nèi)容,如:
?????? 192.168.7.11????????? master
?????? 192.168.7.12???????? slave01
??????? ……
?????? 這樣,便可以通過主機名找到對應(yīng)的機器
?????? 3.1.2搭建ssh環(huán)境
?????? 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)將證書文件復(fù)制到其他機器的用戶主目錄下
?????? $scp /home/nutch/.ssh authorized_keys nutch@slave01:/home/nutch/.ssh/authorized_keys
?????? 通過以上兩步操作,master機器便可以在不需要密碼的情況下ssh到slave01機器上
?????? 3.2.2HADOOP配置
?????? 同ssh登錄證書的配置類似,HADOOP配置同樣是在master機器上完成,然后在復(fù)制到slave機器上,確保每一臺機器的hadoop環(huán)境相同
?????? $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配置 ???? 將相應(yīng)的機器IP加到對應(yīng)的配置文件中去 ??? 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節(jié)點
?????? bin/hadoop namenode –format
?????? 2.啟動hadoop進(jìn)程
?????? bin/start-all.sh
?????? 啟動成功后,可通過如下url查看NameNode和MapReduce運行狀態(tài)
?????? NameNode: http://master:50070/
?????? MapReduce: http://master:50030/
?????? 3.向hdfs放入測試數(shù)據(jù)
?????? $ bin/hadoop fs -put conf input
?????? 4.執(zhí)行測試
?????? $ bin/hadoop jar hadoop-examples-*.jar grep input output'dfs[a-z.]+'
?????? 5.關(guān)閉hadoop進(jìn)程
?????? bin/stop-all.sh
?? 3.3.2 運行Nutch?????? 1啟動前提:
?????? (1).hadoop已成功啟動
?????? (2).將HADOOP_HOME/bin路徑添加到環(huán)境變量中,以便Nutch找到hadoop命令
??????? 通過修改/etc/enviroment配置文件實現(xiàn)
?????? (3)在控制臺執(zhí)行export JAVA_HOME=/PATH/TO/JAVA命令
??? 2向HDFS中存入待檢索數(shù)據(jù) ??? $ bin/hadoop fs -put urldir urldir ??? 注:第一個urldir為本地文件夾,存放了url數(shù)據(jù)文件,每行一個url ??? 第二個urldir為HDFS的存儲路徑 ??? 3啟動nutch命令 ??? 在NUTCH_HONE/runtime/deploy目錄下執(zhí)行以下命令 ??? $ bin/nutch crawl urldir –dir crawl -depth 3 –topN 10 ??? 命令成功執(zhí)行后,會在HDFS中生成crawl目錄 ??? 注:一定要在deploy目錄下執(zhí)行該命令,在local目錄下執(zhí)行的是單機采集,而沒有使用hadoop環(huán)境總結(jié)
以上是生活随笔為你收集整理的Nutch+Hadoop集群搭建的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Nutch基础教程之七】Nutch的2
- 下一篇: hadoop配置文件的加载机制