nutch2.3.一、solr4.10.四、hadoop2.5.二、hbase0.98.19集成

nutchhtml

1.nutch的相關介紹

1.1 什麼是nutch?

    Nutch 是一個開源Java實現的搜索引擎。它提供了咱們運行本身的搜索引擎所需的所有工具。包括全文搜索和Web爬蟲。Nutch爲咱們提供了這樣一個不一樣的選擇. 相對於那些商用的搜索引擎, Nutch做爲開放源代碼 搜索引擎將會更加透明, 從而更值得你們信賴.   Nutch的創始人是Doug Cutting,他同時也是Lucene、Hadoop和Avro開源項目的創始人。java

    Nutch誕生於2002年8月,是Apache旗下的一個用Java實現的開源搜索引擎項目,自Nutch1.2版本以後,Nutch已經從搜索引擎演化爲網絡爬蟲,接着Nutch進一步演化爲兩大分支版本:1.X和2.X,這兩大分支最大的區別在於2.X對底層的數據存儲進行了抽象以支持各類底層存儲技術。node

    1.x版本是基於Hadoop架構的,底層存儲使用的是HDFS(Hadoop實現了一個分佈式文件系統(Hadoop Distributed File System),簡稱HDFS。),而2.x經過使用Apache Gora(Apache Gora是一個開源的ORM框架,主要爲大數據提供內存數據模型與數據的持久化。目前Gora支持對於列數據、key-value數據,文檔數據與RDBMS數據的存儲,還支持使用Apache Hadoop來對對大數據進行分析。),使得Nutch能夠訪問HBase、Accumulo、Cassandra、MySQL、DataFileAvroStore、AvroStore等NoSQL。linux

1.2 nutch的組成

     爬蟲crawler和查詢searcher。Crawler主要用於從網絡上抓取網頁併爲這些網頁創建索引。Searcher主要利用這些索引檢索用戶的查找關鍵詞來產生查找結果。二者之間的接口是索引,因此除去索引部分,二者之間的耦合度很低。web

1.3 Nutch和Lucene之間的關係

    Nutch是基於Lucene的。Lucene爲Nutch提供了文本索引和搜索的API。常見的應用場合是:你有數據源,須要爲這些數據提供一個搜索頁面。在這種狀況下,最好的方式是直接從數據庫中取出數據並用Lucene API 創建索引。sql

    在你沒有本地數據源,或者數據源很是分散的狀況下,應該使用Nutch。說道Lucene不得不說solrnutch主要用於採集網頁,solr能夠做爲搜索服務器。nutch+solr能夠搭建一個簡單的搜索引擎。簡單地講,nutch就是用於分佈式採集數據源,solr用於建索引和搜索服務。 shell

1.4nutch的工做原理

    Crawler的工做原理:首先 Crawler根據WebDB生成一個待抓取網頁的URL集合叫作Fetchlist,接着下載線程Fetcher根據Fetchlist將網頁抓取回 來,若是下載線程有不少個,那麼就生成不少個Fetchlist,也就是一個Fetcher對應一個Fetchlist。而後Crawler用抓取回來的 網頁更新WebDB,根據更新後的WebDB生成新的Fetchlist,裏面是未抓取的或者新發現的URLs,而後下一輪抓取循環從新開始。這個循環過 程能夠叫作「產生/抓取/更新」循環。數據庫

    在Nutch中,Crawler操做的實現是經過一系列子操做的實現來完成的。這些子操做Nutch都提供了子命令行能夠單獨進行調用。下面就是這些子操做的功能描述以及命令行,命令行在括號中。在建立一個WebDB以後(步驟1), 「產生/抓取/更新」循環(步驟3-6)根據一些種子URLs開始啓動。當這個循環完全結束,Crawler根據抓取中生成的segments建立索引 (步驟7-10)。在進行重複URLs清除(步驟9)以前,每一個segment的索引都是獨立的(步驟8)。最終,各個獨立的segment索引被合併爲 一個最終的索引index(步驟10)。express

