服务器安装

  1. 虚拟机下安装centos、配置ip,本地可以通过ssh连接到centos中
    处理器数量要给2,否则hbase启动的时候会出问题!!!

  2. ip配置,直接使用nat
    在这里插入图片描述

  3. 虚拟机内部配置静态IP

IPADDR=192.168.1.234
GATEWAR=192.168.1.1
BOOTPROTO=static
ONBOOT=yes
  1. 下载安装jdk、hbase
yum install -y java
配置JAVA_HOME环境变量
ll $(whereis javac)

找到java安装目录

vi ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64
//使环境变量生效
source  ~/.bashrc
//hbase官方网站下载可执行包
//http://mirror.bit.edu.cn/apache/hbase/2.1.1/hbase-2.1.1-bin.tar.gz
sftp 上传文件至虚拟机
//解压tar文件
tar zxvf hbase-2.1.1-bin.tar.gz
  1. hbase-env.sh 中配置
    jdk
    //1. 修改JAVA_HOME
    export JAVA_HOME=${JAVA_HOME}
    //外置Zookeeper开启需要关闭HBASE_MANAGES_ZK
    //Tell HBase whether it should manage it's own instance of ZooKeeper or not.
    export HBASE_MANAGES_ZK=false
    
  2. 下载安装zookeeper、配置jdk,拷贝zoo.cfg到hbase的conf的目录下
    //下载apache zookeeper官网可执行文件包
    http://mirror.bit.edu.cn/apache/zookeeper/current/zookeeper-3.4.12.tar.gz
    sftp 上传至 虚拟机,也可以直接在centos中wget该文件,hbase不这么下载是因为hbase确实有点大,本地下载多线程会快一些
    tar -zxvf zookeeper-3.4.12.tar.gz
    // 拷贝conf中的zoo_sample.cfg到hbase的conf中一份
    
    拷贝conf中的zoo_sample.cfg到hbase的conf中一份
    cp zoo_sample.cfg ../../hbase/conf/
    //单节点配置,zookeeper中的配置文件不需要修改,可直接启动
    
  3. 修改hbase 的 hbase-site.xml, 配置外置zookeeper位置,hbase 数据存储位置
        <!-- hbase数据存放的目录,若用本地目录,必须带上file://,否则hbase启动不起来 -->
        <property>
                <name>hbase.rootdir</name>
                <value>file:///root/liyang/hbase-data</value>
        </property>
        <!-- zk的位置 -->
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>192.168.1.234</value>
                <description>/root/liyang/zookeeper</description>
        </property>
        <!-- 此处必须为true,不然hbase仍用自带的zk,若启动了外部的zookeeper,会导致冲突,hbase启动不起来 -->
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
  1. host添加hbase master访问节点域名

    vi /etc/hosts
    //增加一行
    192.168.1.234	hbase_node
    //不重启生效host文件修改(如果使用xshell或者securtcrt需要断开连接重新连接,就可以看见host文件修改是否生效了)
    hostnamectl set-hostname hbase_node
    
  2. 编辑 regionservers ,添加host配置过的域名信息

    //修改regionservers,将上一步配置的hbase_node添加到regionservers中,用来其他节点控制访问hbase
    

    在这里插入图片描述

  3. 配置ssh(单节点访问这步应该可以不用配置也可以)

    ssh-keygen
    ssh-copy-id hbase_node
    ssh hbase_node
    
  4. 启动服务

    1. 先启动zookeeper,hbase再启动的时候才能正确像zookeeper中注册节点信息
    ./zkServer.sh start
    

    在这里插入图片描述

    启动zookeeper之后启动客户端查看一下当前注册的节点信息
    ./zkCli.sh
    

    在这里插入图片描述

    //当前节点应该是没有hbase的节点信息的,因为hbase还没有启动,接下来启动hbase
    2. 启动hbase
    ./start-hbase.sh
    

    在这里插入图片描述

    出现running master,running regionserver则证明启动成功,现在看一下zookeeper中是否有hbase的节点信息
    

    在这里插入图片描述

    //可以看到hbase是注册到zookeeper中了的,现在hbase、zookeeper都启动成功了,最后一步,上面配置了host,reginserver根据hostname启动的,其他节点就可以通过hostname与ssh进行连接访问hbase了,现在看一下hbase启动所监听的端口跟ip是多少
    netstat -ntlp
    

    在这里插入图片描述

    //由于配置了reginserver的hostname,现在所监听的地址是192.168.1.234,如果不设置hostname的话,就只能监听到127.0.0.1,局域网内的其他机器就没办法连接zookeeper
    
  5. 现在hbase与zookeeper都启动成功了,zookeeper中的hbase节点也以及注册了,就可以在本地写程序通过javaapi访问hbase了

    但是首先需要在本地配置host指定centos中的hostname到centos的ip上,否则本地通过一个hostname没有办法正确访问到hbase的ip

    windows 中打开C:\Windows\System32\drivers\etc下的hosts文件进行修改
    添加上这么一条(ip就是hbase所在服务器ip, hostname就是注册到zookeeper中的hostname)
    192.168.1.234	hbase_node
    

    现在就可以开始写程序了,我就直接将测试程序放上来了

    1. 先测试下zookeeper是否可以连接没有问题
