搭建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
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
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
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
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=
101.xx.xxx.xx iZbp1xxx85opgretwdxZ
172.xx.xx.xx iZbp1xxx85opgretwdxZ
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。