首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Nutch 2.x + HBase 分布式爬蟲環境部署與基礎使用全流程指南

     編輯:Java 綜合教學

Nutch 2.x + HBase 分布式爬蟲環境部署與基礎使用全流程指南

Apache Nutch 2.x 引入 Apache Gora 作為持久化抽象層,支持將爬取數據存儲到 HBase、Cassandra、MongoDB、SQL 等多種後端。本文記錄基於 Nutch 2.3.1 + HBase (HDFS + ZooKeeper) 的生產級部署流程與基礎操作。

架構關係圖

Nutch 2.x (Gora API)
    │
    ▼
HBase (列式 NoSQL, 隨機讀寫)
    │
    ├── HDFS (分佈式文件系統, 存儲 HFile 數據塊)
    │
    └── ZooKeeper (協調服務, 存儲元數據: Region 位置、Schema、Master 選舉)

關鍵點:Nutch 僅感知 HBase,不關心 HBase 是單機還是分佈模式;HBase 透明依賴 HDFS 與 ZooKeeper。

一、環境版本矩陣 (經驗證兼容組合)

組件版本說明
Nutch2.3.1Ant/Ivy 構建, Gora 0.6.1
HBase1.2.x / 1.3.xHBase 2.x 需 Nutch 2.4+ / Gora 0.7+
Hadoop (HDFS/YARN)2.7.x / 2.8.x / 2.9.xHadoop 3.x 需注意兼容性
ZooKeeper3.4.xHBase 內置或獨立集群
JavaJDK 8 (1.8.0_202+)Nutch 2.x 不支持 JDK 9+
Ant1.9.x / 1.10.x構建工具
Ivy2.4.x / 2.5.x依賴管理 (Nutch 內建)

二、基礎設施部署 (略, 假設已就緒)

  • Hadoop 集群:HDFS (NameNode + DataNodes)、YARN (ResourceManager + NodeManagers) 正常運行,hdfs dfs -ls / 通暢
  • ZooKeeper 集群:3/5 節點集群,zkCli.sh -server zk1:2181 連接正常
  • HBase 集群:Master + RegionServers 正常,hbase shell 可創建表、寫入數據
  • 網絡/防火牆:節點間互通,關鍵端口開放 (9000, 2181, 16000-16030, 8080, 8088 等)

三、Nutch 部署步驟

1. 解壓源碼包

tar -xzf apache-nutch-2.3.1-src.tar.gz
cd apache-nutch-2.3.1

2. 配置 Gora 持久化層 (核心)

編輯 conf/gora.properties:

gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
gora.datastore.config=hbase-site.xml

確保 hbase-site.xml 在 classpath 中 (或複製到 conf/),內容包含:

<configuration>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>zk1,zk2,zk3</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <property>
    <name>zookeeper.znode.parent</name>
    <value>/hbase</value>  <!-- HBase 在 ZK 中的根節點 -->
  </property>
</configuration>

3. 配置 Nutch 核心參數

編輯 conf/nutch-site.xml:

