搭建hbase单机版(使用外部zk)和java api如何连接

搭建hbase单机版(使用外部zk)和java api如何连接

0 创建修改信息

时间 内容 备注
20210927 创建文档

0 版本

组件名 版本 下载地址
操作系统 centos7 CentOS-7-x86_64-DVD-2009.iso
jdk 1.8 jdk-8u301-linux-x64.tar.gz
hadoop 3.0.0 hadoop-3.0.0.tar.gz
zookeeper 3.4.5 zookeeper-3.4.5.tar.gz
hbase 2.0.0 hbase-2.0.0-bin.tar.gz

0 注意

hosts文件要配置公网ip和私网ip对应同一个主机名,配置文件中要尽量使用主机名而不是用ip

本地代码开发配置文件使用 公网ip+端口,内网可以使用公网ip也可以使用 内网ip + 端口

(内网ip能够访问 公网ip也应该能够访问,如果不能访问则应该检查防火墙是否关闭, 阿里云服务器安全组是否开发端口)

单机hbase安装不需要做免密操作

伪分布式需要安装hadoop 和zk 需要免密操作

1 配置环境变量

修改配置文件

vi /etc/profile

添加以下内容

将/opt/myinstall/jdk1.8.0_144这种路径修改为自己安装包所在路径

#java
export JAVA_HOME=/opt/myinstall/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
#zookeeper
export ZOOKEEPER_HOME=/opt/myinstall/hbase/zookeeper-3.4.5
export PATH=$PATH:$ZOOKEEPER_HOME/bin
#hbase
export HBASE_HOME=/opt/myinstall/hbase/hbase-2.0.0
export PATH=$PATH:$HBASE_HOME/bin

使刚刚的配置生效

source /etc/profile

修改hosts文件

 vi /etc/hosts
配置公网ip和私网ip对应的主机名iZbp1xxx85opgretwdxZ 
101.xx.xxx.xx   iZbp1xxx85opgretwdxZ 
172.xx.xx.xx    iZbp1xxx85opgretwdxZ 

2 安装jdk

上面的环境变量配置好后输入

java -version

出现以下内容则安装成功

[root@template-v3 ~]# java -version
java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

3 安装zookeeper

进入安装目录 cd /opt/myinstall/hbase/zookeeper-3.4.5
创建数据目录 mkdir data
创建日志目录 mkdir log
进入目录 cd /opt/myinstall/hbase/zookeeper-3.4.5/conf
拷贝配置文件并改名 cp zoo_sample.cfg zoo.cfg

修改配置文件 vi zoo.cfg

修改数据目录 和 添加日志目录,修改为自己的实际路径,其他配置不用改

dataDir=/opt/myinstall/hbase/zookeeper-3.4.5/data
dataLogDir=/opt/myinstall/hbase/zookeeper-3.4.5/log

启动zookeeper

启动zk  zkServer.sh start
停止zk   zkServer.sh stop
查看zk状态  zkServer.sh status

查看进程 jps

jps
30741 Jps
27592 QuorumPeerMain

4 安装hbase

4.1 修改配置文件

创建配置文件中要配置的路径

cd /opt/myinstall/hbase/hbase-2.0.0/
mkdir data
mkdir zkdata

进入hbase的配置文件所在目录

cd /opt/myinstall/hbase/hbase-2.0.0/conf

修改hbase-env.sh文件

vi hbase-env.sh

添加java环境变量和设置不使用内部zk

\# The java implementation to use.  Java 1.8+ required.

export JAVA_HOME=/opt/myinstall/jdk1.8.0_144/

 

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

export HBASE_MANAGES_ZK=false

修改hbase-site.xml文件, 添加以下内容, 相关路径改为自己的路径

vi hbase-site.xml 
<configuration>
 <!-- hbase存放数据目录 -->
  <property>
    <name>hbase.rootdir</name>
    <value>file:opt/myinstall/hbase/hbase-2.0.0/data</value>
  </property>

  <!-- ZooKeeper数据文件路径 -->
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/myinstall/hbase/hbase-2.0.0/zkdata</value>
  </property>

<!--指定zk地址为机器名称-->
<property>
        <name>hbase.zookeeper.quorum</name>
        <value>iZbp1xxx85opgretwdxZ</value>
</property>
<property>
  <name>hbase.zookeeper.property.clientPort</name>
  <value>2181</value>
</property>
 <!-- ZooKeeper存储hbase数据的节点名称 -->
    <property>
        <name>zookeeper.znode.parent</name>
        <value>/hbase</value>
    </property>
    <!-- 集群的模式,分布式还是单机模式,如果设置成false的话,HBase进程和Zookeeper进程在同一个JVM进程 单机设置成true会报错 -->
    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
    </property>
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>
</configuration>