Injector-》apache

                  Generator-》Fetcher-》ParseSegment-》CrawlDb update  depth=1

                  Generator-》Fetcher-》ParseSegment-》CrawlDb update  depth=2

                  Generator-》Fetcher-》ParseSegment-》CrawlDb update-》LinkDbdepth=3

也就是說往復循環Generator-》Fetcher-》ParseSegment-》CrawlDb update 這個過程;

 

   1. 建立一個新的WebDb (admin db -create).

  2. 將抓取起始URLs寫入WebDB中 (inject).

  3. 根據WebDB生成fetchlist並寫入相應的segment(generate).

  4. 根據fetchlist中的URL抓取網頁 (fetch).

   5. 根據抓取網頁更新WebDb (updatedb).

   6. 循環進行3-5步直至預先設定的抓取深度。

   7. 根據WebDB獲得的網頁評分和links更新segments (updatesegs).

   8. 對所抓取的網頁進行索引(index).

   9. 在索引中丟棄有重複內容的網頁和重複的URLs (dedup).

10. 將segments中的索引進行合併生成用於檢索的最終index(merge).

Nutch的數據文件:
crawldb: 爬行數據庫,用來存儲所要爬行的網址。crawldb中存放的是url地址,第一次根據所給url:http://blog.tianya.cn進行注入,而後update crawldb 保存第一次抓取的url地址,下一次即depth=2的時候就會從crawldb中獲取新的url地址集,進行新一輪的抓取。 
linkdb: 連接數據庫,用來存儲每一個網址的連接地址,包括源地址和連接地址。
segments: 抓取的網址被做爲一個單元,而一個segment就是一個單元。

http://www.cnblogs.com/huligong1234/p/3515214.html{更詳情解釋}

2.搭建測試環

   安裝nutch2+Hbase+Slor4 

介紹

  Nutch 網絡爬蟲  與1.x版本的不一樣在於,nutch2.x再也不有bin目錄了,有了新的ivy目錄用於使用ivy管理nutch。
  HBase 是一個分佈式,版本化,面向列的數據庫,構建在 Apache HadoopApache ZooKeeper之上。,HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。另外一個不一樣的是HBase基於列的而不是基於行的模式。

 Solrs 搜索服務器 比如是百度搜索,谷歌的搜索

版本說明

   apache-nutch-2.2.1-src.tar.gz

   hbase-0.98.19-hadoop2-bin.tar.gz

   solr-4.5.1-src.tgz

2.1安裝jdk

    選用的是 jdk-7u76-linux-x64.tar,進行上傳在usr下建立java文件夾

  設置權限    chmod u+x jdk-7u76-linux-x64.tar

    解壓tar -zxvf /usr/java/jdk-7u76-linux-x64.tar 

  配置環境變量

   vim /etc/profile    添加下面2行

    export JAVA_HOME=/usr/java/jdk1.6.0_45

    export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$CLASSPATH

    而後從新加載配置文件source /etc/profile

    輸入java -version看是否成功

  

2.2安裝Hbase

  使用的是單機版的HBase
  因爲Hbase是一個分佈式的數據庫,因此咱們常常與Hadoop聯繫起來一塊兒用。使用這裏就能夠不於hadoop一塊兒使用,使用這裏就直接安裝單擊版的Hbase。來在官方的安裝和使用http://hbase.apache.org/book/quickstart.html{英文}http://abloz.com/hbase/book.html{中文}。看2.2 HDFS查看http://hadoop.apache.org/docs/r1.0.4/cn/hdfs_design.html

   選用的是hbase-0.98.19-hadoop2-bin.tar.gz

   解壓tar -zxvf /usr/java/hbase-0.98.19-hadoop2-bin.tar.gz

   進行受權chmod -R 777 hbase-0.98.19-hadoop2