<configuration>
  <!-- HTTP 代理, 爬取間隔, 用戶代理 -->
  <property>
    <name>http.agent.name</name>
    <value>MyNutchBot/1.0 (+https://mydomain.com/bot.html)</value>
  </property>
  <property>
    <name>fetcher.server.delay</name>
    <value>2.0</value>  <!-- 同主機延遲 2秒 -->
  </property>
  <property>
    <name>fetcher.threads.fetch</name>
    <value>10</value>
  </property>
  <property>
    <name>db.ignore.external.links</name>  <!-- 僅爬取種子域名 -->
    <value>true</value>
  </property>
  <property>
    <name>plugin.includes</name>
    <value>protocol-http|urlfilter-regex|parse-(html|tika|text)|index-(basic|anchor)|scoring-opic|urlnormalizer-(pass|regex|basic)</value>
  </property>
</configuration>

4. 配置種子 URL 與 URL 過濾

# urls/seed.txt (每行一個種子 URL)
https://www.example.com/
https://blog.example.com/

# conf/regex-urlfilter.txt (正則過濾規則)
# 接受種子域名下所有鏈接
+^https?://([a-z0-9-]+\.)*example\.com/
# 拒絕所有其他
-^.

5. 使用 Ant 構建運行時部署包

# 編譯並打包 runtime (含依賴)
ant runtime

# 輸出目錄: runtime/local/ (本地模式) 或 runtime/deploy/ (分佈式)
# 結構:
# runtime/local/
# ├── bin/           # nutch, crawl 腳本
# ├── conf/          # 配置文件
# ├── lib/           # 所有依賴 jar
# └── plugins/       # 插件

6. 注入種子 URL 到 CrawlDb

cd runtime/local
bin/nutch inject crawl/crawldb urls/seed.txt
# 或指定配置目錄
bin/nutch -Dnutch.conf.dir=conf inject crawl/crawldb urls/seed.txt

7. 爬取循環 (生成 - 抓取 - 解析 - 更新)

# 生成抓取列表
bin/nutch generate crawl/crawldb crawl/segments -topN 1000

# 抓取 (segment 目錄名含時間戳)
SEG=$(ls -d crawl/segments/2* | tail -1)
bin/nutch fetch $SEG -threads 10

# 解析
bin/nutch parse $SEG

# 更新 CrawlDb (去重、鏈接圖、評分)
bin/nutch updatedb crawl/crawldb $SEG

生產環境建議編寫腳本自動化多輪爬取,並監控 crawldb 統計信息。

8. 索引導出 (可選: 接入 Solr/Elasticsearch)

# 索引到 Solr
bin/nutch index crawl/crawldb -linkdb crawl/linkdb crawl/segments/* -solr https://solr:8983/solr/nutch

# 或導出倒排索引文件
bin/nutch invertlinks crawl/linkdb -dir crawl/invertlinks

四、常見問題排查

問題原因/解決
Gora 找不到 HBaseStoregora-hbase 模塊未編譯/打包 → 檢查 ivy.xml 依賴、ant clean runtime 重建
HBase 連接超時 / ZooKeeper 連不上hbase-site.xml 配置錯誤 / 防火牆 / ZK 根節點不匹配 → 檢查 zkCli ls /hbase
MapReduce 作業失敗 (Container memory)YARN 容器內存不足 → 調整 mapreduce.map.memory.mb / reduce.memory.mb
爬取速度極慢fetcher.threads.fetch 過小 / fetcher.server.delay 過大 / DNS 解析慢 / 目標站反爬
中文亂碼http.content.encoding 默認 ISO-8859-1 → 設置 utf-8 / 依賴 Tika 自動檢測
Ant 構建 Ivy 依賴下載失敗網絡不通 → 配置 Ivy 鏡像 / 手動下載 jar 到 ivy/cache

五、生產化建議

  • 監控:Ganglia/Prometheus 監控 HBase RegionServer、HDFS DataNode、YARN 容器、Nutch 作業計數器
  • 去重優化:調整 db.max.outlinks.per.page、crawl.max.segment.size、使用 UrlNormalizer 規範化
  • 斷點續爬:CrawlDb 天然支持,定期備份 crawldb、linkdb 目錄
  • 分佈式運行:bin/nutch crawl -Dmapreduce.jobtracker.address=rm:8032 urls/seed.txt crawl/output 10 提交到 YARN
  • 插件擴展:編寫自定義 ParseFilter、ScoringFilter、UrlFilter 滿足業務需求

核心提示:Nutch 2.x + HBase 架構適合中大規模、增量爬取、需隨機訪問爬取數據的場景。小規模/一次性任務可考慮 Nutch 1.x (Segment 文件存儲) 或簡輕量爬蟲框架 (WebMagic, Scrapy)。部署核心在於 Gora → HBase → HDFS/ZK 配置鏈路打通,版本矩陣務必嚴格對齊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved