Zookeeper + Hadoop + Hbase部署备忘
网上类似的文章很多,本文只是记录下来备忘.本文分四大步骤:
准备工作、安装zookeeper、安装hadoop、安装hbase,下面分别详细介绍:
一 准备工作
1. 下载 zookeeper、hadoop、hbase三个压缩包并放入/home/servers目录并解压
2. 安装JDK (略)
3. 统一集群计算机名
本次用于测试一共5台,分别命名为release-master,slave1,slave2,slave3,slave4(可使用hostname slave1类似的命令临时修改)
4. 统一hosts
在以上5台服务器的hosts里都加上以下内容:
192.168.1.101 release-master 192.168.1.102 slave1 192.168.1.103 slave2 192.168.1.104 slave3 192.168.1.105 slave4
注意,如果hosts里有类似下面这样对本机进行配置的,一定要注释掉,否则RegionServer容易出错
192.168.1.101 pc-101
5. 设置release-master(主服务器)到所有salve服务器的ssh免登录(略)
二. 安装zookeeper (参考http://www.blogjava.net/hello-yun/archive/2012/05/03/377250.html)
ZooKeeper分布式模式安装(ZooKeeper集群)也比较容易,这里说明一下基本要点。
首先要明确的是,ZooKeeper集群是一个独立的分布式协调服务集群,“独立”的含义就是说,如果想使用ZooKeeper实现分布式应用的协 调与管理,简化协调与管理,任何分布式应用都可以使用,这就要归功于Zookeeper的数据模型(Data Model)和层次命名空间(Hierarchical Namespace)结构,详细可以参考http://zookeeper.apache.org/doc/trunk/zookeeperOver.html。在设计你的分布式应用协调服务时,首要的就是考虑如何组织层次命名空间。
下面说明分布式模式的安装配置,过程如下所示:
第一步:主机名称到IP地址映射配置
ZooKeeper集群中具有两个关键的角色:Leader和Follower。集群中所有的结点作为一个整体对分布式应用提供服务,集群中每个结 点之间都互相连接,所以,在配置的ZooKeeper集群的时候,每一个结点的host到IP地址的映射都要配置上集群中其它结点的映射信息。
例如,我的ZooKeeper集群中每个结点的配置,以slave-01为例,/etc/hosts内容如下所示:
192.168.1.101 release-master 192.168.1.102 slave1 192.168.1.103 slave2 192.168.1.104 slave3 192.168.1.105 slave4
ZooKeeper采用一种称为Leader election的选举算法。在整个集群运行过程中,只有一个Leader,其他的都是Follower,如果ZooKeeper集群在运行过程中 Leader出了问题,系统会采用该算法重新选出一个Leader。因此,各个结点之间要能够保证互相连接,必须配置上述映射。
ZooKeeper集群启动的时候,会首先选出一个Leader,在Leader election过程中,某一个满足选举算的结点就能成为Leader。整个集群的架构可以参考http://zookeeper.apache.org/doc/trunk/zookeeperOver.html#sc_designGoals。
第二步:修改ZooKeeper配置文件和环境变量
在主服务器(release-master)上,解压缩zookeeper-3.3.4.tar.gz,修改配置文件conf/zoo.cfg,内容如下所示:
-
tickTime=2000 dataDir=/home/data/zkdata clientPort=2181 initLimit=5 syncLimit=2 server.1=192.168.0.101:2888:3888 server.2=192.168.0.102:2888:3888 server.3=192.168.0.103:2888:3888 server.4=192.168.0.104:2888:3888 server.5=192.168.0.105:2888:3888
-
上述配置内容说明,可以参考http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html#sc_RunningReplicatedZooKeeper。创建配置所需目录:
mkdir -p /home/data/zkdata
修改环境变量/etc/profile,加入
export ZOOKEEPER_HOME=/home/servers/zookeeper-3.4.6 export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
保存退出. 执行:
source /etc/profile
来刷新配置.
第三步:远程复制分发安装文件和配置
上面已经在一台机器slave-01上配置完成ZooKeeper,现在可以将该配置好的安装文件远程拷贝到集群中的各个结点对应的目录下:
scp -r /home/servers/zookeeper-3.4.6/ root@slave1:/home/servers
第四步:设置myid
在我们配置的dataDir指定的目录下面,创建一个myid文件,里面内容为一个数字,用来标识当前主机,conf/zoo.cfg文件中配置的server.X中X为什么数字,则myid文件中就输入这个数字,例如:
-
echo "1" > /home/data/zkdata/myid
-
按照上述进行配置即可。
第五步:启动ZooKeeper集群
在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本,如下所示:
cd /home/servers/zookeeper-3.4.6/
bin/zkServer.sh start
如果启动报类似异常:QuorumCnxManager@384] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 是可以忽略的,因为该服务启动时会尝试连接所有节点,而其他节点尚未启动。通过后面部分可以看到,集群在选出一个Leader后,最后稳定 了。其他结点可能也出现类似问题,属于正常。
第六步:安装验证
可以通过ZooKeeper的脚本来查看启动状态,包括集群中各个结点的角色(或是Leader,或是Follower)
三 安装hadoop
第一步 解压缩
把安装包hadoop-2.5.1.tar.gz传到/home/servers/,并解压缩: tar xvf hadoop-2.5.1.tar.gz
第二步 设置系统变量
修改环境变量/etc/profile,加入
export HADOOP_HOME=/home/servers/hadoop-2.5.1
export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$HADOOP_HOME/bin
第三步 修改Hadoop配置文件, 来到/home/servers/hadoop-2.5.1/etc/hadoop/目录下
1. 更改core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/data/hadoop-tmp</value> <!-- hadoop文件存放目录--> </property> <property> <name>fs.defaultFS</name> <value>hdfs://release-master</value> <!-- hadoop 主服务器的主机名 --> </property> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> </configuration>
2. 更改hadoop-env.sh
# 指定jdk路径 export JAVA_HOME=/home/servers/jdk1.6.0_25
3. 更改httpfs-site.xml
<configuration> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>
4. 更改slaves,加入如下内容:
#增加从服务器hostname
slave1
slave2
slave3
slave4
5. 创建hadoop数据存储目录
mkdir -p /home/data/hadoop-tmp
至此,hadoop部署完毕! 启动hadoop,使用sbin目录下的start-all.sh来启动,关闭的话则是stop-all.sh
四 安装hbase
第一步 解压缩
把安装包 hbase-0.96.2-hadoop2.tar.gz传到/home/servers/,并解压缩: tar xvf hbase-0.96.2-hadoop2.tar.gz
第二步 设置系统变量
修改环境变量/etc/profile,加入
export HBASE_HOME=/home/servers/hbase-0.96.2-hadoop2
export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$HADOOP_HOME/bin:$HBASE_HOME/bin
第三步 修改Hbase配置文件, 来到/home/servers/hbase-0.96.2-hadoop2/conf/目录下
1. 更改 hbase-env.sh
# The java implementation to use. Java 1.6 required. export JAVA_HOME=/home/servers/jdk1.6.0_25/
Tell HBase whether it should manage it's own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false
2. 更改 hbase-site.xml
<configuration>
<property>
<name>hbase.tmp.dir</name>
<value>/home/data/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://release-master/hbase</value> <!-- 主机hostname-->
</property>
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>release-master,slave1,slave2,slave3,slave4</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>uration></value> </property></configuration>value> </property></configuration>
3.更改 regionservers,添加slave列表
#增加从服务器hostname
slave1
slave2
slave3
slave4
4.创建hbase数据存储目录
mkdir -p /home/data/hbase-tmp
5. 将整个hbase安装目录都拷贝到所有slave服务器
五. 将环境配置同步
将本机修改完毕的/etc/profile同步到集群其他服务器,最终修改后的/etc/profile如下:
export HADOOP_HOME=/home/servers/hadoop-2.5.1 export HBASE_HOME=/home/servers/hbase-0.96.2-hadoop2 export ZOOKEEPER_HOME=/home/servers/zookeeper-3.4.6 export JAVA_HOME=/home/servers/jdk1.6.0_25 export JAVA_BIN=/home/servers/jdk1.6.0_25/bin export PATH=$JAVA_HOME/bin:$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$HADOOP_HOME/bin:$HBASE_HOME/bin export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export JAVA_OPTS="-Djava.library.path=/usr/local/lib -server -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Djava.awt.headless=true -Dsu n.net.client.defaultReadTimeout=60000 -Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300 -Dsun.net.inetaddr.ttl=300" export JAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS ZOOKEEPER_HOME
注意同步完成后,去各个服务器刷新下配置:source /etc/profile
六 启动集群 顺序不能错
1. 启动zk
zk安装目录/bin/zkServer.sh start
2. 启动hadoop
hadoop安装目录/sbin/start-all.sh
3. 启动hbase
hbase安装目录/start-base.sh
4. 启动后,master上进程和slave进程列表
#master 进程
9599 NameNode #hadoop master进程 9151 QuorumPeerMain /home/servers/zookeeper-3.4.6/bin/../conf/zoo.cfg #zk 进程 10089 ResourceManager #hadoop 进程 9872 SecondaryNameNode #hadoop 进程 22461 HMaster start # hbase master进程
# slave 进程 14831 DataNode #hadoop slave 进程 14755 QuorumPeerMain /home/servers/zookeeper-3.4.6/bin/../conf/zoo.cfg #zk 进程 15224 HRegionServer start #hbase slave进程