4.2 启动hbase

启动hbase   start-hbase.sh
停止hbase   stop-hbase.sh
执行hbase crud命令  hbase shell

查看进程 jps

jps
30741 Jps

27592 QuorumPeerMain

28715 HRegionServer

30060 HMaster

查看是否成功

输入 hbase shell
随便执行一个命令  如 list_namespace 查看命名空间
如果能正常显示则表示成功 如下
hbase(main):016:0> list_namespace
NAMESPACE                                                                                                    default                                                                                                     hbase                                                                                                       2 row(s)
Took 0.0461 seconds

4.3 查看日志

cd $HBASE_HOME/logs
cat hbase-root-master-iZbp1xxx85opgretwdxZ .log

4.4 Hbase 启动报错

错误:java.lang.IllegalStateException: The procedure WAL relies on the ability to hsync for proper operation during component failures, but the underlying filesystem does not support doing so. Please check the config value of 'hbase.procedure.store.wal.use. hsync' to set the desired level of robustness and ensure the config value of 'hbase.wal. dir' points to a FileSystem mount that can provide it.
hbase-site.xml中添加以下内容,上面已经添加了
<property>
  <name>hbase.unsafe.stream.capability.enforce</name>
  <value>false</value>
</property>

5 java api如何最简单的连接hbase

5.1 代码

pom文件的依赖

<dependencies>
    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-server -->
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-server</artifactId>
        <version>2.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hbase/hbase-client -->
    <dependency>
        <groupId>org.apache.hbase</groupId>
        <artifactId>hbase-client</artifactId>
        <version>2.0.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.zookeeper/zookeeper -->
    <dependency>
        <groupId>org.apache.zookeeper</groupId>
        <artifactId>zookeeper</artifactId>
        <version>3.4.6</version>
        <type>pom</type>
    </dependency>
</dependencies>

代码 创建一个命名空间做测试,看是否连接成功

package com.xhxtest;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.NamespaceDescriptor;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.log4j.Logger;

import java.io.IOException;

/**
 * @Author xiehongxin
 * @Date 2021/7/30
 * @Description //TODO
 */
public class Demo {

    /**
     * @return void
     * @Author xiehongxin
     * @Description //TODO  测试
     * @Date 18:29 2021/9/17
     * @Param args
     **/
    public static void main(String[] args) throws IOException {
        System.out.println("开始");
        System.out.println(Demo.createNameSpace("xns")); //创建命名空间
        System.out.println("结束");

    }


    private static Logger logger = Logger.getLogger(Demo.class);

    public static Configuration configuration; // 管理Hbase的配置信息
    public static Connection connection; // 管理Hbase连接
    public static Admin admin; // 管理Hbase数据库的信息

    // 操作数据库之前,建立连接
    static {
        //本地配置    打包要去掉
        System.setProperty("hadoop.home.dir", "D:\\XHXFile\\apache\\hadoop-2.7.3-common-winutils");
        //核心配置
        configuration = HBaseConfiguration.create();

        configuration.set("hbase.zookeeper.quorum", "101.xx.xxx.xx"); // 设置zookeeper节点   公网ip
        configuration.set("hbase.zookeeper.property.clientPort", "2181"); // 设置zookeeper节点 端口
        try {
            connection = ConnectionFactory.createConnection(configuration);
            admin = connection.getAdmin();
        } catch (IOException e) {
            e.printStackTrace();
            logger.error("====Hbase初始化失败====" + e);
        }

    }

    /**
     * @return java.lang.Boolean
     * @Author xiehongxin
     * @Description //TODO  创建命名空间
     * @Date 17:25 2021/9/17
     * @param: namespaceName
     **/
    public static Boolean createNameSpace(String namespaceName) {
        if (admin == null) {
            throw new RuntimeException("===please check admin is init?===");
        }
        Boolean result = false;
        NamespaceDescriptor mkNameSpace = NamespaceDescriptor.create(namespaceName).build();
        try {
            admin.createNamespace(mkNameSpace);
            result = true;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }


}

5.2 java api报错

java api连接报错: Call exception, tries=10, retries=31, started=54309 ms ago, cancelled=false, msg=

修改本地电脑的hosts文件 C:\Windows\System32\drivers\etc\hosts

添加和linux的hosts文件一样的内容

101.xx.xxx.xx   iZbp1xxx85opgretwdxZ 
172.xx.xx.xx    iZbp1xxx85opgretwdxZ 
上一篇:CSP 2021 初赛不过记


下一篇:iOS平台 | 快速集成华为AGC认证服务