Hadoop+Zookpeeper+Hbase+Nutch 2.3+Solr4.8.1部署笔记
博客专区 > VictorHu 的博客 > 博客详情
Hadoop+Zookpeeper+Hbase+Nutch 2.3+Solr4.8.1部署笔记
VictorHu 发表于2年前
Hadoop+Zookpeeper+Hbase+Nutch 2.3+Solr4.8.1部署笔记
  • 发表于 2年前
  • 阅读 171
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: Linux版本:CentOS 6.5 JDK版本:Jdk 1.7.0_75 Tomcat 版本:Tomcat 8.0.9 Hadoop版本:Hadoop 2.5.2 Zookeeper版本:Zookeeper 3.4.6 Hbase版本:Hbase 0.98.8 Solr版本:Solr 4.8.1 Nutch版本:Nutch 2.3.1

环境

Linux版本:CentOS 6.5
JDK版本:Jdk 1.7.0_75
Tomcat 版本:Tomcat 8.0.9
Hadoop版本:Hadoop 2.5.2
Zookeeper版本:Zookeeper 3.4.6
Hbase版本:Hbase 0.98.8
Solr版本:Solr 4.8.1
Nutch版本:Nutch 2.3.1

内容

1.设置安装环境

我这里用了3台主机进行集群,具体主机名、IP地址划分如下:

主机名 		 	IP
-----------------------------
Master.Hadoop	10.192.87.208
Slave1.Hadoop	10.192.87.200
Slave2.Hadoop	10.192.87.201

1.1 分别修改3台主机的主机名和IP地址、host

可以通过修改/etc/sysconfig/network文件的方法修改主机名如下:

[root@localhost conf]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=Master.Hadoop 

通过修改/etc/sysconfig/network-scripts/ifcfg-eth0文件的方式修改IP地址:

