花了两天时间,总算把这些东西弄好了,环境是vmware9虚拟机上的Ubuntu12.04_x86版。做了个简单的测试,跑通了。不过还是有很多不明白的地方,后期再陆续记录。
目前楼主配的是单机模式,分布式模式中遇到的问题以后再做记录。
1.hadoop1.1.2安装配置
参考网址:
http://book.51cto.com/art/201110/298538.htm 第二章(这里有个错误,2.1.3小节中的bin/Hadoop NameNode -format中NameNode要小写:namenode)
http://hadoop.apache.org/docs/r1.0.4/cn/quickstart.html ,这个是官网入门教程,建议全部看一遍。
1.1安装配置环境
去官网下载java1.6,修改/etc/profile,配置环境变量:
# for java environment export JAVA_HOME=/usr/lib/jvm/jdk1.6 #这里是楼主的java目录,你要改成你下载的java目录 export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=${JAVA_HOME}/bin:$PATH配置ssh免密码登陆,不然你每次启动hadoop都要输入用户密码,很烦的。先安装ssh
sudo apt-get install ssh
首先查看用户文件夹下是否存在.ssh文件夹(注意ssh前面有“.”,这是一个隐藏文件夹),楼主的用户文件名为ling,所以输入命令:
ls -a /home/ling如果没有的话就自己建个.ssh文件夹。然后输入:
ssh-keygen -t dsa -P '' -f /home/ling/.ssh/id_dsa
ssh-keygen代表生成密钥;-t(注意区分大小写)表示指定生成的密钥类型;dsa是dsa密钥认证的意思,即密钥类型;-P用于提供密语;-f指定生成的密钥文件。这个命令会在.ssh文件夹下创建两个文件id_dsa及id_dsa.pub,这是SSH的一对私钥和公钥,类似于钥匙及锁,把id_dsa.pub(公钥)追加到授权的key里面去。接下来这把公钥加到用于认证的公钥文件中:
cat /home/ling/.ssh/id_dsa.pub >> /home/ling/.ssh/authorized_keys这里的authorized_keys是用于认证的公钥文件。至此无密码登录本机已设置完毕。验证是否安装成功:
ssh -version楼主显示如下,木有问题:
OpenSSH_5.9p1 Debian-5ubuntu1.1, OpenSSL 1.0.1 14 Mar 2012
Bad escape character 'rsion'.
然后输入:
ssh localhost然后键入yes,hadoop安装前的环境就配好啦!
1.2安装hadoop
修改conf/hadoop-env.sh,指定你的jdk路径:
export JAVA_HOME=/usr/lib/jvm/jdk1.6
修改conf/core-site.xml:
<configuration> <!--这里配置的是HDFS的地址和端口号--> <property> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> </configuration>修改conf/hdfs-site.xml:
<configuration> <!--HDFS的配置,备份方式默认为3,在单机版的Hadoop中,需要将其改为1--> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>修改conf/mapred-site.xml:
<configuration> <!--MapReduce的配置文件,配置的是JobTracker的地址和端口--> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration>
接下来进入hadoop文件夹下执行下面命令,格式化文件系统:
bin/hadoop namenode -format
至此配置完成,接下来启动hadoop:
bin/start-all.sh
打开浏览器,输入下列网址,如果都能查看,说明安装成功。
http://localhost:50030 (MapReduce的Web页面) http://localhost:50070 (HDFS的Web页面)
1.3.问题记录
由于楼主是在虚拟机中做的,每次重启之后要重新format格式化文件系统,不然是运行hadoop后是启动不了localhost:50070的,估计是虚拟机重启时要重新格式化文件系统为Ubuntu默认的,目前楼主想到的是每次不关闭ubuntu,而是选择suspend,下次开VM直接唤醒就行了,如有其他解决方案,还麻烦分享一下~2.hbase0.92.2集成
有关hbase详细,参考官方文档:http://abloz.com/hbase/book.html,以下是hbase与hadoop版本配套使用表,可供参考:
S代表支持,X代表不支持,NT代表没有充分测试,但是可以用。楼主用的是hadoop1.1.2+hbase0.92.2。
2.1.修改配置文件
修改hbase目录下的conf/hbase-env.sh,主要是改java路径:
# Set environment variables here. # The java implementation to use. Java 1.6 required. export JAVA_HOME=/usr/lib/jvm/jdk1.6如果你要将hbase和zookeeper集成的话还要将HBASE_MANAGES_ZK设为false,楼主只用hbase所以设置成true:
export HBASE_MANAGES_ZK=true
配置conf/hbase-site.xml:
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://localhost:9000/hbase</value> </property> <!-- <property> <name>hbase.cluster.distributed</name> <value>true</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>hbase.master</name> <value>localhost:60000</value> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> </property> --> </configuration>单机模式下只需要配置hbase.rootdir即可,注释掉的大家可以先无视。。。
至此配置完毕执行bin/start-all.sh和bin/stop-all.sh可开启和关闭hbase服务。
2.2问题记录
1.楼主在关闭hbase的时候好慢有木有!网上查了下,说是直接stop-all.sh很慢,要先执行bin/hbase-daemon.sh stop master,然后执行bin/stop-hbase.sh。
2.运行bin/hbase shell创建表的时候出现了org.apache.hadoop.hbase.PleaseHoldException: Master is initializing....的错误,要修改你的/etc/hosts文件
127.0.0.1 localhost 127.0.0.1 ubuntu.ubuntu-domain ubuntu该问题的详细描述见官网: http://hbase.apache.org/book/quickstart.htm
3.nutch2.2.1配置
参考:http://blog.csdn.net/skywalker_only/article/category/1842591。
3.1.ant编译
nutch2.2.1需要自己编译,在nutch主目录下执行ant命令(如果没有ant自己apt-get安装一个),第一次可能要编译很长时间,耐心等待,下次就会很快了。
如果你最后看到了build success那么恭喜你了,如果build faild,那就看输出的错误信息,也可以看一下我的问题记录。
编译成功之后nutch下面会多出build和runtime文件夹。如果你的nutch配置的是本机模式,那么你要关心一下runtime下的local文件夹了,因为本机模式的配置文件都在local的conf下面。
3.2.与hbase集成
配置ivy/ivy.xml,由于要使用hbase来存储,所以找到下面这一行,并去掉原有的注释使之生效:
<dependency org="org.apache.gora" name="gora-hbase" rev="0.3" conf="*->default" />
配置 conf/gora.properties,设置gora后台用hbase做存储:
gora.datastore.default=org.apache.gora.hbase.store.HBaseStore
配置conf/nutch-site.xml:
<property> <name>storage.data.store.class</name> <value>org.apache.gora.hbase.store.HBaseStore</value> </property> <property> <name>http.agent.name</name> <value>NutchCrawler</value> </property> <property> <name>http.robots.agents</name> <value>NutchCrawler,*</value> </property>
然后再执行ant重新编译一遍,配置完成!
3.3.问题记录
1.编译时出现请求超时,连接失败什么的信息,可以修改ivy/ivysettings.xml下的url路径,找到下面这一行:<property name="repo.maven.org" value="http://repo1.maven.org/maven2/" override="false"/>
将其中的value值替换为http://mirrors.ibiblio.org/maven2/。(编译完成后记得改回来)
2.由于我们用的是hbase0.92.2,而gora依赖的是0.90版的,所以要把hbase0.92目录下的两个jar包复制到nutch的lib下面(本机模式是rumtime/local/lib,分布式模式是deploy文件夹下那个apache-nutch2.2.1.job压缩包里面的lib),还要把原来的hbase-0.90.x的jar包给删掉,不然会报错。
4.solr配置
1.官网上下载最新版本(楼主的是4.6.1)
2.由于nutch和solr默认的依赖是solr 3.x, 需要在schema.xml中将其替换为solr 4.x:
Nutch2.x自带的shema-solr.xml中少了一个_version_ field字段,将以下内容加到<!-- core fileds -->的boost filed之后
将nutch/runtime/local/conf目录下的schema-solr4.xml里面的内容复制到当前目录的schema.xml里面
将nutch/runtime/local/conf目录下的schema-solr4.xml里面的内容复制到$SOLR_HOME/example/solr/collection1/conf/schema.xml
浏览器输入以下地址,验证配置是否正确:
http://localhost:8983/solr/#/
5集成测试
1.依次启动hadoop,hbase,nutch,solr。
2.在nutch目录下的runtime/local/bin/下面执行nutch的crawl命令进行网页抓取:有两中方法:
批处理命令: bin/nutch crawl urls -solr http://localhost:8983/solr/ -depth 3 -topN 10
单步执行命令:
bin/nutch inject urls bin/nutch generate -topN 10 bin/nutch fetch -all bin/nutch parse -all bin/nutch updatedb bin/nutch solrindex http://localhost:8983/solr/ -reindex
各个命令参数的说明见官网: bin/nutch命令说明