• Hadoop+HBase+ZooKeeper分布式集群环境搭建


    一、环境说明

    集群环境至少需要3个节点(也就是3台服务器设备):1个Master,2个Slave,节点之间局域网连接,可以相互ping通,下面举例说明,配置节点IP分配如下:

    Hostname IP User Password
    master 192.168.59.133 hadoop 123456
    slave1 192.168.59.134 hadoop 123456
    slave2 192.168.59.135 hadoop 123456

    三个节点均使用CentOS 6.5系统,为了便于维护,集群环境配置项最好使用相同用户名、用户密码、相同hadoop、hbase、zookeeper目录结构。

    注:可以通过编辑/etc/sysconfig/network文件来修改 hostname 。


    二、准备工作

    2.1 安装JDK

    在三台机器上配置JDK环境,下载 jdk-8u51-linux-x64.rpm 文件直接安装:

    $ rpm -ivh jdk-8u51-linux-x64.rpm

    修改配置文件 vim /etc/profile

    export JAVA_HOME=/usr/java/jdk1.8.0_51
    export PATH=$JAVA_HOME/bin:$PATH
    export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    然后重新加载配置文件使之生效:

    $ source /etc/profile 

    2.2 添加Hosts映射关系

    分别在三个节点上添加hosts映射关系:

    $ vim /etc/hosts

    添加的内容如下:

    192.168.59.133 master
    192.168.59.134 slave1
    192.168.59.135 slave2

    2.3 集群之间SSH无密码登陆

    CentOS默认安装了ssh,如果没有你需要先安装ssh 。

    集群环境的使用必须通过ssh无密码登陆来执行,本机登陆本机必须无密码登陆,主机与从机之间必须可以双向无密码登陆,从机与从机之间无限制。

    2.3.1 设置master无密码自登陆

    主要有三步:①生成公钥和私钥、②导入公钥到认证文件、③更改权限

    $ ssh-keygen -t rsa -f ~/.ssh/id_rsa
    $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    $ chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

    测试,第一次登录可能需要yes确认,之后就可以直接登录了:

    $ ssh localhost
    Last login: Sat Jul 18 22:57:44 2015 from localhost

    对于 slave1 和 slave2,进行无密码自登陆设置,操作同上。

    2.3.2 设置主机->从机的无密码登录

    $ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave1 'cat - >> ~/.ssh/authorized_keys'
    $ cat ~/.ssh/id_rsa.pub | ssh hadoop@slave2 'cat - >> ~/.ssh/authorized_keys'

    测试:

    [hadoop@master ~]$ ssh hadoop@slave1
    Last login: Sat Jul 18 23:25:41 2015 from master
    
    [hadoop@master ~]$ ssh hadoop@slave2
    Last login: Sat Jul 18 23:25:14 2015 from master

    2.3.3 设置从机->主机的无密码登录

    分别在slave1、slave2上执行:

    $ cat ~/.ssh/id_rsa.pub | ssh hadoop@master 'cat - >> ~/.ssh/authorized_keys'


    三、Hadoop集群安装配置

    这里会将hadoop、hbase、zookeeper的安装包都解压到/home/hadoop/个人主文件夹下,并重命名为hadoop、hbase、zookeeper。

    3.1 修改hadoop配置

    配置文件都在~/hadoop/etc/目录下

    3.1.1 core-site.xml

    <configuration>
        <property>
            <name>fs.default.name</name>
            <value>hdfs://master:9000</value>
        </property>
    </configuration>

    3.1.2 hadoop-env.sh

    添加JDK路径:

    export JAVA_HOME=/usr/java/jdk1.8.0_51

    3.1.3 hdfs-site.xml

    <configuration>
        <property>
            <name>dfs.name.dir</name>
            <value>/home/hadoop/hadoop/name</value>
        </property>
        <property>
            <name>dfs.data.dir</name>
            <value>/home/hadoop/hadoop/data</value>
        </property>
        <property>
            <name>dfs.replication</name>
            <value>3</value>
        </property>
    </configuration>

    3.1.4 mapred-site.xml

    <configuration>
        <property>
            <name>mapred.job.tracker</name>
            <value>master:9001</value>
        </property>
    </configuration>

    3.1.5 修改masters文件

    master

    3.1.6 修改slaves文件

    slave1
    slave2

    注意:三台机器上都进行相同的配置,都放在相同的路径下。

    使用scp命令进行从本地到远程(或远程到本地)的轻松文件传输操作:

    scp -r /home/hadoop/hadoop     slave1:/home/hadoop
    scp -r /home/hadoop/hadoop     slave2:/home/hadoop

    3.2 启动hadoop集群

    进入master的~/hadoop目录,执行以下操作:

    $ bin/hadoop namenode -format

    格式化namenode,第一次启动服务前执行的操作,以后不需要执行。

    然后启动hadoop:

    $ sbin/start-all.sh

    通过jps命令能看到除jps外有5个进程:

    $ jps
    4866 NodeManager
    4370 NameNode
    4899 Jps
    4648 SecondaryNameNode
    4779 ResourceManager
    4460 DataNode


    四、ZooKeeper集群安装配置

    解压zookeeper-3.3.2.tar.gz并重命名为zookeeper。

    4.1 修改配置文件zoo.cfg

    进入~/zookeeper/conf目录:

    $ cp zoo_sample.cfg zoo.cfg

    拷贝zoo_sample.cfg文件为zoo.cfg,并编辑如下:

    dataDir=/home/hadoop/zookeeper/data
    
    server.1=192.168.59.133:2888:3888
    server.2=192.168.59.134:2888:3888
    server.3=192.168.59.135:2888:3888

    4.2 新建并编辑myid文件

    在dataDir目录下新建myid文件,输入一个数字(master为1,slave1为2,slave2为3):

    $ mkdir /home/hadoop/zookeeper/data
    $ echo "1" > /home/hadoop/zookeeper/data/myid  

    同样使用scp命令进行远程复制,只不过要修改每个节点上myid文件中的数字。

    4.3 启动ZooKeeper集群

    在ZooKeeper集群的每个结点上,执行启动ZooKeeper服务的脚本:

    $ ~/zookeeper/bin/zkServer.sh start
    1. 如果启动报类似异常:QuorumCnxManager@384] - Cannot open channel to 2 at election address slave-02/192.168.0.178:3888 是可以忽略的,因为该服务启动时会尝试连接所有节点,而其他节点尚未启动。通过后面部分可以看到,集群在选出一个Leader后,最后稳定 了。其他结点可能也出现类似问题,属于正常。

    2. 关闭防火墙。在hadoop集群环境(linux系统)中最好关闭防火墙,不然会出现很多问题,例如namenode找不到datanode等。如果不关闭防火墙,客户端使用API操作HDFS以及ZooKeeper,可能就会出现下面常见的两种异常:

      • 使用API操作HDFS时会出现异常:java.net.NoRouteToHostException: No route to host
      • 使用API操作ZK时会出现异常:org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss for xxxx
    3. 使用root权限登陆后,输入关闭防火墙命令:

      $ /etc/init.d/iptables stop
      $ service iptables stop
    4. 修改禁用selinux: /etc/selinux/config文件,设置"SELINUX=disabled"


    五、HBase集群安装配置

    解压hbase-1.0.1.1-bin.tar.gz并重命名为hbase。

    5.1 hbase-env.sh

    export JAVA_HOME=/usr/java/jdk1.8.0_51
    export HBASE_CLASSPATH=/home/hadoop/hadoop/etc/hadoop/
    export HBASE_MANAGES_ZK=false

    5.2 hbase-site.xml

    <configuration>
        <property>
            <name>hbase.rootdir</name>
            <value>hdfs://master:9000/hbase</value>
        </property>
        <property>
            <name>hbase.master</name>
            <value>master</value>
        </property>
        <property>
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>
        <property>
            <name>hbase.zookeeper.property.clientPort</name>
            <value>2181</value>
        </property>
        <property>
            <name>hbase.zookeeper.quorum</name>
            <value>master,slave1,slave2</value>
        </property>
        <property>
            <name>zookeeper.session.timeout</name>
            <value>60000000</value>
        </property>
        <property>
            <name>dfs.support.append</name>
            <value>true</value>
        </property>
    </configuration>

    5.3 更改 regionservers

    在 regionservers 文件中添加slave列表:

    slave1
    slave2

    5.4 分发并同步安装包

    将整个hbase安装目录都拷贝到所有slave服务器:

    $ scp -r /home/hadoop/hbase  slave1:/home/hadoop
    $ scp -r /home/hadoop/hbase  slave2:/home/hadoop


    六、启动集群

    1. 启动ZooKeeper

    ~/zookeeper/bin/zkServer.sh start

    2. 启动hadoop

    ~/hadoop/sbin/start-all.sh

    3. 启动hbase

    ~/hbase/bin/start-base.sh

    4. 启动后,master上进程和slave进程列表

    [hadoop@master ~]$ jps
    6225 Jps
    2897 SecondaryNameNode   # hadoop进程
    2710 NameNode            # hadoop master进程
    3035 ResourceManager     # hadoop进程
    5471 HMaster             # hbase master进程
    2543 QuorumPeerMain      # zookeeper进程
    [hadoop@slave1 ~]$ jps
    4689 Jps
    2533 QuorumPeerMain       # zookeeper进程
    2589 DataNode             # hadoop slave进程
    4143 HRegionServer        # hbase slave进程

    5. 进入hbase shell进行验证

    [hadoop@master ~]$ hbase/bin/hbase shell
    2015-07-20 00:42:11,725 WARN  [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
    HBase Shell; enter 'help<RETURN>' for list of supported commands.
    Type "exit<RETURN>" to leave the HBase Shell
    Version 1.0.1.1, re1dbf4df30d214fca14908df71d038081577ea46, Sun May 17 12:34:26 PDT 2015
    
    hbase(main):001:0> list
    TABLE                                                                                
    0 row(s) in 1.6950 seconds
    
    => []
    hbase(main):002:0> status
    2 servers, 0 dead, 1.0000 average load
    
    hbase(main):003:0> 







    个人站点:http://songlee24.github.com


    参考:
    [1] www.smalldeng.blog.51cto.com/1038075/1329290
    [2] www.marysee.blog.51cto.com/1000292/629405

  • 相关阅读:
    Git上传文件不能超过100M的解决办法
    微信小程序 转发 分享功能(二)
    微信小程序 转发 分享功能(一)
    github上分支的合并
    微信小程序公告滚动通知
    django-blog:多对多查询
    正弦型函数的给出方式
    人教版|反三角函数
    在线|北京人大附中高一试题
    争鸣|深层次理解几何概型的概念和求解
  • 原文地址:https://www.cnblogs.com/songlee/p/5738028.html
Copyright © 2020-2023  润新知