[root@Master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

通过以上方式分别修改3台主机的主机名和IP地址。

修改/etc/hosts文件(3主机一样):

[hadoop@Master ~]$ sudo vi /etc/hosts

添加如下内容:

10.192.87.208  Master.Hadoop	
10.192.87.200  Slave1.Hadoop	
10.192.87.201  Slave2.Hadoop	

1.2 新建用户hadoop,并赋予执行所用命令的权限(统一)

方法如下:

[root@Master ~]# useradd hadoop
[root@Master ~]# passwd hadoop
[root@Master ~]# vi /etc/sudoers

添加如下内容

输入图片说明

1.3 在/usr/目录下新建java/、hadoop/、hbase/、zookeeper/目录(统一),在Master.Hadoop主机/usr/目录下另外新建nuth/、solr/目录

Master.Hadoop主机的命令如下:

[hadoop@Master usr]$sudo mkdir /usr/java hadoop hbase zookeeper nutch solr
[hadoop@Master usr]$sudo chown -R hadoop:hadoop hadoop hbase zookeeper nutch solr

1.4 把jdk、hadoop、hbase、zookeeper 、nutch、solr的安装包分别拷贝到相应目录。

拷贝的方法很多,我这里使用的是ssh的SecureFX。 hbase安装包的解压命令如下:

[hadoop@Master usr]$ cd /usr/hbase
[hadoop@Master hbase]$ sudo tar -zxvf hbase-0.98.8.tar.gz

其他安装包方法同上。

1.5 设置jdk环境变量

通过修改/etc/profile文件的方式设置环境变量:

[hadoop@Master hbase]$ sudo vi /etc/profile

添加如下内容:

#set JDK environment
JAVA_HOME=/usr/java/jdk1.7.0_75
JRE_HOME=$JAVA_HOME/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH

让修改生效:

[hadoop@Master hbase]$ source /etc/profile

验证一下是否生效:

[hadoop@Master hbase]$ java -version
java version "1.7.0_75"
Java(TM) SE Runtime Environment (build 1.7.0_75-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.75-b04, mixed mode)

1.6 关闭Iptables、Selinux

这里为了方便配置,直接把Iptables、Selinux关闭,实际生产环境中可以添加策略进行配置。

1.7 配置ssh,发布公钥证书

因为Hadoop主机间通过ssh连接,所以需要配置ssh免密码登录。 我的机器ssh默认安装的,如果没有安装,可以通过以下命令进行安装:

[hadoop@Master ~]# yum install ssh* -y

由Master.Hadoop发布公钥证书,要切换的hadoop用户下。 主机Master.Hadoop操作:

[hadoop@Master ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

这个条命令会在~/.ssh/目录会生成id_rsa和id_rsa.pub两个文件,将id_rsa.pub复制一份在~/.ssh/目录下,并重命名为authorized_keys,如果是单机搭建伪分布式,此时ssh的准备工作已经完成了,如果使用全分布式环境,那么需要将authorized_keys(或authorized_keys中的内容追加到需要无密码登陆的服务器的~/.ssh/authorized_keys文件中)及id_rsa(或id_rsa中的内容追加到需要无密码登陆的服务器的~/.ssh/id_rsa文件中)两个文件复制到各台分布式slave机器的~/.ssh目录中,这样任意两台机器之间互相通过ssh访问,都不需要输入密码了,如果只是拷贝到authorized_keys到slave机器中,就只能够实现主到从的不输密码访问。

[hadoop@Master ~]$ cd .ssh/
[hadoop@Master .ssh]$ cp id_rsa.pub authorized_keys

测试一下是否成功:

[hadoop@Master .ssh]$ ssh 10.192.87.177
The authenticity of host '10.192.87.177 (10.192.87.177)' can't be established.
RSA key fingerprint is f6:e2:37:2c:fb:53:39:d9:1c:62:97:4f:0f:40:1a:e6.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.192.87.177' (RSA) to the list of known hosts.
[hadoop@Master ~]$ logout
Connection to 10.192.87.177 closed.

好了,不用输密码就可以了。

注:如果需要远程登陆的服务器上还没有.ssh目录,那么就在登陆用户的目录下新建.ssh目录,权限至少设置成744,如果.ssh目录下没有authorized_keys文件,也新建该文件,并将其权限设置为644。

主机Slave1.Hadoop、Slave2.Hadoop

1.8 禁用IPV6

启用IPV6,Hadoop启动的时候会有些问题,所以这里就禁用掉。 方法一: 修改 /etc/sysctl.conf配置文件

[hadoop@Master ~]$ sudo vi /etc/sysctl.conf

添加如下内容:

# disable ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

然后,保存,重启。 要想查看是否启用了IPV6,可以通过以下命令:

[hadoop@Master ~]$ cat /proc/sys/net/ipv6/conf/all/disable_ipv6

如果返回0,就是启用;1,就是禁用。

方法二:

通过修改Hadoop的配置文件/usr/hadoop/hadoop-1.1.2/conf/hadoop-env.sh

[hadoop@Master ~]$ cd /usr/hadoop/hadoop-1.1.2/conf/
[hadoop@Master conf]$ vi hadoop-env.sh

添加如下内容:

export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true

然后,重启Hadoop。

1.9 修改进程最大文件打开数

[hadoop@Master ~]$vi /etc/security/limits.conf

# End of file  
*   -  nofile  1000000  
*   -  nproc   1000000  


[hadoop@Master ~]$vi /etc/profile
 
ulimit -u 1000000

[hadoop@Master ~]$source /etc/profile

查看:

[hadoop@Master ~]$ ulimit -an
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 22947
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1000000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1000000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
[hadoop@Master ~]$ ulimit -an
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 22947
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1000000
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1000000
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

1.10 设置定时自动更新系统时间

1.10.1 安装ntpdate

[hadoop@Master ~]$ sudo yum install ntpdate -y

1.10.2 添加定时任务

[hadoop@ Master ~]$ su - root
Password: 
[root@ Master ~]# echo '*/5 * * * * /usr/sbin/ntpdate time.windows.com >/dev/null 2 >&1' >>/var/spool/cron/root

2.安装Hadoop

2.1 设置环境变量(三台主机都要进行,这里已Master.Hadoop为例)

[hadoop@Master ~]$ sudo vi /etc/profile

添加如下内容:

#set Hadoop environment

HADOOP_HOME=/usr/hadoop/hadoop-2.5.2
PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_HOME PATH

[hadoop@Master ~]$ source /etc/profile

2.2 修改配置文件(三台主机都要进行,这里已Master.Hadoop为例)

2.2.1 设置$HADOOP_HOME/etc/hadoop/hadoop-env.sh

这个文件中设置的是Hadoop运行时需要的环境变量

[hadoop@Master ~]$ cd /usr/hadoop/hadoop-2.5.2/etc/hadoop/
[hadoop@Master hadoop]$ vi hadoop-env.sh

找到export JAVA_HOME=修改为:

输入图片说明

2.2.2 配置$HADOOP_HOME/etc/hadoop/core-site.xml

[hadoop@Master hadoop]$ sudo vi core-site.xml

修改如下如下内容:

<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://Master.Hadoop:9000</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/usr/hadoop/hadoop-2.5.2/tmp</value>
    <description>A base for other temperary directory</description>
  </property>
</configuration>

注:/usr/hadoop /hadoop-2.5.2/tmp要手动创建

[hadoop@Master hadoop]$ mkdir /usr/hadoop/hadoop-2.5.2/tmp

2.2.4 配置$HADOOP_HOME/etc/hadoop/mapred-site.xml文件

[hadoop@Master hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@Master hadoop]$ vi mapred-site.xml

修改如下:

<configuration>
 <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    <final>true</final>
 </property>
 <property>
    <name>mapreduce.jobtracker.http.address</name>
    <value>Master.Itble:50030</value>
 </property>
 <property>
    <name>mapreduce.jobhistory.address</name>
    <value>Master.Itble:10020</value>
 </property>
 <property>
    <name>mapreduce.jobhistory.admin.address</name>
    <value>Master.Itble:10033</value>
 </property>
 <property>
    <name>mapreduce.tasktracker.http.address</name>
    <value>Master.Itble:50060</value>
 </property>
 <property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>Master.Itble:19888</value>
 </property>  
</configuration>

2.2.5 配置$HADOOP_HOME/etc/hadoop/hdfs-site.xml文件

[hadoop@Master hadoop]$ vi hdfs-site.xml

修改为如下:

<configuration>
	<property>
        <name>dfs.replication</name>
	    <value>2</value>
	</property>
	<property>
    	<name>dfs.namenode.secondary.http-address</name>
    	<value>Master.Hadoop:9001</value>
	</property>
	<property>
		<name>dfs.http.address</name>
		<value>Master.Hadoop:50070</value>
		<description>The address and the base port where the dfs namenode web ui will listen on.If the port is 0 then the server will start on a free port.
 		</description>
	</property>
	<property>
 		<name>dfs.namenode.secondary.http-address</name>
 		<value>Master.Hadoop:50090</value>
	</property>
	<property>
    	<name>dfs.namenode.name.dir</name>
    	<value>file:///usr/hadoop/hadoop-2.5.2/dfs/name</value>
	</property>
	<property>
    	<name>dfs.datanode.data.dir</name>
    	<value>file:///usr/hadoop/hadoop-2.5.2/dfs/data</value>
</property>
    <property>
            <name>dfs.datanode.max.transfer.threads</name>
            <value>8192</value>
    </property>
</configuration>

2.2.6 配置$HADOOP_HOME/etc/hadoop/yarn-site.xml文件

[hadoop@Master hadoop]$ vi yarn-site.xml

修改如下:

<configuration>
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>Master.Hadoop</value>
		<description>ResourceManager host</description>
	</property>
	<property>  
    	<name>yarn.nodemanager.aux-services</name>  
    	<value>mapreduce_shuffle</value>  
	</property>
            <property>
            <name>yarn.log-aggregation-enable</name>
            <value>true</value>
            </property>
            <property>
            <name>yarn.log-aggregation.retain-seconds</name>
            <value>864000</value>
            </property>
            <property>
            <name>yarn.nodemanager.remote-app-log-dir</name>
            <value>/tmp/hadoop-yarn/aggrelogs</value>
            </property>
</configuration>

2.2.7 修改$HADOOP_HOME/etc/hadoop/slaves文件

[hadoop@Master hadoop]$ vi slaves

内容如下:

Slave1.Hadoop
Slave2.Hadoop

2.3 启动并验证

2.3.1 格式化namenode(3台主机都要进行)

[hadoop@Master hadoop]$ hadoop namenode -format

2.3.2 启动(Master主机进行)

[hadoop@Master logs]$ start-all.sh

输入图片说明

> 启动的时候,出现了一条警告信息。在网上搜了下,是因为hadoop的本地库是在32位环境下编译,运行在64位环境下就出现了这个问题。有两个解决方案: > 一是自己下载hadoop的源码包,自己编译。 > 二是下载在64位环境下编译的hadoop的本地库文件,替换原来的32位本地库。 > 替换,重新启动. > OK了。

2.3.3 验证

通过jps命令查看运行进程:

Masrer.Hadoop2:

输入图片说明

Slave1.Hadoop2:

输入图片说明

Slave2.Hadoop2:

输入图片说明

3.安装Zookeeper

Zookeeper的安装比较简单:

3.1 修改配置文件zoo.cfg

[hadoop@Master ~]$ cd /usr/zookeeper/zookeeper-3.4.6/conf
[hadoop@Master conf]$ cp zoo_sample.cfg  zoo.cfg
[hadoop@Master conf]$ vi zoo.cfg

内容如下:

tickTime=2000
initLimit=10
syncLimit=5
clientPort=2181
dataDir=/usr/zookeeper/zookeeper-3.4.6/data
dataLogDir=/usr/zookeeper/zookeeper-3.4.6/log

server.1=Master.Hadoop:2888:3888
server.2=Slave1.Hadoop:2888:3888
server.3=Slave2.Hadoop:2888:3888

3.2 在/usr/zookeeper/zookeeper-3.4.6/下创建目录data/,log/,并在新建myid文件。

具体如下:

[hadoop@Master ~]$ cd /usr/zookeeper/zookeeper-3.4.6
[hadoop@Master zookeeper-3.4.6]$ mkdir log data
[hadoop@Master zookeeper-3.4.6]$ cd data
[hadoop@Master data]$ echo “1”>myid

> 注:myid里面的内容要和zoo.cfg里面配置的server.X中的X是对应的,Master主机对应的就是“1”。

3.3 启动

三台主机要分别取启动,这里以Master为例:

[hadoop@Master ~]$ cd /usr/zookeeper/zookeeper-3.4.6
[hadoop@Master zookeeper-3.4.6]$ bin/zkServer.sh start

输入图片说明

可以查看运行状态:

输入图片说明

4.安装Hbase(三台主机配置一样)

因为官方的hbase-0.98.8-hadoop2-bin是在hadoop2.2版本下编译的,这里我们要重新编译成hadoop2.5.2的。

4.1 修改hbase文件夹所有者

[hadoop@Master ~]$ sudo chown -R hadoop:hadoop /usr/hbase

4.2 修改配置文件

4.2.1 配置hbase-site.xml

[hadoop@Master ~]$ cd cd /usr/hbase/hbase-0.98.8-hadoop2/conf
[hadoop@Master hadoop]$ vi hbase-site.xml

修改如下:

<configuration>
	<property>
		<name>hbase.zookeeper.quorum</name>
		<value>Master.Hadoop,Slave1.Hadoop,Slave2.Hadoop</value>
	</property>
	<property>
		<name>hbase.rootdir</name>
		<value>hdfs://Master.Hadoop:9000/hbase</value>
	</property>
	<property>
		<name>hbase.cluster.distributed</name>
		<value>true</value>
	</property>  
	<property>
		<name>hbase.master</name>
		<value>60000</value>
	</property>
</configuration>

4.2.2 配置regionservers

[hadoop@Master hadoop]$ vi regionservers

修改如下:

Slave1.Hadoop
Slave2.Hadoop

4.2.3 配置hbase-env.sh

修改JAVA_HOME,关闭内置zookeeper

[hadoop@Master hadoop]$  vi hbase-env.sh

修改如下:

export JAVA_HOME=/usr/java/jdk1.7.0_75
export HBASE_MANAGES_ZK=false

4.4.4 启动hbase及验证

只在Master.Hadoop进行以下命令:

[hadoop@Master ~]$ cd /usr/hbase/hbase-0.98.8-hadoop2/
[hadoop@Master hbase-0.98.8-hadoop2]$ bin/start-hbase.sh

输入图片说明

通过jsp查看:

Master.Hadoop:

输入图片说明

Slave1.Hadoop:

输入图片说明

Slave2.Hadoop:

输入图片说明

在Master.Hadoop上执行,启动hbase前要确保hadoop正常运行:

[hadoop@Master hbase-0.98.8-hadoop2]$ bin/hbase shell

正常运行。

> 注: > 1.启动要按照hadoop->zookeeper->hbase的顺序,关闭要按照相反的顺序: hbase->hadoop > 2.因为三台主机都要配置hadoop和hbase,而且内容相差不大,可以通过先Master,然后把配置好的hadoop和hbase传到另外两台主机上。传输方法很多,我这里使用的是scp命令: > > 这里以hbase为例: [hadoop@Master hbase]$ scp -r hbase/ hbase-0.98.8-hadoop2 hadoop@Slave1.Hadoop:/usr/hbase/ [hadoop@Master hbase]$ scp -r hbase/ hbase-0.98.8-hadoop2 hadoop@Slave2.Hadoop:/usr/hbase/

5.安装Nutch

5.1 安装Ant

Nutch2.X都是src包,需要用Ant编译。 安装步骤同JAVA,设置环境变量:

[hadoop@Master apache-ant-1.9.4]$ sudo vi /etc/profile

添加如下内容:

#set ant environment

ANT_HOME=/usr/ant/apache-ant-1.9.4
CLASS_PATH=$CLASS_PATH:$ANT_HOME/lib
PATH=$PATH:$ANT_HOME/bin

export ANT_HOME CLASS_PATH PATH

让修改生效:

[hadoop@Master apache-ant-1.9.4]$ source /etc/profile

5.2 编译Nutch

前面已经把Nutch的安装包上传,解压,下面只需要进行一些配置。

5.2.1 配置/usr/nutch/apache-nutch-2.3/conf/nutch-site.xml文件:

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/conf/
[hadoop@Master hadoop]$ vi nutch-site.xml

内容如下:

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

	<property>
 		<name>http.agent.name</name>
 		<value>JustinNutchAgent</value>
	</property>
    <property>
         <name>http.content.limit</name>
         <value>655360</value>
         <description>The length limit for downloaded content using the http protocol, in bytes. If this value is nonnegative (>=0), content longer than it will be truncated; otherwise, no truncation at all. Do not confuse this setting with the file.content.limit setting.
        </description>
    </property>    
	<property>
		<name>plugin.includes</name>
		<value>protocol-httpclient|urlfilter-regex|query-(basic|site|url|lang)|indexer-solr|nutch-extensionpoints|parse-(text|html|msexcel|msword|mspowerpoint|pdf)|summary-basic|scoring-opic|urlnormalizer-(pass|regex|basic)protocol-http|urlfilter-regex|parse-(html|tika|metatags)|index-(basic|anchor|more|metadata)</value>
	</property>

	<property>
		<name>io.serializations</name>
		<value>org.apache.hadoop.io.serializer.WritableSerialization</value>
		<description>A list of serialization classes that can be used forobtaining serializers and deserializers.</description>
	</property>
</configuration>

5.2.2 配置/usr/nutch/apache-nutch-2.3/ivy/ivy.xml文件

找到如下内容:

<dependency org="org.apache.gora" name="gora-core" rev="0.6" conf="*->default"/>
<dependency org="org.apache.gora" name="gora-hbase" rev="0.6" conf="*->default" />
<dependency org="org.apache.gora" name="gora-compiler-cli" rev="0.6" conf="*->default"/>
<dependency org="org.apache.gora" name="gora-compiler" rev="0.6" conf="*->default"/>

确保此配置生效,即如果发现此配置有注释,去掉注释。

注意:rev=0.5对应的Hbase版本是Hbase0.94.14,rev=0.3对应的Hbase版本是hbase0.90.4。

默认情况下,此语句被注释掉,将其注释符号去掉,使其生效。

将hadoop相关的注释掉,然后添加:

<dependency org="org.apache.hadoop" name="hadoop-client" rev="2.5.2" conf="*->default"/>
<dependency org="org.apache.hbase" name="hbase-common" rev="0.98.8-hadoop2" conf="*->default"/>

如下面这两个,注释掉。

<dependency org="org.apache.hadoop" name="hadoop-core"  rev="1.2.1" conf="*->default”>  
<dependency org="org.apache.hadoop" name="hadoop-test" rev="1.2.1" conf="test->d

5.2.3 修改gora.properties

/usr/nutch/apache-nutch-2.3/conf/gora.properties文件中查找“gora.datastore.default”修改为如下内容:

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

5.2.4 根据需要修改网页过滤器(regex-urlfilter.txt)

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/conf/
[hadoop@Master hadoop]$ vi regex-urlfilter.txt

修改如下:

# accept anything else
+^http://([a-z0-9]*\.)*sohu.com

5.2.5 执行编译

在/usr/nutch/apache-nutch-2.3目录下,执行:ant runtime命令,进行编译

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/
[hadoop@Master ~]$ sudo ant runtime

> 注:编译的时候,要有root权限

5.2.7 添加要爬取的网站地址(编译完之后)

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/runtime/deploy/
[hadoop@Master deploy]$ mkdir urls
[hadoop@Master deploy]$ cd urls
[hadoop@Master urls]$ echo 'http://www.sohu.com'>seeds.txt

5.2.8 上传的hdfs,完成种子url的注入

[hadoop@Master deploy]$ hadoop dfs -put urls urls

5.2.9 集成Solr

/usr/nutch/apache-nutch-2.3/conf/schemal.xml 拷贝到/usr/solr/solr-4.8.1/example/solr/collection1/conf/替换掉原来的schemal.xml。

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/conf/
[hadoop@Master hadoop]$ cp schema.xml /usr/solr/solr-4.8.1/example/solr/collection1/conf/

5.2.10 运行Solr

[hadoop@Master ~]$ cd /usr/solr/solr-4.8.1/example/
[hadoop@Master example]$ java -jar start.jar

5.2.11 根据Slave数量修改bin/crawl脚本

[hadoop@Master ~]$ vi /usr/nutch/apache-nutch-2.3/runtime/deploy/bin/crawl
# set the number of slaves nodes
numSlaves=2

5.2.12 运行Nutch,爬取数据

[hadoop@Master deploy]$ bin/crawl urls CrawlTest http://Master.Hadoop:8983/solr 2

结果:虽然爬取到了数据,用Solr也可以查到,但出现了一个异常:

输入图片说明

在jar包里找了下,有这个类,但是hadoop无法识别,可以通过修改源代码纠正,具体如下:

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/src/java
[hadoop@Master java]$ vi /org/apache/nutch/indexer/solr/SolrDeleteDuplicates.java

找到Job job = new Job(getConf(), "solrdedup");在下面添加如下代码:

job.setJarByClass(SolrDeleteDuplicates.class);

然后重新用Ant编译。重新爬取,正常了。

> 注:conf 下面的配置文件都会被打包到Ant后生成的job文件中,所以如果修改过滤规则,要重新用Ant编译。

6.配置SolrCloud

> SolrCloud是基于Solr和Zookeeper的分布式搜索方案。SolrCloud通过 ZooKeeper集群来进行协调,使一个索引进行分片,各个分片可以分布在不同的物理节点上,多个物理分片组成一个完成的索引Collection。SolrCloud自动支持Solr Replication,可以同时对分片进行复制,冗余存储。

6.1 配置SolrCloud

6.1.1 创建solrcloud文件目录,并所属者改为hadoop

[hadoop@Master ~]$ sudo mkdir -p /usr/solrcloud/{multicore,solr-lib}
[hadoop@Master ~]$ sudo chown -R hadoop:hadoop /usr/solrcloud

6.1.2 配置lib

/usr/solr/solr-4.8.1/example/solr-webapp/webapp/WEB-INF/lib//usr/solr/solr-4.8.1/example/lib/ext/目录下的文件都拷贝到/usr/solrcloud/solr-lib/目录下:

[hadoop@Master ~]$ cd /usr/solrcloud/solr-lib
[hadoop@Master solr-lib]$ cp /usr/solr/solr-4.8.1/example/solr-webapp/webapp/WEB-INF/lib/* ./
[hadoop@Master solr-lib]$ cp /usr/solr/solr-4.8.1/example/lib/ext/* ./

6.1.3 创建配置文件目录

/usr/solr/example/solr/collection1/conf/目录下的文件拷贝到/usr/solrcloud/multicore/collection/conf/目录下,将/usr/solr/example/solr/multicore/下的solr.xmlzoo.cfg拷贝到/usr/solrcloud/multicore目录下:

[hadoop@Master ~]$ mkdir -p /usr/solrcloud/multicore/collection/{conf,data}
[hadoop@Master ~]$ cd /usr/solrcloud/multicore/collection/conf/
[hadoop@Master conf]$ cp -r /usr/solr/solr-4.8.1/example/solr/collection1/conf/* ./
[hadoop@Master multicore]$ cd /usr/solrcloud/multicore
[hadoop@Master multicore]$ cp /usr/solr/solr-4.8.1/example/multicore/{solr.xml,zoo.cfg} ./

6.1.4 将/usr/nutch/apache-nutch-2.3/conf/schema.xml拷贝到/usr/solrcloud/multicore/collection/conf/目录,替换掉原来schema.xml,并进行编辑:

[hadoop@Master ~]$ cd /usr/solrcloud/multicore/collection/conf/
[hadoop@Master conf]$ cp /usr/nutch/apache-nutch-2.3/conf/schema.xml ./
[hadoop@Master conf]$ vi schema.xml

这里修改2个地方:

1>

<dynamicField name="meta_*" type="string" stored="true" indexed="true" />

给这个字段添加multiValued="true"属性。 修改后为: <dynamicField name="meta_*" type="string" stored="true" indexed="true" multiValued="true" />

2>

<solrQueryParser defaultOperator="OR"/>

把“OR”改为“AND”,修改后为: <solrQueryParser defaultOperator="AND"/>

6.1.5 修改solr.xml,如下内容

<solr persistent="true">
   <cores adminPath="/admin/cores" host="${host:}" hostPort="${jetty.port:8080}" hostContext="${hostContext:solr}">
  <shardHandlerFactory name="shardHandlerFactory" class="HttpShardHandlerFactory">
  <str name="urlScheme">${urlScheme:}</str>
</shardHandlerFactory></cores>
</solr>

6.1.6 通过Zookeeper管理配置文件

上传配置文件

java -classpath .:/usr/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig --zkhost Master.Hadoop:2181,Slave1.Hadoop:2181,Slave2.Hadoop:2181  --confdir /usr/solrcloud/multicore/collection/conf --confname myconf  

把collection和配置文件关联

java -classpath .:/usr/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd linkconfig --collection collection1 --confname myconf --zkhost Master.Hadoop:2181,Slave1.Hadoop:2181,Slave2.Hadoop:2181

6.2 配置Tomcat

Tomcat的安装,这里就不在详细说了。只把和SolrCloud配置相关的内容讲一下。

6.2.1 部署solr

/usr/solr/solr-4.8.1/example/webapps/solr.war复制到/usr/tomcat/apache-tomcat-8.0.9/webapps/目录

[hadoop@Master ~]$ cd /usr/solr/solr-4.8.1/example/webapps
[hadoop@Master webapps]$ cp solr.war /usr/tomcat/apache-tomcat-8.0.9/webapps/

6.2.2 启动Tomcat

/usr/tomcat/apache-tomcat-8.0.9/webapps/下面的solr.war会自动部署 [hadoop@Master webapps]$ cd /usr/tomcat/apache-tomcat-8.0.9 [hadoop@Master apache-tomcat-8.0.9]$ bin /startup.sh

6.2.3 修改solr_home

修改/usr/tomcat/apache-tomcat-8.0.9/webapps/solr/WEB-INF/web.xml,修改内容为下:

<env-entry>
   <env-entry-name>solr/home</env-entry-name>
   <env-entry-value> /usr/solrcloud/multicore </env-entry-value>
   <env-entry-type>java.lang.String</env-entry-type>
</env-entry>

把注释去掉,其中红色部分为修改内容。

6.2.4 添加log4j配置文件

/usr/solr/solr-4.8.1/example/lib/ext下面所有的文件和/usr/solr/solr-4.8.1/example/resources/log4j.properties拷贝到/usr/tomcat/apache-tomcat-8.0.9/lib/目录:

cd /usr/solr/solr-4.8.1/example/lib/ext
cp * /usr/tomcat/apache-tomcat-8.0.9/lib/
cd /usr/solr/solr-4.8.1/example/resources/
cp log4j.properties /usr/tomcat/apache-tomcat-8.0.9/lib/

6.2.5 修改启动参数

修改/usr/tomcat/apache-tomcat-8.0.9/bin/catalina.sh文件,添加如下代码:

JAVA_OPTS="-server –Xmx800m –Xms800m -verbose:gc -Xloggc:solr_gc.log -Dsolr.solr.home=/usr/solrcloud/multicore -DzkHost=Master.Hadoop:2181,Slave1.Hadoop:2181,Slave2.Hadoop:2181"

重启Tomcat,在浏览器输入http://Master.Hadoop:8080/solr

cd /usr/tomcat/apache-tomcat-8.0.9/bin shutdown.sh startup.sh

6.3 配置IK分词

6.3.1 修改配置文件

修改/usr/solrcloud/multicore/collection/conf/schemal.xml文件 在&lt;types&gt;&lt;/types&gt;标签内添加如下内容:

<fieldType name="text_ik" class="solr.TextField">
   <analyzer type="index" isMaxWordLength="false" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
   <analyzer type="query" isMaxWordLength="true" class="org.wltea.analyzer.lucene.IKAnalyzer"/>
</fieldType>

然后,修改所要进行分词的字段的类型我这里以content字段为例,修改后如下:

<field name="content" type="text_ik" stored="true" indexed="true" termVectors="true"/>

6.3.2 配置完之后,要重新上传配置文件到Zookeeper

上传配置文件

java -classpath .:/usr/solrcloud/solr-lib/* org.apache.solr.cloud.ZkCLI -cmd upconfig --zkhost Master.Hadoop:2181,Slave1.Hadoop:2181,Slave2.Hadoop:2181  --confdir /usr/solrcloud/multicore/collection/conf --confname myconf  

6.3.3 添加jar包

把Ik所需的jar包和配置文件拷贝到/usr/tomcat/apache-tomcat-8.0.9/webapps/solr/WEB-INF/目录

6.3.4 创建collection和replicate

创建一个名为mycollection的collection,分成3个shard,每个shard有1个replicat:

curl 'http://Master.Hadoop:8080/solr/admin/collections?action=CREATE&name=mycollection&numShards=3&replicationFactor=1'

打开浏览器,可以看到如下:

输入图片说明

下面使用nutch重新抓取,创建索引:

[hadoop@Master ~]$ cd /usr/nutch/apache-nutch-2.3/runtime/deploy
[hadoop@Master deploy]$ bin/crawl urls CrawlTest http://Master.Hadoop:8080/solr/mycollection 1

完成后,分别查看,各SolrCloud各节点索引:

Master.Hadoop:

输入图片说明

Slave1.Hadoop:

输入图片说明

Slave3.Hadoop:

输入图片说明

6.4 配置SolrCloud使用HDFS存储

6.4.1 修改tomcat启动参数

编辑/usr/tomcat/apache-tomcat-8.0.9/bin/catalina.sh 添加红色部分

JAVA_OPTS="-server -Xmx800m –Xms800m -verbose:gc -Xloggc:solr_gc.log -XX:MaxDirectMemorySize=1g -Dsolr.directoryFactory=HdfsDirectoryFactory -Dsolr.lock.type=hdfs -Dsolr.hdfs.home=hdfs://Master.Hadoop:9000/solr -Dsolr.solr.home=/usr/solrcloud/multicore -DzkHost=Master.Hadoop:2181,Slave1.Hadoop:2181,Slave2.Hadoop:2181"

6.4.2 修改配置文件

修改/usr/solrcloud/multicore/collection/conf/solrconfig.xml文件 添加这部分:

<directoryFactory name="DirectoryFactory" class="solr.HdfsDirectoryFactory">  
	<str name="solr.hdfs.home">hdfs://Master.Hadoop:9000/solr</str>
	<bool name="solr.hdfs.blockcache.enabled">true</bool>  
   <int name="solr.hdfs.blockcache.slab.count">1</int>  
   <bool name="solr.hdfs.blockcache.direct.memory.allocation">true</bool>  
   <int name="solr.hdfs.blockcache.blocksperbank">16384</int> 
   <bool name="solr.hdfs.blockcache.read.enabled">true</bool>  
   <bool name="solr.hdfs.blockcache.write.enabled">true</bool>  
   <bool name="solr.hdfs.nrtcachingdirectory.enable">true</bool>  
   <int name="solr.hdfs.nrtcachingdirectory.maxmergesizemb">16</int>  
   <int name="solr.hdfs.nrtcachingdirectory.maxcachedmb">192</int>  
   <str name="solr.hdfs.confdir">/usr/hadoop/hadoop-2.5.2/etc/hadoop</str>  
</directoryFactory>

再找到: &lt;lockType&gt;${solr.lock.type:native}&lt;/lockType&gt;将其修改为&lt;lockType&gt;${solr.lock.type:hdfs}&lt;/lockType&gt;

ok!重启tomcat。然后重新创建索引。

共有 人打赏支持
粉丝 2
博文 12
码字总数 14462
×
VictorHu
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: