现在的位置: 首页 > 综合 > 正文

Hadoop、ZooKeeper及HBase的安装配置过程(绝对可用)

2013年03月26日 ⁄ 综合 ⁄ 共 5926字 ⁄ 字号 评论关闭
文章目录

这两天正在为公司配置一个Hadoop集群(以及HBase),作为存储及计算海量数据的平台。现在将安装的过程贴出来,仅供参考。


Hadoop的配置

  • 集群的物理配置情况

集群IP: 172.16.38.213 ~ 172.16.38.218

(hostname分别为master、slave0、slave1、slave2、slave3、slave4)

用户名/密码:root/123456

其中,master作为jobtracker和namenode,其余节点作为tasktracker和datanode

  • 节点角色分配

修改每个节点的 /etc/hosts文件,追加如下内容

172.16.38.213 master

172.16.38.214 slave0

172.16.38.215 slave1

172.16.38.216 slave2

172.16.38.217 slave3

172.16.38.218 slave4

再修改每个节点自己的hostname,如对于master,将其/etc/sysconfig/network文件改为

    NETWORKING=yes

    HOSTNAME=master

然后,运行

    hostname master

退出,再进入输入env | grep hostname发现修改生效

  • 为每个节点设置无密码ssh登录

1、 在master节点上运行

    ssh-keygen –t rsa


2、 在master节点上,首先

    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

然后

   
chmod 644 ~/.ssh/authorized_keys  


3、master节点上的~/.ssh/id_rsa.pub文件分别scp到每个slave节点上,如

    scp ~/.ssh/id_rsa.pub root@slave0:/home


4、 登录每个slave节点,运行(以slave0为例)

     cat /home/id_rsa.pub >> ~/.ssh/authorized_keys


5、 修改文件权限

    chmod 600 ~/.ssh/authorized_keys


6、从第3步开始循环,直至配置好每个slave节点



  • 下载Hadoop

下载hadoop-1.1.2,放在/home/LTE目录下,用命令 tar zxvf hadoop-1.1.2.tar.gz解压,在/home/LTE下生成目录hadoop-1.1.2


  • 修改HADOOP的配置文件

修改conf/core-site.xml文件

<configuration>

   <property>

       <name>fs.default.name</name>

       <value>hdfs://master:54310</value>

   </property>

   <property>

       <name>hadoop.tmp.dir</name>

       <value>/home/LTE/hadoop/tmp</value>

   </property>

</configuration>


在conf/hadoop-env.xml文件里增加

   export JAVA_HOME=/usr/local/java/jdk1.6.0_32


修改conf/hdfs-site.xml文件:

<configuration>

   <property>

       <name>dfs.replication</name>

       <value>2</value>

   </property>

   <property>

       <name>dfs.data.dir</name>

       <value>/home/LTE/hadoop/data</value>

   </property>

   <property>

       <name>dfs.name.dir</name>

       <value>/home/LTE/hadoop/name</value>

    </property>

</configuration>



    修改conf/mapred-site.xml文件:   

<configuration>

   <property>

       <name>mapred.job.tracker</name>

       <value>master:9001</value>

   </property>

   <property>

       <name>mapred.local.dir</name>

       <value>/home/LTE/hadoop/temp</value>

   </property>

</configuration>



conf/masters文件
master


conf/slaves文件

slave0

slave1

slave2

slave3

slave4


从master节点上,将/home/LTE目录依次拷贝到每个slave节点的/home目录下

  • 启动Hadoop

    在master节点的/home/LTE/hadoop-1.1.2目录下进行HDFS的格式化

       bin/hadoop namenode –format


    格式化后,HDFS中的内容会全部丢失
 
    然后,开启Hadoop集群
       bin/start-all.sh
 
    此时,Hadoop集群已经启动,可以提交运算的作业了。



HBase的配置

安装HBase时,不仅需要HBase本身,还需要ZooKeeper来提供、管理和协调分布式服务。在运行HBase之前,也需要先启动ZooKeeper服务。

另外,有些版本的HBase只能支持特定版本的Hadoop,如下表

在本文中,采用了Hadoop-1.1.2,HBase-0.94.8,以及ZooKeeper-3.4.5

由于ZooKeeper采用了Paxos算法来进行选举,因此实际能够有效参与选举的节点数量是奇数。所以,我们在安装HBase和ZooKeeper时,只采用奇数个节点(本文采用5个节点,分别为master、slave0、slave1、slave2、slave3)。

安装ZooKeeper

将zookeeper-3.4.5.tar.gz在/home/LTE下解压,生成zookeeper-3.4.5目录。在/home/LTE/zookeeper-3.4.5/conf中,有zoo_sample.cfg文件,使用命令 cp zoo_sample.cfg zoo.cfg 命令生成 zoo.cfg配置文件。编辑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.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/home/LTE/zookeeper
# the port at which the clients will connect
clientPort=2181

server.1=master:2888:3888
server.2=slave0:2888:3888
server.3=slave1:2888:3888
server.4=slave2:2888:3888
server.5=slave3:2888:3888

#
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1

为了让系统能够识别zoo.cfg中的server.id=host:port:port中的server.id,在master节点的/home/LTE/zookeeper中创建一个文件myid,里面只有一个数字1;同理,在slave0节点的/home/LTE/zookeeper中创建一个文件myid,里面只有一个数字2;以此类推…. 直至slave3节点。注意,这里id的范围是1~255 。以上配置(zookeeper以及zookeeper-3.4.5)要复制到集群中的每一个节点上去。

在/etc/profile的最后添加:

export HBASE_HOME=/home/LTE/hbase-0.94.8
export HADOOP_HOME=/home/LTE/hadoop-1.1.2
export ZK_HOME=/home/LTE/zookeeper-3.4.5
export JAVA_HOME=/usr/local/java/jdk1.6.0_32
export CLASSPATH=$CLASSPATH:$HBASE_HOME/lib:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$HBASE_HOME/bin:$ANT_HOME/bin:$HADOOP_HOME/bin:$ZK_HOME/bin:$PATH

然后,source /etc/profile
这个操作要在集群的每一个节点上进行

启动ZooKeeper

在每一个节点的/home/LTE/zookeeper-3.4.5/bin中执行命令:  ./zkServer.sh  start
这样就启动了zookeeper集群中的各个节点。

输入命令./zkServer.sh  status
可以查看当前节点在zookeeper集群中的角色是leader还是follower

安装HBase

将/home/LTE/hbase-0.94.8.tar.gz解压,生成/home/LTE/hbase-0.94.8。在hbase-0.94.8/lib中,原来有一个hadoop-core-1.0.4.jar文件,但是我们用的Hadoop的版本是hadoop-1.1.2,所以需要将hbase-0.94.8/lib/hadoop-core-1.0.4.jar替换成hadoop-1.1.2/hadoop-core-1.1.2.jar,否则会有冲突。

打开conf/hbase-env.sh文件,将其中最后一行改为:         
             export  HBASE_MANAGES_ZK=false

这表示我们不使用hbase-0.94.8自带的zookeeper,而是使用我们刚才自己安装的zookeeper-2.3.4(具体指定使用哪个zookeeper是通过/etc/profile中的ZK_HOME变量来指定的)。

下面,打开conf/hbase-site.xml文件,添加以下内容:

<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://master:54310/hbase</value>
    </property>
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>master,slave0,slave1,slave2,slave3</value>
    </property>
    <property>
        <name>hbase.zookeeper.property.dataDir</name>
        <value>/home/LTE/zookeeper/dataDir</value>
    </property>
</configuration>

其中,我们需要通过hbase.rootdir指定HDFS的一个namenode节点,并让HBase将数据写入HDFS中的一个目录(本例中就是hdfs://master:54310/hbase);hbase.zookeeper.quorum指定了哪些节点运行Quorum Peer(即QuorumPeerMain进程),个数需为奇数。

下面,打开文件conf/regionservers,添加以下内容:

slave0
slave1
slave2
slave3

该文件指定了HRegionServer进程将在哪些节点上运行。

以上配置需要在HBase的每一个节点中生效。

启动HBase

OK,现在HBase集群配置好了。我们来启动HBase。
进入$HBASE_HOME/bin目录下,输入命令
        ./start-hbase.sh

在HBase集群启动之后,键入命令
        ./hbase  shell
启动HBase的控制台界面

我们可以在浏览器中查看HBase系统的运行状态,地址为http://172.16.38.213:60010/master-status,其中172.16.38.213是master所在节点的IP.

常见问题

HBase中的某个节点无法启动

这很可能是因为集群中各个节点的系统时间不一致(时间差超出了某个阈值),这是我们需要将几台机器间的时间调整一致。
我们可以将master作为时间服务器,让其他机器与master进行对时。

首先,在master上键入命令  service ntpd start  来开启master上的时间服务器。
等待几分钟后,在其他每一台机器上键入命令 ntpdate  master  来与master进行对时

抱歉!评论已关闭.