灵魂机器

终有一天机器也有灵魂


  • 首页

  • 分类

  • 归档

  • 标签

编写Nutch插件

发表于 2014-02-20   |   分类于 Search-Engine   |  

软件版本:Nutch 1.7

Nutch Plugin的所有资料,都在官网这里, PluginCentral

##前提
在Eclipse里运行Nutch

Extension 和 Extension-point的关系

Extension point类似与Java语言里的接口(interface), extension 则是具体的实现(implementation)。

About Plugins里有一句话,Each extension-point defines an interface that must be implemented by the extension.

##Nutch里的各种概念
Extension point, extension, plugin, 这些概念是什么意思?见 Technical Concepts Behind the Nutch Plugin System

##Nutch 1.7 有哪些 Extension-point

ExtensionPoint 这个东西,本身也是一个插件,可以看看 src/plugin/nutch-extensionpoints/plugin.xml,里面定义了所有的扩展点,跟上图基本一致。

AboutPlugins这里列出来的是 Nuch 1.4的扩展点,有点过时了。

##一个Nutch的组成文件
build.xml, plugins.xml 等等

##Nutch 插件例子

  1. WritingPluginExample
  2. WritingPluginExample-1.2,针对Nutch 1.2的,有点老,但是值得一看
  3. Writing a plugin to add dates by Ryan Pfister

看来这3个例子,你应该就知道怎么开发插件了。

##Nutch 的缺点
在抓取的过程中,真正的难度在于, ip limit 和 user limit,可惜 Nutch 对这两个问题都没有解决方案。

  1. Nutch 的 HttpPostAuthentication 现在还没有开发完,导致无法抓取需要登录的网站,例如新浪微波,豆瓣等UGC网站,都是需要登录的。没有这个HttpPostAuthentication,Nutch其实只能抓取不需要登录的网页,适用范围大打折扣,现在是web 2.0时代,真正优质的内容,几乎都是需要登录的。
  2. 多个代理的管理。Nutch 没有提供多个代理的管理功能,只能在nutch-site.xml里配置一个代理。比如我在网上抓取了几百个免费的http代理,怎么让Nutch的各个线程均匀的使用这些代理,平能自动判断代理的速度,优先选择速度高的代理呢?

CentOS上编译 Hadoop 2.2.0

发表于 2014-02-14   |   分类于 Hadoop   |  

下载了Hadoop预编译好的二进制包,hadoop-2.2.0.tar.gz,启动起来后,总是出现这种警告:

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

原因是apache官网提供的二进制包,里面的native库,是32位的,坑跌啊,现在服务器谁还有32位的啊。

$ file $HADOOP_PREFIX/lib/native/libhadoop.so.1.0.0
libhadoop.so.1.0.0: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, BuildID[sha1]=0x9eb1d49b05f67d38454e42b216e053a27ae8bac9, not stripped

我们需要下载Hadoop 2.2.0源码,在 64 位Linux下重新编译,然后把32位的native库用64位的native库替换。

阅读全文 »

在CentOS上安装HBase 0.96

发表于 2014-02-08   |   分类于 Hadoop   |  

环境:CentOS 6.5, jdk 1.7, HBase 0.96.1.1

##(可选)创建新用户,并配置好SSH无密码登录
一般我倾向于把需要启动daemon进程,对外提供服务的程序,即服务器类的程序,安装在单独的用户下面。这样可以做到隔离,运维方面,安全性也提高了。

创建一个新的group,

$ sudo groupadd hbase

创建一个新的用户,并加入group,

$ sudo useradd -g hbase hbase

给新用户设置密码,

$ sudo passwd hbase

在每台机器上创建hbase新用户,并配置好SSH无密码,参考我的另一篇博客,SSH无密码登录的配置

##1. 单机模式(Standalone mode)

###1.1 下载,解压

$ wget wget http://mirror.esocc.com/apache/hbase/hbase-0.96.1.1/hbase-0.96.1.1-hadoop2-bin.tar.gz
$ tar zxf hbase-0.96.1.1-hadoop2-bin.tar.gz -C ~/local/opt

###1.2 hbase-env.sh
在这个文件中要指明JDK 安装在了哪里

$ echo $JAVA_HOME
/usr/lib/jvm/java
$ vim conf/hbase-env.sh

取消JAVA_HOME那一行的注释,设置正确的JDK位置

export JAVA_HOME=/usr/lib/jvm/java

###1.3 修改 conf/hbase-site.xml
内容如下

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>/home/hbase/local/var/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/home/hbase/local/var/zookeeper</value>
  </property>
</configuration>

hbase.rootdir目录是用来存放HBase的相关信息的,默认值是/tmp/hbase-${user.name}/hbase; hbase.zookeeper.property.dataDir目录是用来存放zookeeper(HBase内置了zookeeper)的相关信息的,默认值是/tmp/hbase-${user.name}/zookeeper。

###1.4 启动

$ ./bin/start-hbase.sh
starting Master, logging to logs/hbase-user-master-example.org.out
阅读全文 »

在CentOS上安装ZooKeeper集群

发表于 2014-02-07   |   分类于 Hadoop   |  

环境:CentOS 6.5, jdk 1.7, ZooKeeper 3.4.5

本文主要参考官网的Getting Started

##(可选)创建新用户
一般我倾向于把需要启动daemon进程,对外提供服务的程序,即服务器类的程序,安装在单独的用户下面。这样可以做到隔离,运维方面,安全性也提高了。

创建一个新的group,

$ sudo groupadd zookeeper

创建一个新的用户,并加入group,

$ sudo useradd -g zookeeper zookeeper

给新用户设置密码,

$ sudo passwd zookeeper

##1. 单机模式(Standalone mode)
单机模式在开发和调试阶段很有用。

###1.1 下载,解压

$ wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
$ tar zxf zookeeper-3.4.5.tar.gz -C ~/local/opt

###1.2 启动
默认就是单机模式,

$ mv conf/zoo_sample.cfg conf/zoo.cfg
$ ./bin/zdServer.sh start

###1.3 使用java 客户端连接ZooKeeper

$ ./bin/zkCli.sh -server 127.0.0.1:2181

然后就可以使用各种命令了,跟文件操作命令很类似,输入help可以看到所有命令。

####1.4 关闭

$ ./bin/zdServer.sh stop

##2. 分布式模式(Replicated mode)
在生产环境中,要配置成分布式模式,才能发挥威力。

阅读全文 »

Hadoop多用户的配置(Hadoop 2.x)

发表于 2014-02-06   |   分类于 Hadoop   |  

假设我们以名为hadoop的用户,建好了集群,见在CentOS上安装Hadoop 2.x 集群。通常,我们会把这个集群共享给多个用户,而不是让大家都登录为hadoop,这样做有几个好处:

  • 一个用户不能修改另一个用户的的文件
  • 在hadoop web管理页面,可以很方便的看到不同的用户的job

现在集群中有一台机器,上面有一个用户名为 hbase 的用户,他想要使用hadoop集群,怎么配置呢?

##1. 安装hadoop客户端

###1.1 下载,解压
下载跟hadoop集群一样的hadoop软件包,并解压,

$ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
$ tar -zxf hadoop-2.2.0.tar.gz -C ~/local/opt
$ cd ~/local/opt/hadoop-2.2.0

###1.2 拷贝Hadoop集群的配置文件
将Hadoop集群的配置文件全部拷贝到客户端,相当与把集群的信息告诉客户端。

$ scp -r hadoop@localhost:~/local/opt/hadoop-2.2.0/etc/hadoop ./etc/

修改conf/mapred-site.xml中的mapreduce.cluster.local.dir,改为本机上的某个目录,确保这个目录存在且有写权限。因为这个目录是本地目录,每台机器都可以不同。例如我的是:

<property>
  <name>mapreduce.cluster.local.dir</name>
  <value>/home/soulmachine/local/var/hadoop/mapred/local</value>
</property>

确保这个目录存在,

$ mkdir -p ~/local/var/hadoop/mapred/local
阅读全文 »

在CentOS上安装Hadoop 2.x 集群

发表于 2014-02-05   |   分类于 Hadoop   |  

环境:CentOS 6.5, OPenJDK 1.7, Hadoop 2.2.0

本文主要参考官网的文档,Hadoop 2.2.0 Single Node Setup, Hadoop 2.2.0 Cluster Setup

##(可选)创建新用户
一般我倾向于把需要启动daemon进程,对外提供服务的程序,简单的说,就是服务器类程序,安装在单独的用户下面。这样可以做到隔离,运维方面,安全性也提高了。