package com.wecredo.MainTest;

import org.apache.zookeeper.*;

import java.io.IOException;

/**
 * @author: liyang
 * @date:2018/12/13 0013
 * describe:
 */
public class ZKTest implements Watcher {

    ZooKeeper zooKeeper;

    public static void main(String[] args) throws IOException, InterruptedException {
        ZKTest zkTest = new ZKTest();
        zkTest.zooKeeper = new ZooKeeper("192.168.1.234:2181", 5000, zkTest);
        System.out.println(zkTest.zooKeeper.getState());
        Thread.sleep(Integer.MAX_VALUE);
    }

    @Override
    public void process(WatchedEvent event) {
        System.out.println("Receive watched event:" + event);
        if(event.getState() == Event.KeeperState.SyncConnected){
            System.out.println("ZooKeeper session established.");
            doSomething();
        }
    }

    private void doSomething() {
        try {
            String path = zooKeeper.create("/test_node", "123".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
            System.out.println("return path:" + path);

        } catch (KeeperException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("do something");
    }
}

配置ip后直接启动此程序,查看zookeeper中是否可以创建test_node节点

  1. 测试hbase是否可以正确连接
package com.wecredo.MainTest;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import java.io.IOException;

/**
 * @author: liyang
 * @date:2018/12/13 0013
 * describe:
 */
public class HbaseTest {

    public static void main(String[] args) throws IOException {
        //第一步,设置HBsae配置信息
        Configuration configuration = HBaseConfiguration.create();
        //注意。这里这行目前没有注释掉的,这行和问题3有关系  是要根据自己zookeeper.znode.parent的配置信息进行修改。
        configuration.set("hbase.zookeeper.quorum","192.168.1.234");  //hbase 服务地址
        configuration.set("hbase.zookeeper.property.clientPort","2181"); //端口号
        //这里使用的是接口Admin   该接口有一个实现类HBaseAdmin   也可以直接使用这个实现类
        Admin admin = ConnectionFactory.createConnection(configuration).getAdmin();
        if(admin !=null){
            try {
                //获取到数据库所有表信息
                HTableDescriptor[] allTable = admin.listTables();
                for (HTableDescriptor hTableDescriptor : allTable) {
                    System.out.println(hTableDescriptor.getNameAsString());
                }
            }catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

}

也是配置好ip后直接启动
直接启动会抛出一个java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.的异常,这个在本地启动并没有hadoop的环境所以可以不用管,这个程序是看hbase中都有哪些表的,可以先用hbase shell连接hbase,然后通过这个程序测试是否能都得出来

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