Nutch + Hbase

本文主要讲解内容包括:ant及ivy的搭建、Nutch + Hbase搭建


1、ant及ivy的搭建

1-1)ant下载地址http://ant.apache.org/bindownload.cgi

1-2)环境变量配置,修改Linux /etc/profile文件内容,添加如下:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. export ANT_HOME=/usr/ant  
  2. export PATH=$ANT_HOME/bin:$PATH  

1-3)下载ivy build.xml http://ant.apache.org/ivy/history/latest-milestone/samples/build.xml

1-4)在下载的路径下执行 ant 命令,成功后在ant的安装路径下新增ivy文件夹,并将ivy下的ivy.jar拷贝到ANT_HOME/lib目录下


2、Nutch + Hbase搭建

2-1)Nutch下载路径http://nutch.apache.org/downloads.html,选择对应的版本,本文选用apache-nutch-2.3.1-src.tar.gz

2-2)修改conf/nutch-site.xml,内容如下:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <configuration>  
  2.     <property>  
  3.         <name>http.agent.name</name>  
  4.         <value>hbase_nutch</value>  
  5.     </property>  
  6.     <property>  
  7.         <name>storage.data.store.class</name>  
  8.         <value>org.apache.gora.hbase.store.HBaseStore</value>  
  9.         <description>Default class for storing data</description>  
  10.     </property>  
  11.     <property>  
  12.         <name>plugin.includes</name>  
  13.         <value>protocol-httpclient|urlfilter-regex|parse-(html|tika)|index-(basic|anchor)|indexer-solr|scoring-opic|urlnormalizer-(pass|regex|basic)</value>  
  14.     </property>  
  15. </configuration>  

2-3)conf/regex-urlfilter.txt,用来过滤抓取网站的URL规则,读者可以根据个人需求进行定制。

2-4)修改 ivy/ivy.xml,主要用来设置所依赖的版本,改动有如下:

        添加Hbase支持,这里需要注意,由于版本兼容问题,这里使用0.98.13版本,笔者测试Hbase1.2版本,出现错误。

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <dependency org="org.apache.hbase" name="hbase-client" rev="0.98.13-hadoop2" conf="*->default"/>  
  2. <dependency org="org.apache.hbase" name="hbase-common" rev="0.98.13-hadoop2" conf="*->default"/>  
  3. <dependency org="org.apache.hbase" name="hbase-protocol" rev="0.98.13-hadoop2" conf="*->default"/>  
  4. <dependency org="org.apache.gora" name="gora-hbase" rev="0.6.1" conf="*->default" />  
        其他的jar文件读者可以根据需要进行删除或者更改。

2-5)拷贝hbase集群配置文件,cp $HBASE_HOME/conf/hbase-site.xml $NUTCH_HOME/conf/

2-6)修改conf/gora.properties,添加如下配置

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. gora.datastore.default=org.apache.gora.hbase.store.HBaseStore  

2-7)配置抓取链接,在conf目录下创建urls目录,用来保存抓取链接,然后初始化种子文件seed.txt,内容添加如下:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. http://www.csdn.net/  
2-8)进行编译,创建抓取程序 ,nutch根目录下执行ant runtime,结果如下:

        

        第一次时间比较长,需要下载jar包等等。

2-9)抓取内容,在runtime/local/bin下执行如下命令:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. ./crawl /usr/apache-nutch-2.3.1/conf/urls/ numberOfRounds 10  
        crawl 命令的参数解释如下:
[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. Usage: crawl <seedDir> <crawlID> [<solrUrl>] <numberOfRounds>  
  2. <seedDir>:放置种子文件的目录  
  3. <crawlID> :抓取任务的ID  
  4. <solrURL>:用于索引及搜索的solr地址  
  5. <numberOfRounds>:迭代次数,即抓取深度  
 

2-10)查看hbase监控页面网址为:http://lenovo1:16010/master-status,获取到 表名称为numberOfRounds_webpage,通过Spark代码读取如下:

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. // please ensure HBASE_CONF_DIR is on classpath of spark driver  
  2. // e.g: set it through spark.driver.extraClassPath property  
  3. // in spark-defaults.conf or through --driver-class-path  
  4. // command line option of spark-submit  
  5. val conf = HBaseConfiguration.create()  
  6.   
  7. val args = Array[String]("numberOfRounds_webpage")  
  8. // Other options for configuring scan behavior are available. More information available at  
  9. // http://hbase.apache.org/apidocs/org/apache/hadoop/hbase/mapreduce/TableInputFormat.html  
  10. conf.set(TableInputFormat.INPUT_TABLE, args(0))  
  11.   
  12. // Initialize hBase table if necessary  
  13. val admin = new HBaseAdmin(conf)  
  14. if (!admin.isTableAvailable(args(0))) {  
  15.   println("不存在该表")  
  16.   return  
  17.   //sc.stop()  
  18. }  
  19. val pool = new HTablePool(conf, 1000)  
  20. val table = pool.getTable(args(0))  
  21.   
  22. try {  
  23.   val rs: ResultScanner = table.getScanner(new Scan())  
  24.   var r = rs.next()  
  25.   while (r != null) {  
  26.     System.out.println("获得到rowkey:" + new String(r.getRow))  
  27.     for (keyValue <- r.raw()) {  
  28.       System.out.println("(" + new String(keyValue.getFamily()) + "," + new String(keyValue.getQualifier()) + "):" + new String(keyValue.getValue()));  
  29.     }  
  30.     r = rs.next()  
  31.   }  
  32. } catch {  
  33.   case e => e.printStackTrace()  
  34. }  
  35. //sc.stop()  
  36. admin.close()  
展示结果如下:


  至此一个简单的示例完成了,读者可以在此基础上添加复杂业务逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值