zoukankan      html  css  js  c++  java
  • VMWare9下基于Ubuntu12.10搭建Hadoop-1.2.1集群—整合Zookeeper和Hbase

    VMWare9下基于Ubuntu12.10搭建Hadoop-1.2.1集群—整合Zookeeper和Hbase

    这篇是接着上一篇hadoop集群搭建进行的。在hadoop-1.2.1基础之上安装zookeeper-3.4.5和hbase-0.94.20。

    上一篇: VMWare9下基于Ubuntu12.10搭建Hadoop-1.2.1集群


    安装zookeeper和hbase

    1.        环境说明

    使用VMWare创建5台Ubuntu虚拟机,环境具体信息例如以下:

    虚拟机

    操作系统

    JDK

    Hadoop

    Zookeeper

    Hbase

    VMWare Workstation 9

    ubuntu-12.10-server-amd64

    jdk-7u51-linux-x64

    hadoop-1.2.1

    zookeeper-3.4.5

    hbase-0.94.20

    主机名

    IP地址

    虚拟机名

    节点内容

    master

    192.168.1.30

    Ubuntu64-Master

    namenode, Jobtracker, zookeeper

    secondary

    192.168.1.39

    Ubuntu64-Secondary

    secondarynamenode, zookeeper, hmaster

    slaver1

    192.168.1.31

    Ubuntu64-slaver1

    datanode, tasktracker, zookeeper, regionserver

    slaver2

    192.168.1.32

    Ubuntu64-slaver2

    datanode, tasktracker, zookeeper, regionserver

    slaver3

    192.168.1.33

    Ubuntu64-slaver3

    datanode, tasktracker, zookeeper, regionserver

    虚拟机搭建hadoop集群能够參考文档:VMWare9下基于Ubuntu12.10搭建Hadoop-1.2.1集群

    hbase自带zookeeper,还是想把zookeeper独立出来,方便进行控制。由于zookeeper集群是以宕机个数过半才会让整个集群宕机的,3个节点过半是2个,4个节点过半是2个。所以奇数个集群更佳,部署节点越多可靠性越高,所以我们部署5个节点。

    2.        安装配置Zookeeper

    部署Zookeeper

    解zookeeper-3.4.5.tar.gz包到/home/hadoop/zookeeper-3.4.5

    tar -zxvf zookeeper-3.4.5.tar.gz -C /home/hadoop/

    配置环境变量

    把hadoop设置到全局环境变量中

    sudo vim /etc/profile

    在最以下加入例如以下内容

    export ZOOKEEPER_HOME=/home/hadoop/zookeeper-3.4.5

    export PATH=$PATH:$ZOOKEEPER_HOME/bin

    刷新环境变量

    source /etc/profile

    /bin/zkEnv.sh

    ZOO_LOG_DIR=/home/hadoop/zookeeper_home/log

     

    if [ "x${ZOO_LOG4J_PROP}" = "x" ]

    then

        ZOO_LOG4J_PROP="INFO, CONSOLE, ROLLINGFILE"

    fi

    配置zookeeper日志的输出文件夹及日志输出通道,zookeeper默认仅仅输出console日志,启动zookeeper就会在屏幕上输出一大堆的控制台信息。非常不方便。

    /conf/log4j.properties

    # Define some default values that can be overridden by system properties

    zookeeper.root.logger=INFO, CONSOLE, ROLLINGFILE

    zookeeper.console.threshold=INFO

    zookeeper.log.dir=/home/hadoop/zookeeper_home/log

    zookeeper.log.file=zookeeper.log

    zookeeper.log.threshold=DEBUG

    zookeeper.tracelog.dir=/home/hadoop/zookeeper_home/logs

    zookeeper.tracelog.file=zookeeper_trace.log

    这里也同步调整一下。

    /conf/zoo.cfg

    zoo.cfg文件默认是没有的,把zoo_sample.cfg文件复制一份为zoo.cfg。然后改动对应配置项。

    cp zoo_sample.cfg zoo.cfg

    vim 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=/home/hadoop/zookeeper_home/data

    dataLogDir=/home/hadoop/zookeeper_home/logs

    # the port at which the clients will connect

    clientPort=2181

    server.0=master:2888:3888

    server.1=slaver1:2888:3888

    server.2=slaver2:2888:3888

    server.3=slaver3:2888:3888

    server.9=secondary:2888:3888

    配置数据路径和日志路径,这些路径须要自己手工创建。

    tickTime配置项为心跳时间(毫秒)

    initLimit配置项为zookeeper的leader接受follower初始化连接的最长心跳时间数(换算为时间initLimit*tickTime)。当leader在最长心跳时间数之内没有收到follower的回馈信息,则表示follower连接失败。

    syncLimit配置项为zookeeper的leader和follower之间发送消息和请求应答的最长心跳时间数(换算为时间syncLimit*tickTime)

    clientPort配置项为客户端连接port

    server.0=master:2888:3888配置项为master上zookeeper节点的连接信息。0表示server编号。master为server的主机名或ip地址,2888为leader与follower的通讯port号。3888为leader宕机后又一次选举leader的通讯port号。

    /zookeeper_home/data/myid

    myid文件是zookeeper节点的标识号(參考/conf/zoo.cfg配置,master上面配置为0)。在自己配置的zookeeper的data文件夹下创建myid文件。然后改动标识号(不同zookeeper节点myid的值不同样)。

    cd /zookeeper_home/data

    vim myid

    以master为例改动内容为

    0

    分发Zookeeper副本

    通过scp命令分发安装配置好的zookeeper。文件夹分发须要加-r參数

    scp -r /home/hadoop/zookeeper-3.4.5 hadoop@slaver1: /home/hadoop/

    分发myid副本

    通过scp命令分发zookeeper的myid文件,然后依据server调整节点myid值

    scp -r /home/hadoop/zookeeper_home hadoop@slaver1: /home/hadoop/

    3.        安装配置Hbase

    部署Hbase

    hbase的hmaster部署在secondaryserver上,以secondaryserver为例,解hbase-0.94.20.tar.gz包到/home/hadoop/hbase-0.94.20

    tar -zxvf hbase-0.94.20.tar.gz -C /home/hadoop/

    配置环境变量

    把hadoop设置到全局环境变量中

    sudo vim /etc/profile

    在最以下加入例如以下内容

    export HBASE_HOME=/home/hadoop/hbase-0.94.20

    export PATH=$PATH:$HBASE_HOME/bin

    刷新环境变量

    source /etc/profile

    /conf/hbase-env.sh

    # The java implementation to use.  Java 1.6 required.

    export JAVA_HOME=/usr/lib/jdk1.7.0_51/

     

    # Extra Java CLASSPATH elements.  Optional.配置为hadoop的conf文件夹

    export HBASE_CLASSPATH=/home/hadoop-1.2.1/conf

     

    # Where log files are stored.  $HBASE_HOME/logs by default.

    export HBASE_LOG_DIR=/home/hadoop/hbase_home/log

     

    # Tell HBase whether it should manage it's own instance of Zookeeper or not.

    export HBASE_MANAGES_ZK=false

    JAVA_HOME配置hbase的jdk文件夹。

    HBASE_CLASSPATH变量配置的为hadoop的conf文件夹。hbase用来查找hadoop的hdfs配置信息;

    HBASE_LOG_DIR为日志的输出文件夹。

    HBASE_MANAGES_ZK 配置为false,那么hbase在启动的时候就不会启动自带的zookeeper,不会应用自带zookeeper进行协调管理,配置为true则会应用自带zookeeper。

    自行手工创建日志输出文件夹。

    /conf/log4j.properties

    hbase.security.logger=INFO, console, DRFA

    /conf/hbase-site.xml

    <configuration>

        <property>

            <name>hbase.rootdir</name>

            <value>hdfs://master:9000/hbase</value>

            <description>HDFS中存储hbase数据的文件夹,注意主机名和port号要与hadoop的core-site.xml中fs.default.name的相应</description>

        </property>

        <property>

            <name>hbase.cluster.distributed</name>

            <value>true</value>

            <description>hbase採用集群分布式</description>

        </property>

        <property>

            <name>hbase.zookeeper.quorum</name>

            <value>master,secondary,slaver1,slaver2,slaver3</value>

            <description>协调hbase的zookeeper节点主机。奇数个</description>

        </property>

        <property>

            <name>hbase.zookeeper.property.dataDir</name>

            <value>/home/hadoop/zookeeper_home/data</value>

            <description>zookeeper集群data文件夹Property from ZooKeeper's config zoo.cfg. The directory where the snapshot is stored.</description>

        </property>

        <property>

            <name>zookeeper.session.timeout</name>

            <value>60000</value>

            <description></description>

        </property>

        <property>

            <name>hbase.zookeeper.property.clientPort</name>

            <value>2181</value>

            <description>HBASE_MANAGES_ZK=false时该port号要与zoo.cfg中配置clientPort属性的port号一致</description>

        </property>

        <property>

            <name>hbase.master</name>

            <value>secondary</value>

            <description>hbase的主控节点,用secondary这台server</description>

        </property>

        <property>

            <name>hbase.master.info.port</name>

            <value>60010</value>

            <description></description>

        </property>

        <property>

            <name>hbase.master.port</name>

            <value>60000</value>

            <description></description>

        </property>

        <property>

            <name>hbase.regionserver.lease.period</name>

            <value>60000</value>

            <description></description>

        </property>

        <property>

            <name>hbase.rpc.timeout</name>

            <value>60000</value>

            <description></description>

        </property>

        <property>

            <name>hbase.tmp.dir</name>

            <value>/home/hadoop/hbase_home/tmp</value>

            <description>Temporary directory on the local filesystem.</description>

        </property>

    </configuration>

    hbase.master配置项是hbase的hmaster服务所在的主机,本例中配置在secondary主机上。

    /conf/regionservers

    slaver1

    slaver2

    slaver3

    配置全部regionserver所在的服务器主机名或ip地址

    替换hadoop-core的jar包

    hbase的lib文件夹中自带hadoop-core-${version}.jar包,可能与实际系统中的hadoop版本号不一致,所以要从hadoop中把jar包拷贝过来,拷贝之前先删除旧版本号的jar包。

    rm /home/hadoop/hbase-0.94.20/lib/hadoop-core-1.0.4.jar

    cp /home/hadoop/hadoop-1.2.1/hadoop-core-1.2.1.jar /home/hadoop/hbase-0.94.20/lib/

    分发Hbase副本

    通过scp命令分发安装配置好的hbasehbase没有部署到masterserver上,所以不须要拷贝到master上

    scp -r /home/hadoop/hbase-0.94.20 hadoop@slaver1: /home/hadoop/

    分发环境变量

    /etc/profile为root用户全部,所以scp要加sudo,并且须要传输到slaver1的root用户下。

    sudo scp /etc/profile root@slaver1:/etc/profile

    4.        启动Zookeeper。Hbase測试

    zookeeper和hbase都部署完成,能够启动进行測试。

    hadoop、zookeeper、hbase必须依照一定顺序进行启动和停止。

    启动hadoop à 启动zookeeper à 启动hbase à 停止hbase à 停止zookeeper à 停止hadoop

    启动zookeeper

    zookeeper没有主机,须要每一个节点单独启动,所有启动完成,zookeeper会依据选举策略,选出一个leader出来,其余节点为follower。

    zookeeper服务命令例如以下

    命令

    作用

    zkServer.sh start

    启动zookeeper服务

    zkServer.sh status

    查看zookeeper服务状态,能看到该节点是leader还是follower

    zkServer.sh stop

    停止zookeeper服务

    zkServer.sh restart

    重新启动zookeeper服务

    zookeeper服务启动之后,日志中会出现一些连接失败警告,这是正常的,由于其他节点服务还未启动,所有启动之后,正常日志中就不会出现这些信息。

    启动hbase

    hbase集群仅仅须要在hmaster节点上启动和关闭就可以,其他regionserver会被自己主动启动,本例中把hmaster部署在secondaryserver上,所以仅仅须要在secondaryserver上启动hbase,在启动hbase之前须要查看hadoop和zookeeper是否正常启动。

    hbase服务命令例如以下

    命令

    作用

    start-hbase.sh

    启动hbase集群服务,包含hmaster,regionservers

    stop-hbase.sh

    关闭hbase集群服务,包含hmaster,regionservers

    hbase-daemons.sh start/stop regionserver/zookeeper/master-backup

    启动或停止全部的regionserver或(内置)zookeeper或backup-master

    hbase-daemon.sh start/stop master/regionserver/zookeeper

    启动或停止单个master或regionserver或(内置)zookeeper

    启动hbase集群,然后查看zookeeper和hbase的日志,看是否出现异常情况。

    hbase有个shellclient,通过shell命令能够操作hbase,有ddl和dml等等。

    进入shell

    hbase shell

    创建一个test表。列族有'info','score','user'三个

    create 'test', 'info','score','user'

    查看创建的表

    list

    用shell创建表的时候,zookeeper的日志中发现一个info级别的error,日志信息例如以下。

    hbase(main):006:0* create 'test', 'info','score','user'

    2014-06-11 18:44:28,343 - INFO  [ProcessThread:-1:PrepRequestProcessor@407] - Got user-level KeeperException when processing sessionid:0x1467fef37790002 type:delete cxid:0x6f zxid:0xfffffffffffffffe

    txntype:unknown reqpath:n/a Error Path:/hbase/table/test Error:KeeperErrorCode = NoNode for /hbase/table92/test

    这个error不影响hbase的应用,查看了一下hdfs中的文件夹。发现/hbase以下就直接是test表的文件,没有table92的文件夹。一直都搞不懂,尝试把hbase的hdfs存储路径调整为hdfs://master:9000/hbase/table92,依旧会有这个日志。test表会存储到table92以下。从网上搜索也没有什么结果。索性不去耗费时间了,有了解的朋友能够指点下。

  • 相关阅读:
    字体图标
    css精灵图
    css定位
    浮动的清除
    浮动、版心布局
    css 盒子模型
    css三大特性、行高属性、权重
    JSP实现上传文件(或图片)到MySQL
    MySQL 错误. Packet for query is too large (***> 4194304). You can change......
    使用Servlet3.0提供的API实现文件上传到指定位置
  • 原文地址:https://www.cnblogs.com/cxchanpin/p/6895113.html
Copyright © 2011-2022 走看看