创建一个新的group,

$ sudo groupadd hadoop

创建一个新的用户,并加入group,

$ sudo useradd -g hadoop hadoop

给新用户设置密码,

$ sudo passwd hadoop

##1 伪分布式模式(Pseudo-Distributed Mode)
Hadoop能在单台机器上以伪分布式模式运行,即每个Hadoop模块运行在单独的java进程里。

###1.1 设置SSH无密码登录localhost
先检查一下是能够无密码登录本机,

ssh localhost

如果提示输入密码,说明不能,按如下步骤设置。

$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

###1.2 下载已经编译好的二进制包,解压
用浏览器下载或wget,

$ wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0.tar.gz
$ tar -zxf hadoop-2.2.0.tar.gz -C ~/local/opt
$ cd ~/local/opt/hadoop-2.2.0

###1.3 设置环境变量

$ vim ~/.bashrc
export HADOOP_PREFIX=$HOME/local/opt/hadoop-2.2.0
export HADOOP_COMMON_HOME=$HADOOP_PREFIX
export HADOOP_HDFS_HOME=$HADOOP_PREFIX
export HADOOP_MAPRED_HOME=$HADOOP_PREFIX
export HADOOP_YARN_HOME=$HADOOP_PREFIX
export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop
export PATH=$PATH:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
阅读全文 »

把Nutch爬虫部署到Hadoop集群上

发表于 2014-02-04   |   分类于 Search-Engine   |  

软件版本:Nutch 1.7, Hadoop 1.2.1, CentOS 6.5, JDK 1.7

前面的3篇文章中,Nutch 快速入门(Nutch 1.7),Nutch 快速入门(Nutch 2.2.1),在Eclipse里运行Nutch,Nutch都是跑在单机上,本文把Nutch部署到Hadoop集群上,在真正的分布式Hadoop集群上跑。

##前提

  • 学会了搭建一个分布式Hadoop集群,见在CentOS上安装Hadoop集群
  • 学会了单机跑Nutch,见Nutch 快速入门(Nutch 1.7)

##1 启动Hadoop集群
伪分布式或真分布式的Hadoop集群都可以,无所谓。

选择一台配置好了的Hadoop客户端的机器(见Hadoop多用户的配置),作为客户机,以下操作均在这台客户机上进行。

##2 下载Nutch源码
有两种方法,

  1. 去官网首页下载apache-nutch-1.7-src.tar.gz
  2. 用svn checkout

    $ svn co https://svn.apache.org/repos/asf/nutch/tags/release-1.7
    

##3 把Hadoop的6个配置文件拷贝到Nutch的conf/目录
将Hadoop的六个配置文件,拷贝到Nutch的conf/目录,相当于把Hadoop集群的配置信息告诉Nutch,

阅读全文 »

Hadoop多用户的配置(Hadoop 1.x)

发表于 2014-02-03   |   分类于 Hadoop   |  

假设我们以名为hadoop的用户,建好了集群,见在CentOS上安装Hadoop集群。通常,我们会把这个集群共享给多个用户,而不是让大家都登录为hadoop,这样做有几个好处:

  • 一个用户不能修改另一个用户的的文件
  • 在hadoop web管理页面,可以很方便的看到不同的用户的job

现在集群中有一台机器,上面有一个用户名为 hbase 的用户,他想要使用hadoop集群,怎么配置呢?

##1. 安装hadoop客户端

###1.1 下载,解压
下载跟hadoop集群一样的hadoop软件包,并解压,

$ wget http://mirror.olnevhost.net/pub/apache/hadoop/common/stable1/hadoop-1.2.1-bin.tar.gz
$ tar -zxf hadoop-1.2.1-bin.tar.gz -C ~/local/opt
$ cd ~/local/opt/hadoop-1.2.1

###1.2 配置
在客户端只需配置集群namenode 和 jobtracker 的相关信息, 把namenode和jobtracker的信息告诉客户端即可。

把hadoop用户下的conf/core-site.xml和conf/mapred-site.xml拷贝到本用户的conf/目录下

$ scp hadoop@localhost:~/local/opt/hadoop-1.2.1/conf/core-site.xml ./conf/
$ scp hadoop@localhost:~/local/opt/hadoop-1.2.1/conf/mapred-site.xml ./conf/

修改conf/mapred-site.xml中的mapred.local.dir,改为本机上的某个目录,确保这个目录存在且有写入。因为这个目录是本地目录,每台机器都可以不同。例如我的是:

<property>
  <name>mapred.local.dir</name>
  <value>/home/soulmachine/local/var/hadoop/mapred/local</value>
</property>

确保这个目录存在,

$ mkdir -p ~/local/var/hadoop/mapred/local
阅读全文 »

在CentOS上安装Hadoop集群

发表于 2014-02-02   |   分类于 Hadoop   |  

Ubuntu上安装,请参考我的另一篇博客,在Ubuntu上安装Hadoop。

环境:CentOS 6.5, OPenJDK 1.7, Hadoop 1.2.1

本文主要参考官网的文档,Hadoop 1.2.1 Getting Started

##1 单机模式(Standalone Mode)
为了能顺利安装成功,我们先练习在单台机器上安装Hadoop。在单台机器上,可以配置成单机模式(Standalone Mode)和伪分布式模式(Pseudo-Distributed Mode),参考官方文档Single Node Setup。

###1.1 下载Hadoop 1.2.1,解压
用浏览器下载或wget,

$ wget http://mirror.olnevhost.net/pub/apache/hadoop/common/stable1/hadoop-1.2.1-bin.tar.gz
$ tar -zxf hadoop-1.2.1-bin.tar.gz -C ~/local/opt
$ cd ~/local/opt/hadoop-1.2.1

###1.2 编辑 conf/hadoop-env.sh,设置 JAVA_HOME

$ echo $JAVA_HOME
/usr/lib/jvm/java
$ vim conf/hadoop-env.sh

取消JAVA_HOME那一行的注释,设置正确的JDK位置

export JAVA_HOME=/usr/lib/jvm/java

###1.3 运行一个job
默认情况下,Hadoop就被配置为Standalone模式了,此时Hadoop的所有模块都运行在一个java进程里。

我们运行一个例子测试一下。下面的几行命令,把 conf下的所有xml文件作为输入,在文件中查找指定的正则表达式,把匹配的结果输出到output目录。

$ mkdir input 
$ cp conf/*.xml input 
$ bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 
$ cat output/*

可以看到正常的结果,说明单机模式运行成功了,下面开始配置伪分布式模式。

阅读全文 »

Nutch 快速入门(Nutch 2.2.1)

发表于 2014-02-01   |   分类于 Search-Engine   |  

本文主要参考Nutch 2.x Tutorial

Nutch 2.x 与 Nutch 1.x 相比,剥离出了存储层,放到了gora中,可以使用多种数据库,例如HBase, Cassandra, MySql来存储数据了。Nutch 1.7 则是把数据直接存储在HDFS上。

##1. 安装并运行HBase
为了简单起见,使用Standalone模式,参考 HBase Quick start

###1.1 下载,解压

wget http://archive.apache.org/dist/hbase/hbase-0.90.4/hbase-0.90.4.tar.gz
tar zxf hbase-0.90.4.tar.gz

###1.2 修改 conf/hbase-site.xml
内容如下

<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>file:///DIRECTORY/hbase</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/DIRECTORY/zookeeper</value>
  </property>
</configuration>

hbase.rootdir目录是用来存放HBase的相关信息的,默认值是/tmp/hbase-${user.name}/hbase; hbase.zookeeper.property.dataDir目录是用来存放zookeeper(HBase内置了zookeeper)的相关信息的,默认值是/tmp/hbase-${user.name}/zookeeper。

###1.3 启动

$ ./bin/start-hbase.sh
starting Master, logging to logs/hbase-user-master-example.org.out
阅读全文 »
123…6
soulmachine

soulmachine

一些技术笔记

60 日志
14 分类
9 标签
RSS
GitHub Twitter 微博 知乎
Links
  • 连城
  • 笨狗随手留下
  • 阎栋
  • 并行实验室
  • JavaChen
  • 沈峰
  • 李海鹏
  • Eric
  • 梁兄的技术博客
  • 王孝舒的博客
  • ForeverLee
  • CMU张宇
© 2017 soulmachine
由 Hexo 强力驱动
主题 - NexT.Pisces