目录:html
Hadoop+Hbase+zookeeper分布式存储构建java
前言* Hadoop是Apache开源组织的一个分布式计算开源框架,在不少大型网站上都已经获得了应用,如亚马逊、Facebook和Yahoo等等。对于我来讲,最近的一个使用点就是服务集成平台的日志分析。服务集成平台的日志量将会很大,而这也正好符合了分布式计算的适用场景(日志分析和索引创建就是两大应用场景)。node
今天咱们来实际搭建一下Hadoop 2.2.0版,实战环境为目前主流服务器操做系统CentOS 6.5系统。linux
1、实战环境web
系统版本:CentOS 6.5 x86_64
JAVA版本:JDK-1.7.0_25
Hadoop版本:hadoop-2.2.0
192.168.172.59 namenode (充当namenode、secondary namenode和ResourceManager角色)
192.168.172.88 datanode1 (充当datanode、nodemanager角色)
192.168.172.89 datanode2 (充当datanode、nodemanager角色)apache
2、软件准备vim
1、Hadoop能够从Apache官方网站直接下载最新版本Hadoop2.2。官方目前是提供了linux32位系统可执行文件,因此若是须要在64位系统上部署则须要单独下载src 源码自行编译。(若是是真实线上环境,请下载64位hadoop版本,这样能够避免不少问题,这里我实验采用的是32位版本)服务器
Hadoop下载地址
http://apache.claz.org/hadoop/common/hadoop-2.2.0/
Java 下载下载
http://www.oracle.com/technetwork/java/javase/downloads/index.htmlsession
2、咱们这里采用三台CnetOS服务器来搭建Hadoop集群,分别的角色如上已经注明。oracle
第一步:咱们须要在三台服务器的/etc/hosts里面设置对应的主机名以下(真实环境可使用内网DNS解析)
[root@node1 hadoop]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.172.59 node1
192.168.172.88 node2
192.168.172.89 node3
(注* 咱们须要在namenode、datanode三台服务器上都配置hosts解析)
第二步:从namenode上无密码登录各台datanode服务器,须要作以下配置:
在namenode 128上执行ssh-keygen,一路Enter回车便可。
而后把公钥/root/.ssh/id_rsa.pub拷贝到datanode服务器便可,拷贝方法以下:
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.88
ssh-copy-id -i .ssh/id_rsa.pub root@192.168.172.89
3、Java安装配置
tar -xvzf jdk-7u25-linux-x64.tar.gz &&mkdir -p /usr/java/ ; mv /jdk1.7.0_25 /usr/java/ 便可。
安装完毕并配置java环境变量,在/etc/profile末尾添加以下代码:
export JAVA_HOME=/usr/java/jdk1.7.0_25/
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=$JAVE_HOME/lib/dt.jar:$JAVE_HOME/lib/tools.jar:./
保存退出便可,而后执行source /etc/profile 生效。在命令行执行java -version 以下表明JAVA安装成功。
[root@node1 ~]# java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)
(注* 咱们须要在namenode、datanode三台服务器上都安装Java JDK版本)
官方下载的hadoop2.2.0版本,不用编译直接解压安装就可使用了,以下:
第一步解压:
tar -xzvf hadoop-2.2.0.tar.gz &&mv hadoop-2.2.0 /data/hadoop/
(注* 先在namenode服务器上都安装hadoop版本便可,datanode先不用安装,待会修改完配置后统一安装datanode)
第二步配置变量:
在/etc/profile末尾继续添加以下代码,并执行source /etc/profile生效。
export HADOOP_HOME=/data/hadoop/
export PATH=$PATH:$HADOOP_HOME/bin/
export JAVA_LIBRARY_PATH=/data/hadoop/lib/native/
(注* 咱们须要在namenode、datanode三台服务器上都配置Hadoop相关变量)
5、配置Hadoop
在namenode上配置,咱们须要修改以下几个地方:
1、修改vi /data/hadoop/etc/hadoop/core-site.xml 内容为以下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/tmp/hadoop-${user.name}</value>
<description>A base for other temporary directories.</description>
</property>
</configuration>
2、修改vi /data/hadoop/etc/hadoop/mapred-site.xml内容为以下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>node1:9001</value>
</property>
</configuration>
3、修改vi /data/hadoop/etc/hadoop/hdfs-site.xml内容为以下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.name.dir</name>
<value>/data/hadoop/data_name1,/data/hadoop/data_name2</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/data/hadoop/data_1,/data/hadoop/data_2</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
4、在/data/hadoop/etc/hadoop/hadoop-env.sh文件末尾追加JAV_HOME变量:
echo "export JAVA_HOME=/usr/java/jdk1.7.0_25/" >> /data/hadoop/etc/hadoop/hadoop-env.sh
5、修改 vi /data/hadoop/etc/hadoop/masters文件内容为以下:
node1
6、修改vi /data/hadoop/etc/hadoop/slaves文件内容为以下:
node2
node3
如上配置完毕,以上的配置具体含义在这里就不作过多的解释了,搭建的时候不明白,能够查看一下相关的官方文档。
如上namenode就基本搭建完毕,接下来咱们须要部署datanode,部署datanode相对简单,执行以下操做便可。
for i in `seq 88 89 ` ; do scp -r /data/hadoop/ root@192.168.172.$i:/data/ ; done
自此整个集群基本搭建完毕,接下来就是启动hadoop集群了。
6、启动hadoop并测试
在启动hadoop以前,咱们须要作一步很是关键的步骤,须要在namenode上执行以下命令初始化name目录和数据目录。
cd /data/hadoop/ ; ./bin/hadoop namenode -format
那如何算初始化成功呢,以下截图成功建立name目录即正常:
而后启动hadoop全部服务,以下命令:
[root@node1 hadoop]# ./sbin/start-all.sh
咱们还能够查看相应的端口是否启动:netstat -ntpl
访问以下地址:http://192.168.172.59:50070/
访问地址:http://192.168.172.59:8088/
搭建完成后,咱们简单的实际操做一下,以下图:
自此hadoop基本搭建完毕,
部署zookeeper:
在node1上配置:
下载zookeeper3.4.6版本:
wget http://apache.fayea.com/zookeeper/zookeeper-3.4.6/zookeeper-3.4.6.tar.gz
tar -xzf zookeeper-3.4.6.tar.gz -C /export/servers/
#vim /export/servers/ zookeeper-3.4.6/conf/zoo.cfg写入以下内容:
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
dataDir=/export/zookeeper
# the port at which the clients will connect
clientPort=2181
initLimit=5
syncLimit=2
dataLogDir=/export/zookeeper/logs
server.1=node1:2888:3888
server.2=node2:2888:3888
server.3=node3:2888:3888
注意:zk里面的node节点名称要一一对应哦,而后建立zk数据目录和日志路径:
mkdir -p /export/zookeeper/logs
echo 1 >/export/zookeeper/myid
如上在node1上配置好zk后,把zk整个程序同步到另外两台node2、node3。
执行以下脚本:
for i in `seq 88 89` ; do rsync -aP --delete /export/servers/zookeeper-3.4.6/ root@192.168.172.$i:/export/servers/zookeeper-3.4.6/ ;rsync -av /export/zookeeper/ root@192.168.172.$i:/export/; done
而后分别修改node2、node3的myid为2和3,命令以下:
在node2上执行:
echo 2 >/export/zookeeper/myid
在node3上执行:
echo 3 >/export/zookeeper/myid
执行完后,分别启动三台服务器的zk服务:
cd /export/servers/zookeeper-3.4.6/ ;./bin/zkServer.sh start
如上配置,zookeeper配置完毕,
配置hbase:
在node1上配置:
下载软件:hbase-0.96.2-hadoop2.tar.gz,而后执行以下命令:
tar xf hbase-0.96.2-hadoop2.tar.gz ;mv hbase-0.96.2-hadoop2 /export/hbase
而后进入hbase配置文件目录,以下图:
cd /export/hbase/conf/
Vim hbase-site.xml内容以下:
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/export/hbase/tmp</value>
</property>
<property>
<name>zookeeper.session.timeout</name>
<value>3600000</value>
</property>
<property>
<name>hbase.zookeeper.property.tickTime</name>
<value>180000</value>
</property>
<property>
<name>hbase.rootdir</name>
<value>hdfs://node1:9000/hbase</value>
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>node1,node2,node3</value>
</property>
<!--禁止magor compaction-->
<property>
<name>hbase.hregion.majorcompaction</name>
<value>0</value>
</property>
<!--禁止split-->
<property>
<name>hbase.hregion.max.filesize</name>
<value>536870912000</value>
</property>
<!---->
<property>
<name>hbase.hstore.blockingStoreFiles</name>
<value>2100000000</value>
</property>
<property>
<name>hbase.regionserver.handler.count</name>
<value>100</value>
</property>
</configuration>
vim hbase-env.sh内容以下:
export JAVA_HOME=/export/servers/jdk1.6.0_25/
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
export HBASE_MANAGES_ZK=false
export HADOOP_HOME=/export/hadoop/
vim regionservers内容以下:
node2
node3
而后将node1 habse配置同步至node2、node3:
for i in `seq 88 89` ; do rsync -av /export/hbase/ root@192.168.172.$i:/export/ ; done
最好在node1启动整个集群hbase便可:
cd /export/hbase/;sh bin/start-hbase.sh
查看node1 JAVA进程信息以下:
最好查看hbase日志以下:
经过web查看hbase截图以下:
NODE2状态:
---------------------------------------------------------------------------