從新加載配置文件

查看官網說明

在hbase-env裏面添加

export JAVA_HOME=/usr/java/jdk1.7.0_76

編輯 conf/hbase-site.xml 去配置hbase.rootdir,來選擇HBase將數據寫到哪一個目錄 .

<configuration>

<property>

   <name>hbase.rootdir</name>

    <value>file:////usr/java/hbase-0.98.19-hadoop2/hbase</value>

  </property>

  <property>

    <name>hbase.zookeeper.property.dataDir</name>

    <value>/usr/java/hbase-0.98.19-hadoop2/zookeeper</value>

</property>

</configuration>咱們不須要建立data文件夾habase會幫咱們建立,若是咱們建立了hbase會幫咱們作遷移

You do not need to create the HBase data directory. HBase will do this for you. If you create the directory, HBase will attempt to do a migration, which is not what you want.

 啓動Hbase

在bin目錄下start-hbase.sh

啓動後不報錯表示成功了

2.3 安裝Nutch

  在安裝Nutch與Hbase結合前,能夠先參考官方文檔https://wiki.apache.org/nutch/Nutch2Tutorial 
  選用的是apache-nutch-2.3.1-src.tar.gz

  解壓tar -zxvf /usr/java/apache-nutch-2.3.1-src.tar.gz

  將nutch文件夾進行重命名mv apache-nutch-2.3.1 nutch2

  chmod -R 777 nutch2

<property> <name>storage.data.store.class</name> <value>org.apache.gora.hbase.store.HBaseStore</value> <description>Default class for storing data</description></property>

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore

--------------------------------------------------------------------------------------

Conf目錄下的文件有:
   automaton-urlfilter.txt、gora-accumulo-mapping.xml、hbase-site.xml、nutch- site.xml、regex-urlfilter.txt、suffix-urlfilter.txt、 configuration.xsl、gora-cassandra-mapping.xml、httpclient-auth.xml、parse- plugins.dtd、schema-solr4.xml、domain-suffixes.xml、gora-hbase-mapping.xml、 log4j.properties、parse-plugins.xml、schema.xml、domain-suffixes.xsd、 gora.properties、nutch-conf.xsl、prefix-urlfilter.txt、solrindex- mapping.xml、domain-urlfilter.txt、gora-sql-mapping.xml、nutch-default.xml、 regex-normalize.xml、subcollections.xml。

   對於剛開始學習Nutch的人(包括本身),比較重要的文件有三個:nutch-site.xml、gora.properties、nutch-default.xml。nutch-default.xml保存了Nutch全部可用的屬性名稱及默認的值,當須要修改某些屬性值時,能夠拷貝該文件中的屬性到nutch-site.xml中,並修改成自定義的值。不作任何配置修改的狀況,文件nutch-site.xml不包含任何屬性和屬性值,該文件用於保存用戶調整Nutch配置後的屬性{nutch2.3中nutch-site.xml設置說明 http://www.aboutyun.com/thread-10080-1-1.html}。gora.properties用於配置Gora的屬性,因爲Nutch2.x版本存儲採用Gora訪問Cassandra、HBase、Accumulo、Avro等,須要在該文件中制定Gora屬性,好比指定默認的存儲方式gora.datastore.default= org.apache.gora.hbase.store.HBaseStore,該屬性的值能夠在nutch-default.xml中查找storage.data.store.class屬性取得,在不作gora.properties文件修改的狀況下,存儲類爲org.apache.gora.memory.store.MemStore,該類將數據存儲在內存中,僅用於測試目的。本人在學習Nutch2.2.1的過程當中,存儲使用了HBase,因此在gora.properties中添加了gora.datastore.default=org.apache.gora.hbase.store.HBaseStore,在nutch-site.xml中添加了

  在Nutch的conf目錄中有automaton-urlfilter.txt、regex-urlfilter.txt、suffix-urlfilter.txt、prefix-urlfilter.txt、domain-urlfilter.txt幾個文件用於實現過濾抓取數據,好比不抓取後綴爲gif、exe的文件等,經過修改其中的值能夠達到只抓取感興趣的內容的目的,在必定程度上也有助於提升抓取速度。在抓取過程當中,這幾個文件不是都起做用的,默認狀況下只有regex-urlfilter.txt會達到過濾目的,這一點能夠從Nutch-default.xml確認。在進行過濾規則的修改以前,先說明Nutch的過濾器原理。在Nutch中,過濾器是經過插件的方式實現的,插件在nutch-default.xml中定義,更詳細看{http://www.aboutyun.com/thread-10080-1-1.html}

還有ivy目錄下的ivy.xml文件,下載依賴的jar包。

2.4 安裝ant

  選用的是apache-ant-1.9.2-bin.tar

  解壓tar -zxvf /usr/java/apache-ant-1.9.2-bin.tar

  將nutch文件夾進行重命名mv apache-ant-1.9.2 ant

    配置環境變量

 source /etc/profile

 在配置nutch-2/runtime/local/conf/nutch-site.xml

在添加以下配置信息

<property><name>http.agent.name</name><value>Your Nutch Spider</value></property><property><name>http.accept.language</name><value>ja-jp, en-us,en-gb,en;q=0.7,*;q=0.3</value><description>Value of the 「Accept-Language」 request header field.

This allows selecting non-English language as default one to retrieve.

It is a useful setting for search engines build for certain national group.

</description></property><property><name>parser.character.encoding.default</name><value>utf-8</value><description>The character encoding to fall back to when no other information

is available</description></property>

2.5 測試nutch和hbase

在seed.txt中添加要抓取的連接 這裏以csdn爲例

cd /usr/java/nutch2/conf/

mkdir -p urls

cd urls

touch seed.txt

vim seed.txt

最後開始編譯

cd /usr/java/nutch2/

先執行ant命令

編譯runtime

ant runtim

修改nutch-2裏面ivy/ivysettings.xml配置文件中 因爲鏡像文件地址有問題

修改ivysettings.xml 中repository.apache.org值爲http://maven.restlet.org/
 <property name="repository.apache.org"  value="http://maven.restlet.org/"  override="false"/>

         

修改後執行

ant runtim

可能會有的jar包下載不下來,多ant runtim幾回就行了

出現這個緣由,是因爲nutch2.x版本以前不支持hbase,因此ivy.xml配置文件中沒有注入鏈接hbase的jar包因此在ivy.xml中添加這個依賴<dependency org="org.apache.hbase" name="hbase-common" rev="0.98.8-hadoop2" conf="*->default" />

 

而後再編譯runtime

$:ant runtime

編譯完成後

$:cd /usr/java/nutch2/runtime/local/bin

--------------------------------------------------------------------------------------

抓取路徑最後一個本身配置的是抓取層數

Usage: crawl <seedDir> <crawlID> [<solrUrl>] <numberOfRounds>{抓取的惟一標識第二次抓的不同會進行內容得更新不是覆蓋}{後面會說道}在Nutch-2.x版本中,爲了方便用戶的使用,爬取流程所涉及的命令整合到了crawl腳本中,使用者能夠經過輸 入./crawl<seedDir> <crawlID> <solrURL> <numberOfRounds>完成爬取流程,而沒必要像Nutch-2.1版本中那樣,必須一步一步地執行inject、 generate、fetch、parse等命令。對於初學者的我來講,決定不執行傻瓜命令(crawl命令) $ /bin/ nutch inject /usr/java/nutch2/runtime/local/urls $ /bin/nutch readdb

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

抓取  numberOfRounds代表的前綴

$:./crawl /usr/java/nutch2/conf/urls/ numberOfRounds 3

抓取完成後進入hbase shell查看數據   

$:hbase shell

查看列表

$:list

查看數據(numberOfRounds_webpage)爲表名,以list命令查出的表名爲準,這裏就以此表名作例子

能夠瀏覽抓取信息$:scan 'numberOfRounds_webpage'

[Nutch]Nutch重要命令使用說明 http://blog.csdn.net/kandy_ye/article/details/51295328 

 cd /usr/java/nutch2/runtime/local/bin/

 nutch indexchecker http://www.163.com  用來檢查索引插件對應着solrindex-mapping.xml

2.6安裝solr

   選用的是 solr-4.10.4.tgz

  拷貝到/usr/java目錄

   tar -zxvf solr-4.10.4.tgz

  chmod -R 777 solr-4.10.4

  進入到example文件夾

   cd /usr/java/solr-4.10.4/example/

  啓動solr

     java -jar start.jar

第二種是在bin/solr start

 關閉bin/solr stop -p 8983

 

http://localhost:8983/solr默認端口號是8983

    表示安裝啓動成功

測試了一下原代的切詞器,效果是將切成一個一個字,不是想要的效果,後期再改

解壓後的文件夾及文件介紹

 

   contrib:Solr服務獨立運行相關依賴包

   dist:可獨立運行的war和solr服務運行相關jar包

   docs:Solr的相關文檔

     example:提供的Solr的配置案例和基於jetty服務器的可運行的star.jar

solr配合nutch的使用

  nutch的conf文件夾有些文件是用於solr索引的,好比schema-solr4.xml、schema.xml。可是我安裝的是小版本的,因此裏面沒用schema-solr4.xml這個約束,因此對其進行了下載,如何將solr和nutch聯繫起來,就是將schema-solr4.xml配置文件對solr下的schema.xml配置文件進行替換,還要將其放在nutch下的conf一份而且重命名爲schema.xm,若不修改則在啓動Solr會報找不到schema.xm的錯誤而沒法啓動Solr。 /usr/solr-4/example/solr-4.10.4/collection1/conf/schema.xml

直接訪問會報錯,

加上<field name="_version_" type="long" indexed="true" stored ="true"/>

 

出現這個問題,須要檢查下配置文件nutch的配置文件、

Make sure that the plugin indexer-solr is included. Go to the file: conf/nutch-site.xml and in the propertyplugin.includes add the plugin, for instance:確保indexer-solr這個插件存在,去conf/nutch-site.xml進行配置

<property> 
 <name>plugin.includes</name> 
 <value>protocol-http|urlfilter-regex|parse-(html|tika)|index-(basic|anchor)|indexer-solr|scoring-opic|urlnormalizer-(pass|regex|basic)</value> 
  <description>Regular expression naming plugin directory names to 
  include.  Any plugin not matching this expression is excluded. 
  In any case you need at least include the nutch-extensionpoints plugin. By 
  default Nutch includes crawling just HTML and plain text via HTTP, 
  and basic indexing and search plugins. In order to use HTTPS please enable 
  protocol-httpclient, but be aware of possible intermittent problems with 
the 
  underlying commons-httpclient library. 
  </description> 
</property> 

 

最開始的solr

執行爬蟲注入操做

Usage: crawl <seedDir> <crawlID> [<solrUrl>] <numberOfRounds>

./crawl /usr/java/nutch2/conf/urls/ sina http://localhost:8983/solr 2

· ~/urls 是存放了種子url的目錄

· TestCrawl 是crawlId,這會在HBase中建立一張以crawlId爲前綴的表,例如TestCrawl_Webpage。

· http://localhost:8983/solr/ , 這是Solr服務器

· 2,numberOfRounds,迭代的次數

http://10.10.30.61:60010/master-status  

3.僞集羣的搭建

 

選用的版本是hadoop-2.5.2.tar.gz  將其解壓後

將其更名爲hadoop mv hadoop-2.5.2 hadoop   若是選的是其餘的版本記得修改hadoop-common的依賴

 Hadoop能夠在單節點上以所謂的僞分佈式模式運行,此時每個Hadoop守護進程都做爲一個獨立的Java進程運行。

 僞分佈式模式須要免密碼ssh設置,確認可否不輸入口令就用ssh登陸localhost:

 ssh localhost  

 若是不輸入口令就沒法用ssh登錄localhost,執行下面的命令(注意:只有擁有root權限的用戶才能執行下面命令):

Shell代碼 

1. ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa   

2. cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys  

修改幾個重要的配置文件(共5個)

第一個:hadoop-env.sh

添加export JAVA_HOME=/usr/java/jdk1.7.0_76

第二個:core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://localhost:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/data/java/hadoop/tmp</value>

</property>

</configuration>

第三個:hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>1</value>

</property>

</configuration>

第四個:mapred-site.xml.template 須要重命名: mv mapred-site.xml.template mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

第五個:yarn-site.xml

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

 

    將hadoop添加到環境變量

vim /etc/profile

export HADOOP_HOME=/data/java/hadoop

export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin

source /etc/profile

格式化HDFS(namenode)第一次使用時要格式化

hadoop namenode -format

驗證是否啓動成功

使用jps命令驗證  sbin/start-all.sh

http://10.10.30.61:50070 (HDFS管理界面)

http://10.10.30.61:8088 (MR管理界面)

nutch和hadoop整合

修改nutch-site.xml在單機版基礎上進行了修改  添加節點的存儲要實現序列化和反序列化

<property><name>io.serializations</name><value>org.apache.hadoop.io.serializer.WritableSerialization</value><description>A list of serialization classes that can be used for

  obtaining serializers and deserializers.</description></property>

 Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

因爲hadoop下載的默認是32位編譯的,咱們使用的系統是64位的,搜索要從新進行編譯

下載hadoop-native-64-2.5.2.tar將其解壓到hadoop下的lib下的native文件夾中

 tar -zxvf hadoop-native-64-2.5.2.tar -C hadoop/lib/native/

先進入nutch的deply目錄:

cd nutch/runtime/deploy

和在local模式同樣 ,咱們先創建一個urls目錄,並將抓取連接放入url.txt文件裏面:

mkdir urls

echo http://www.cnbeta.com > urls/url.txt

將連接文件放入hadoop的分佈式文件系統上:

hadoop fs -put urls /urls

bin/hadoop jar /data/java/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar randomwriter out

使用的是hadoop的話抓取的路徑 cd /usr/java/nutch2/runtime/deploy/bin/

crawl /urls si http://localhost:8983/solr 2

4集成IKAnalyzer中文分詞器

1、 IKAnalyzer-2012-4x.jar拷貝到example\solr-webapp\webapp\WEB-INF\lib下;

2、 schema.xml文件中添加fieldType

<fieldType name="text_ik" class="solr.TextField">   

     <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer"/>   

</fieldType>

3、 下圖設置

效果:

一、 修改默認檢索字段名稱,dftext-à custom_field

 <requestHandler name="/select" class="solr.SearchHandler">

     <lst name="defaults">

       <str name="echoParams">explicit</str>

       <int name="rows">10</int>

       <str name="df">common_text</str>  檢索字段名稱

     </lst>

    </requestHandler>

一、 requestHandler用來配置執行的方法  name:指定的方法名稱  wt:響應的數據格式;df:默認檢索的字段。

二、 去掉競價排名配置(由於須要加載一個xml文件提升效率)

5.將hbase保存在節點上

開始使用的是單機版默認是存儲在文件裏面的

關閉hbase的狀況下

修改hbase-site.xml添加下面字段

<property>

  <name>hbase.cluster.distributed</name>

  <value>true</value>

</property>

修改存儲的位置  這個存儲的文件節點文件夾不用本身建立系統會建立

 

開啓hbase

輸入hadoop fs -ls /hbase

 

相關文章
相關標籤/搜索