zoukankan      html  css  js  c++  java
  • Nutch2+Hbase环境部署和基本使用

         由于项目想借助Nutch来做网络爬虫,所以一番研究,发现网上文档比较散,学习的很艰难,因此总结了一些,放上来与大家交流。

    1       环境部署

    Nutch有1.x系列和2.x系列,主要区别是2.x使用了Gora作为持久层媒介,可以将数据持久化到关系型数据库,更详细的介绍参考Nutch官网。

    这里主要介绍采用Nutch2.3.1+HBase的方式进行部署,HBase又依赖于HDFS和Zookeeper,实际上,Nutch只是将HBase视为持久层,而并不关心HBase是单机模式还是分布模式,HBase又是将文件存储于HDFS,将元数据(表信息)存储于zookeeper,只不过单机模式下,把文件系统视为HDFS,而zookeeper可以使用内置,也可以使用外置的zookeeper。

    安装Nutch

    解压缩源码包:

    tar –zxf apache-nutch-2.3.1-src.tar.gz

    进入到解压缩后的目录

    cd apache-nutch-2.3.1

    执行ant进行编译

    ant

    (如果解压缩的是bin包,则无须ant编译,路径/…/apache-nutch-2.3.1即为$ NUTCH_RUNTIME_HOME。实际上2.x已经没有bin包了,只有1.x才有bin包。)

    编译需要较长时间(主要是下载依赖特别慢,有说法是修改下载源地址,我试过反而会下载失败),编译完成后,将生成/runtime/local目录,可以设置环境变量:

    export NUTCH_RUNTIME_HOME=/home/apache/apache-nutch-2.3.1/runtime/local

    export PATH=$PATH:$NUTCH_RUNTIME_HOME/bin

    输入bin/nutch 看到提示信息说明安装成功

    安装Ant

    如果在执行ant时提示没有ant命令,则需要先安装ant:

    解压缩tar包

    tar –zxf apache-ant-1.9.6-bin.tar.gz

    添加环境变量

    export ANT_HOME=/home/apache-ant-1.9.6/ant

    export PATH=/home/apache-ant-1.9.6/bin:$PATH

    输入ant –version看到版本号说明安装成功

    安装HBase

    解压缩tar包

    tar –zxf hbase-0.98.8-hadoop2-bin.tar.gz

    添加环境变量

    export HBASE_HOME=/home/hbase-0.98.8-hadoop2

    2       配置方法

    配置单机模式下的HBase

    单机模式下,不需要HDFS和Zookeeper,使用本地文件系统作为存储介质。

    (单机模式需要使用端口2181,理论上应该是要求该端口未被占用。)

    修改$HBASE_HOME/conf/ hbase-site.xml

    在<configuration>标签中添加配置:

    <property>

        <name>hbase.rootdir</name>

        <value>file:///home/testuser/hbase</value>

      </property>

      <property>

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

        <value>/home/testuser/zookeeper</value>

      </property>

    这里配置的rootdir是HBase存储文件的存储路径,dataDir是HBase使用zookeeper存放的元数据的存储路径。

    使用命令$HBASE_HOME/bin/start-hbase.sh启动HBase,并使用jps命令查看进程,发现有HMaster进程则说明启动成功,可以在$HBASE_HOME/logs目录下找到运行日志。

    单机模式下只能使用本地存储文件作为存储介质,且只能使用内置的zookeeper,不能使用外置的HDFS和zookeeper。

    配置集群模式下的HBase

    1、修改$HBASE_HOME/conf/ hbase-site.xml

    在<configuration>标签中添加配置:

    <property>

        <name>hbase.rootdir</name>

        <value>hdfs://192.168.1.92:9000/hbase</value>

    </property>

    <property> 

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

        <value>true</value>     

    </property>

    hbase.cluster.distributed属性为false代表单机模式,默认为fasle,置为true则代表分布模式,此时的hbase.rootdir要配置为HDFS的路径,这里的192.168.1.92:9000是HDFS的ip和端口,根据实际情况配置。如果没有那么需要搭建Hadoop2的环境。

    2、修改$HBASE_HOME/conf/ hbase-env.sh为HBase设置jdk路径:

    增加(或取消注释)

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

    使用命令$HBASE_HOME/bin/start-hbase.sh启动HBase,这是你会发现一共启动了三项,使用jps命令查看进程,发现有HMaster、HRegionServer、H QuorumPeer进程则说明启动成功,可以在$HBASE_HOME/logs目录下分别找到运行日志。

    3、(可选)使用外置的Zookeeper

    在集群模式下,可以使用外置的Zookeeper,也可以使用HBase内置的Zookeeper。刚才的H QuorumPeer进程就是HBase启动的内置Zookeeper。使用外置的Zookeeper时新增如下配置:

    修改$HBASE_HOME/conf/ hbase-env.sh告诉HBase使用外置的zookeeper:

    增加(或取消注释)

    export HBASE_MANAGES_ZK=false

    在启动HBase之前,先启动你的zookeeper即可。默认HBase会向localhost:2181寻找zookeeper,如果想自定义ip和端口,则可以在$HBASE_HOME/conf/ hbase-site.xml中添加配置:

    <property>

        <name>hbase.zookeeper.quorum</name>

        <value>192.168.1.92</value>

    </property>

    <property> 

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

        <value>2181</value>     

    </property>

    启动外置zookeeper后,再启动HBase,这是只有两个进程启动HMaster、HRegionServer,同样可以在$HBASE_HOME/logs目录下分别找到运行日志。

    Nutch2.x关联HBase

    官方建议Nutch2.3.1使用HBase0.98.8

    在关联HBase之前,先配置你的Nutch,此配置类似Nutch1.x的配置:

    1、修改$NUTCH_RUNTIME_HOME/conf/nutch-site.xml

    新增如下属性:

    <property>

     <name>http.agent.name</name>

     <value>My Nutch Spider</value>

    </property>

    2、(可选)设置url过滤规则,修改$NUTCH_RUNTIME_HOME/conf/regex-urlfilter.txt

    添加类似如下正则匹配:

    +^http://([a-z0-9]*.)*nutch.apache.org/

    +号代表匹配上的添加,-号代表匹配上的不添加。

    3、为Nutch配置HBase属性

    修改$NUTCH_RUNTIME_HOME/conf/nutch-site.xml新增如下配置:

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

    4、为Nutch添加HBase依赖:

    修改$NUTCH_HOME/ivy/ivy.xml(注意这里的$NUTCH_HOME指Nutch所在目录)

    添加(或取消注释)以下配置

    <!-- Uncomment this to use HBase as Gora backend. -->
        <dependency org="org.apache.gora" name="gora-hbase" rev="0.6.1" conf="*->default" />
    <dependency org="org.apache.hbase" name="hbase-common" rev="0.98.8-hadoop2" conf="*->default" />

    5、为Nutch配置gora为hbase:

    修改$NUTCH_RUNTIME_HOME/conf/gora.properties

    添加(或取消注释)以下配置

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

    6、使用ant重新编译Nutch、使配置生效:

    在Nutch所在目录下执行

    ant runtime

    7、如果HBase的zookeeper不在NUTCH所在的服务器上,还需要将HBase的conf下的hbase-site.xml文件,拷贝到$NUTCH_RUNTIME_HOME/conf目录下。这样NUTCH才能找到HBase。

    3       使用说明

    HBase使用说明

    无论是单机模式还是分布模式,都可以通过以下命令测试HBase的正常使用:

    启动HBase

    $HBASE_HOME/bin/start-hbase.sh

    进入命令行:

    $HBASE_HOME/bin/hbase shell

    在命令行可以执行的命令:

    create 'test', 'cf'

    list 'test'

    put 'test', 'row1', 'cf:a', 'value1'

    put 'test', 'row2', 'cf:b', 'value2'

    put 'test', 'row3', 'cf:c', 'value3'

    scan 'test'

    get 'test', 'row1'

    disable 'test'

    enable 'test'

    drop 'test'

    关闭HBase

    $HBASE_HOME/bin/stop-hbase.sh

    Nutch2.x使用说明

    这里以2.3.1版本为例。

    1、创建你的种子:

    新建目录urls、在urls目录下创建文件seeds.txt,在seeds.txt中添加urls地址,一行一条urls。

    2、inject可以理解为创建一个爬取任务:

    $NUTCH_RUNTIME_HOME/bin/nutch inject urls -crawlId yyy

    这里的urls就是你创建的种子url所在的文件夹,可以使用绝对路径。

    yyy即为爬取任务的ID,在HBase中会创建一个yyy_webpage的表,来记录所有此爬取任务的数据信息。可以在HBase命令行用list等命令来查看爬取数据的变化。

    3、generate 获取将要爬取的链接

    $NUTCH_RUNTIME_HOME/bin/nutch generate -crawlId yyy

    4、fetch 爬取网页

    $NUTCH_RUNTIME_HOME/bin/nutch fetch –all -crawlId yyy –threads 4

    5、parse解析网页数据

    $NUTCH_RUNTIME_HOME/bin/nutch parse -crawlId yyy -all

    6、updata更新数据库

    $NUTCH_RUNTIME_HOME/bin/nutch updatedb -all -crawlId yyy

    7、重复2-6步即可继续下一个深度的爬取

    详细的命令可选参数,参考Nutch官网。

  • 相关阅读:
    VSCode的终端修改
    vim总结
    分布式的CAP理论
    MongoDB常用命令总结
    nginx负载均衡总结
    【重要】nginx location配置和rewrite写法
    Linux四剑客find/grep/awk/sed
    IDEA插件开发总结
    支付宝在线支付接口开发流程
    Centos7 网卡Device does not seem to be present解决办法
  • 原文地址:https://www.cnblogs.com/luoyesailing-qq-77149514/p/5268196.html
Copyright © 2011-2022 走看看