搭建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