完全分布式的HBase集群搭建

Hadoop集群搭建

*环境:
    *jdk1.8
    *hadoop2.7
    *CentOS7
    
*条件
    192.168.84.169 node1
    192.168.84.171 node2
    192.168.84.172 node3
    
    
*前提

    *集群中的节点时间同步
    
        *CentOS7的时间同步:
            yum -y install ntp
            systemctl enable ntpd
            systemctl start ntpd
            ntpdate -u cn.pool.ntp.org
            
        *CentOS6的时间同步
            在node2与node3上分别输入下述命令:
                ntpdate node1
                
    *软件版本问题:搭建之前一定要参照官方文档提供的版本对应关系!一定注意!!!!(血的教训)
    
    *SSH免密登陆(后面配置中我提及了!不必担心)
    
    *关闭防火墙
        CentOS6与CentOS7关闭防火墙的指令是不一致的:
            *CentOS6:service iptables stop
            *CentOS7:systemctl stop firewalld
                
        
    
*开始

    下述操作都是现在node1(192.168.84.169)上进行的:
    
    1.apache官网下载xxx.tar.gz

    2.解压 tar -zxvf xxx.tar.gz

    3.如果感觉解压后的文件名比较长,可以使用mv命令给文件重命名
        例如:mv a.txt b.txt     把a.txt重命名为b.txt
        
    4. 更改主机名

        在 /etc/sysconfig/network 目录下输入以下内容:
            NETWORKING=yes
            HOSTNAME=master
        在 /etc/hosts 目录下输入下述内容:
            192.168.84.169 node1
            192.168.84.171 node2
            192.168.84.172 node3
            
    5. 配置NameNode 

        vi /pzz/hadoop-2.7.0/etc/hadoop/core-site.xml
    
        <!-- HDFS的入口,指定NameNode的位置!注意value值master是我的主机名,也可以写IP,一般不要写localhost,写了localhost别的机器就无法访问了-->
        <property> 
          <name>fs.default.name</name>
          <value>hdfs://node1:9000</value>
       </property>
       <!-- Hadoop的工作目录,若是不指定会在/tmp目录下建立工作目录,但是下次启动时tmp下的数据会消失。所以建议指定一个工作目录-->
       <property>
          <name>hadoop.tmp.dir</name>
          <value>/usr/hadoop</value>
       </property>  
   
    6.    vi /pzz/hadoop-2.7.0/etc/hadoop/hdfs-site.xml
 
        <!-- 我的实验环境是3台虚拟机,一个node作为NameNdoe使用,另外2个作为DataNode使用!因为DataNode中的block的副本不可以放在同一个DataNode的原因,所以文件的副本数是不会超过DataNode的数量的-->
         <property>
           <name>dfs.replication</name>
           <value>2</value>
        </property>
        <!-- 浏览器访问URL-->
        <property>
            <name>dfs.http.address</name>
            <value>node1:50070</value>
        </property>
        <!-- 配置 SecondaryNameNode 启动在那个节点上(SecondaryNameNode最好不要与NameNode在一个节点上)-->
        <property>
            <name>dfs.namenode.secondary.http-address</name>
            <value>node2:50090</value>
        </property>
    
        【注意】SecondaryNameNode在Hadoop1.x中是配置在master文件中的!
    
    7.    配置DataNode

        vi /pzz/hadoop-2.7.0/etc/hadoop/slaves
        
        node2
        node3
        
    8. 在/pzz/hadoop-2.7.0/etc/hadoop/yarn-site.xml文件中配置ResourceManager:
    
        *设置resourcemanager的节点信息
              <property>
                <name>yarn.resourcemanager.resource-tracker.address</name>
                <value>node1:8025</value>
              </property>
              <property>
                 <name>yarn.resourcemanager.scheduler.address</name>
                 <value>node1:8030</value>
              </property>
              <property>
                 <name>yarn.resourcemanager.address</name>
                 <value>node1:8032</value>
              </property>
        【注意】未配置ResourceManager信息的其他节点自动成为NodeManager
        
    
    9.    配置SSH的免密登陆
        
        本机的SSH免密登陆
        *    ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa     // 生成密钥文件到~/.ssh/目录
        *    cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys    //把公钥放到本地~/.ssh/authorized_keys文件中
        -------------------------------------------------------------------------------------------------
        
        *scp ~/.ssh/id_dsa.pub root@node2:~     //该命令是在node1上执行的,就是把对应目录下的公钥文件拷贝到node2对应的目录下
        *输入登陆密码:hadoop
        *在node2机器上对应的目录上输入以下命令:
            cat id_dsa.pub >> ~/.ssh/authorized_keys    //把公钥放到本地~/.ssh/authorized_keys文件中
            
        上述操作实现了node1到node2的免密登陆!node1到node3的免密,或是node2到node3的免密等等都是同上的!
       【注意】:免密登陆的核心就是把一台机器上的公钥内容追加到另一台机器的~/.ssh/authorized_keys文件中,由此实现一台机器到另一台机器的免密登陆!
    
    10. 把hadoop的conf目录下的配置文件拷贝到node2与node3的hadoop的conf目录下,也就是实现三台机器一致的配置文件

        保证三台机器的配置文件完全一致:
        scp ./pzz/hadoop-2.7.0/etc/hadoop/* root@node2:/pzz/hadoop-2.7.0/etc/hadoop/
        scp ./pzz/hadoop-2.7.0/etc/hadoop/* root@node3:/pzz/hadoop-2.7.0/etc/hadoop/
            
        在hadoop的sbin目录下输入以下指令:
            hdfs namenode -format     //格式化,HDFS会在/usr/hk目录下创建文件
        
        在sbin启动HDFS 
         ./start-dfs.sh
         
    11.    查看集群中节点的工作状态
        
        方式一:浏览器浏览
        
            *在 C:\Windows\System32\drivers\etc\hosts 目录下输入下述内容:
        
                192.168.84.169 node1
                192.168.84.171 node2
                192.168.84.172 node3
            
            *在浏览器输入URL:http://node1:50070
                若是不显示相应的web界面,则关闭防火墙:CentOS6与CentOS7关闭防火墙的指令是不一致的:
                    *CentOS6:
                        service iptables stop
                    *CentOS7
                        systemctl stop firewalld
                一般情况下,所有的操作之前都要关闭防火墙!!!

        方式二:linux命令
        
            *在sbin目录下输入:    hadoop dfsadmin -report
            
        若是成功实现了Hadoop集群的搭建,则在web界面就会看到提示的2个Live datanode(注意这里是DataNode)
        
Zookeeper集群搭建:

    *下载、解压包

    *把/pzz/zookeeper-3.4.5/conf/zoo_sample.cfg文件改名:zoo.cfg
    
    *在zoo.cfg文件中配置下述内容:
        dataDir=/usr/zookeeper     
        server.1=node1:2888:3888
        server.2=node2:2888:3888
        server.3=node3:2888:3888
        
    *在/usr/zookeeper目录下创建myid文件,并在文件内容中写上1或是2或是3,也就是上述zoo.cfg中配置server编号!node1节点文件内容写1,node2写2,node3写3.
    
HBase集群的搭建:

    *配置hbase-site.xml
    
        <property> <!--连接NN -->
            <name>hbase.rootdir</name>
            <value>hdfs://node1:9000/hbase</value>            
        </property>

        <property><!--允许分布式 -->
            <name>hbase.cluster.distributed</name>
            <value>true</value>
        </property>

         <property><!--zk集群数据目录-->
             <name>hbase.zookeeper.property.dataDir</name>
             <value>/usr/zookeeper</value> 
          </property>

        <property><!--zk集群节点地址-->
            <name>hbase.zookeeper.quorum</name>
            <value>node1:2181,node2:2181,node3:2181</value>
        </property>
        
    *配置reginservers,指定HRegionServer机器地址
        node1
        node2
        node3
        
    *配置hbase-env.sh
        *指定jdk目录    export JAVA_HOME=/pzz/jdk1.8
        *允许使用自定义的zk集群    export HBASE_MANAGES_ZK=false(默认值是true,默认使用hbase自带的zk集群,现在自定义了zk集群,所以赋值false就可以允许hbase集群使用自定义的zk集群了)
        
    *把hadoop的hdfs-site.xml文件拷贝到habse的conf目录下
    
上述操作完成了完全分布式的HBase集群的搭建!!!!

【注意】HBase集群的启动顺序:
    *关闭防火墙
    *查看集群内的节点是否时间同步
    *在zookeeper集群的每一个节点的机器上启动zk服务
    *在node1上启动hadoop集群
    *在node1上启动hbase集群,node1成为HMaster

使用phoenix连接HBase集群(注意版本):

    *下载、解压包
    
    *将phoenix-4.9.0-HBase-1.1-client.jar和phoenix-core-4.9.0-HBase-1.1.jar两个jar包拷贝至Hbase的/lib文件夹
    
    *将Hbase的配置文件base-site.xml拷贝至Phoenix根目录中的/bin文件夹下到此就完成了配置。
    
    *phoenix连接的前提是zookeeper、hadoop、hbase集群都启动了
    
        ./bin/sqlline.py node1,node2,node3:2181
        
JAVA客户端用phoenix连接HBase集群:

    *把phoenix-4.9.0-HBase-1.1-client.jar和phoenix-core-4.9.0-HBase-1.1.jar放到路径下
    
    *把core-site.xml hdfs-site.xml hbase-site.xml 文件拷贝到根目录
    
    *jdk1.7或是jdk1.8
    
    *在windows的hosts文件中指定机器名与IP关系    C:\Windows\System32\drivers\etc\hosts
    
        192.168.84.169 node1
        192.168.84.171 node2
        192.168.84.172 node3
    
    *下述代码:
    
        private static Connection con;
        private static PreparedStatement ps;
        private static ResultSet rs;
        
        static {
            try {
                Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
                con = DriverManager.getConnection("jdbc:phoenix:node1,node2,node3");
            }catch(Exception e) {
                e.printStackTrace();
            }
        }
        
        //测试
        public static void main(String[] args) throws Exception {
    
            System.out.println("----------success---------");
        }
        
    *获取连接之后就可以进行CRUD操作了,实现SQL操作NoSQL数据库!
    

        
            
        
     
    
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值