数据仓库组件:HBase集群环境搭建和应用案例
一、Hbase简介
1、基础描述
Hadoop原生的特点是解决大规模数据的离线批量处理场景,HDFS具备强大存储能力,但是并没有提供很强的数据查询机制。HBase组件则是基于HDFS文件系统之上提供类似于BigTable服务。
HBase是一种分布式、可扩展、支持海量结构化数据存储的NoSQL数据库。HBase在Hadoop之上提供了类似于Bigtable的能力,基于列存储模式的而不是基于行的模式。存储数据特点:非结构化或者松散的半结构化数据,存储大表自然是需要具备水平扩展的能力,基于服务集群处理海量庞大数据。
2、数据模型
基于Hbase的数据结构的基本描述;
- 表-Table:由行和列组成,列划分为若干个列族;
- 行-Row:行键(Key)作标识,行代表数据对象;
- 列族:列族支持动态扩展,以字符串形式存储;
- 列标识:列族中的数据通过列标识符来定位;
- 单元格:行键,列族,列标识符共同确定一个单元;
- 单元数据:存储在单元里的数据称为单元数据;
- 时间戳:默认基于时间戳来进行版本标识;
HBase的数据模型同关系型数据库很类似,数据存储在一张表中,有行有列。但从HBase的底层物理存储结构看更像是Map(K-V)集合。
- 数据管理是基于列存储的特点;
- 简单的数据模型,内容存储为字符串;
- 没有复杂的表关系,简单的增删查操作;
从整体上看数据模型,HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳每个值是一个未经解释的字符串。
二、搭建集群环境
1、解压文件
tar -zxvf hbase-1.3.1-bin.tar.gz
2、配置环境变量
vim /etc/profile
export HBASE_HOME=/opt/hbase-1.3.1
export PATH=$PATH:$HBASE_HOME/bin
source /etc/profile
3、配置:hbase-env
vim /opt/hbase-1.3.1/conf/hbase-env.sh
export JAVA_HOME=/opt/jdk1.8
export HBASE_MANAGES_ZK=false
4、配置:hbase-site
vim /opt/hbase-1.3.1/conf/hbase-site.xml
<configuration>
<!--HDFS存储-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://hop01:9000/HBase</value>
</property>
<!--开启集群-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!-- 端口 -->
<property>
<name>hbase.master.port</name>
<value>16000</value>
</property>
<!--ZK集群-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>hop01,hop02,hop03</value>
</property>
<!--ZK数据-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/data/zookeeper/data/</value>
</property>
</configuration>
5、配置:regionservers
vim /opt/hbase-1.3.1/conf/regionservers
hop01
hop02
hop03
6、配置:软连接
软连接hadoop配置文件到HBase
ln -s /opt/hadoop2.7/etc/hadoop/core-site.xml /opt/hbase-1.3.1/conf/core-site.xml
ln -s /opt/hadoop2.7/etc/hadoop/hdfs-site.xml /opt/hbase-1.3.1/conf/hdfs-site.xml
7、同步集群服务环境
也可以手动配置集群,或者使用同步命令。
xsync hbase/
8、启动集群
在hop01节点启动即可。
/opt/hbase-1.3.1/bin/start-hbase.sh
启动日志:
hop03: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop03.out
hop02: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop02.out
hop01: starting regionserver, logging to /opt/hbase-1.3.1/bin/../logs/hbase-root-regionserver-hop01.out
9、查看状态
jps
HMaster:主节点
HRegionServer:分区节点
10、停止集群
在hop01节点停止即可。
/opt/hbase-1.3.1/bin/stop-hbase.sh
11、查看界面
http://hop01:16010

三、基础Shell命令
1、切入客户端
/opt/hbase-1.3.1/bin/hbase shell
2、查看表
hbase(main):002:0> list
3、创建表
hbase(main):003:0> create 'user','info'
0 row(s) in 2.7910 seconds
=> Hbase::Table - user
4、查看表结构
hbase(main):010:0> describe 'user'
5、添加数据
put 'user','id01','info:name','tom'
put 'user','id01','info:age','18'
put 'user','id01','info:sex','male'
put 'user','id02','info:name','jack'
put 'user','id02','info:age','20'
put 'user','id02','info:sex','female'
6、查看表数据
hbase(main):010:0> scan 'user'
ROW COLUMN+CELL
id01 column=info:age, timestamp=1594448524308, value=18
id01 column=info:name, timestamp=1594448513534, value=tom
id01 column=info:sex, timestamp=1594448530817, value=male
id02 column=info:age, timestamp=1594448542631, value=20
id02 column=info:name, timestamp=1594448536520, value=jack
id02 column=info:sex, timestamp=1594448548005, value=female
这些表结构和数据会在集群之间自动同步。
7、查询指定列
hbase(main):012:0> get 'user','id01'
COLUMN CELL
info:age timestamp=1594448524308, value=18
info:name timestamp=1594448513534, value=tom
info:sex timestamp=1594448530817, value=male
8、统计行数
hbase(main):013:0> count 'user'
9、删除行数据
hbase(main):014:0> deleteall 'user','id02'
10、清空表数据
hbase(main):016:0> truncate 'user'
11、删除表
hbase(main):018:0> disable 'user'
hbase(main):019:0> drop 'user'
四、JDBC基础查询
1、核心依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.3.1</version>
</dependency>
2、基础配置
这里连接zookeeper集群地址即可。
zookeeper:
address: 集群地址Url,逗号分隔
编写HBase配置和常用工具方法。
@Component
public class HBaseConfig {
private static String address;
private static final Object lock=new Object();
public static Configuration configuration = null;
public static ExecutorService executor = null;
public static Connection connection = null;
/**
* 获取连接
*/
public static Connection getConnection(){
if(null == connection){
synchronized (lock) {
if(null == connection){
configuration = new Configuration();
configuration.set("hbase.zookeeper.quorum", address);
try {
executor = Executors.newFixedThreadPool(10);
connection = ConnectionFactory.createConnection(configuration, executor);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return connection;
}
/**
* 获取 HBaseAdmin
*/
public static HBaseAdmin getHBaseAdmin(){
HBaseAdmin admin = null;
try{
admin = (HBaseAdmin)getConnection().getAdmin();
}catch(Exception e){
e.printStackTrace();
}
return admin;
}
/**
* 获取 Table
*/
public static Table getTable(TableName tableName) {
Table table = null ;
try{
table = getConnection().getTable(tableName);
}catch(Exception e){
e.printStackTrace();
}
return table ;
}
/**
* 关闭资源
*/
public static void close(HBaseAdmin admin,Table table){
try {
if(admin!=null) {
admin.close();
}
if(table!=null) {
table.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
@Value("${zookeeper.address}")
public void setAddress (String address) {
HBaseConfig.address = address;
}
}
3、查询案例
查询数据参考上述全表扫描结果:
@RestController
public class HBaseController {
/**
* 扫描全表
*/
@GetMapping("/scanTable")
public String scanTable () throws Exception {
Table table = HBaseConfig.getTable(TableName.valueOf("user"));
try {
ResultScanner resultScanner = table.getScanner(new Scan());
for (Result result : resultScanner) {
printResult(result);
}
} finally {
HBaseConfig.close(null, table);
}
return "success";
}
/**
* 根据RowKey扫描
*/
@GetMapping("/scanRowKey")
public void scanRowKey() throws Exception {
String rowKey = "id02";
Table table = HBaseConfig.getTable(TableName.valueOf("user"));
try {
Result result = table.get(new Get(rowKey.getBytes()));
printResult(result);
} finally {
HBaseConfig.close(null, table);
}
}
/**
* 输出 Result
*/
private void printResult (Result result){
NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map = result.getMap();
Set<Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>>> set = map.entrySet();
for (Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> entry : set) {
Set<Map.Entry<byte[], NavigableMap<Long, byte[]>>> entrySet = entry.getValue().entrySet();
for (Map.Entry<byte[], NavigableMap<Long, byte[]>> entry2 : entrySet) {
System.out.print(new String(result.getRow()));
System.out.print("\t");
System.out.print(new String(entry.getKey()));
System.out.print(":");
System.out.print(new String(entry2.getKey()));
System.out.print(" value = ");
System.out.println(new String(entry2.getValue().firstEntry().getValue()));
}
}
}
}
五、源代码地址
GitHub·地址
https://github.com/cicadasmile/big-data-parent
GitEE·地址
https://gitee.com/cicadasmile/big-data-parent
推荐阅读:编程体系整理
| 序号 | 项目名称 | GitHub地址 | GitEE地址 | 推荐指数 |
|---|---|---|---|---|
| 01 | Java描述设计模式,算法,数据结构 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 02 | Java基础、并发、面向对象、Web开发 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 03 | SpringCloud微服务基础组件案例详解 | GitHub·点这里 | GitEE·点这里 | ☆☆☆ |
| 04 | SpringCloud微服务架构实战综合案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 05 | SpringBoot框架基础应用入门到进阶 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆ |
| 06 | SpringBoot框架整合开发常用中间件 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 07 | 数据管理、分布式、架构设计基础案例 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
| 08 | 大数据系列、存储、组件、计算等框架 | GitHub·点这里 | GitEE·点这里 | ☆☆☆☆☆ |
数据仓库组件:HBase集群环境搭建和应用案例的更多相关文章
- HBase —— 集群环境搭建
一.集群规划 这里搭建一个3节点的HBase集群,其中三台主机上均为Regin Server.同时为了保证高可用,除了在hadoop001上部署主Master服务外,还在hadoop002上部署备用的 ...
- HBase集群环境搭建v2.0
本文档环境基于ubuntu16.04版本,如果最终不使用SuperMap iServer 10i ,可以不配置geomesa-hbase_2.11-2.2.0-bin.tar.gz 相比1.0版本,升 ...
- HBase集群环境搭建v1.0
本文档环境基于ubuntu14.04版本,如果最终不使用SuperMap iServer 9D ,可以不配置geomesa-hbase_2.11-2.0.1-bin.tar.gz (转发请注明出处:h ...
- hadoop(八) - hbase集群环境搭建
1. 上传hbase安装包hbase-0.96.2-hadoop2-bin.tar.gz 2. 解压 tar -zxvf hbase-0.96.2-hadoop2-bin.tar.gz -C /clo ...
- Hbase集群环境搭建
Hbase数据库依赖 Hadoop和zookeeper,所以,安装Hbase之前,需要先把zookeeper集群搭建好.(当然,Hbase有内建的zookeeper,不过不建议使用).Hbase配置上 ...
- Hadoop,HBase集群环境搭建的问题集锦(四)
21.Schema.xml和solrconfig.xml配置文件里參数说明: 參考资料:http://www.hipony.com/post-610.html 22.执行时报错: 23., /comm ...
- Hadoop,HBase集群环境搭建的问题集锦(二)
10.艾玛, Datanode也启动不了了? 找到log: Caused by: java.net.UnknownHostException: Invalid host name: local hos ...
- redis哨兵集群环境搭建
一.哨兵的介绍 哨兵(sentinal)是redis集群架构中非常重要的一个组件,主要功能如下: 集群监控,负责监控redis master和slave进程是否正常工作 消息通知,如果某个redis实 ...
- Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十一)NIFI1.7.1安装
一.nifi基本配置 1. 修改各节点主机名,修改/etc/hosts文件内容. 192.168.0.120 master 192.168.0.121 slave1 192.168.0.122 sla ...
随机推荐
- 混合云存储打开的正确姿势——腾讯云存储网关 CSG
近年来,随着云计算的发展,越来越多的企业选择将IT系统基础设施转移到云上,上云有助于推动企业加快信息化.数字化.智能化的转型,但是很多企业对传统的业务系统依赖程度较高,短时间内将业务迁移上云将会面临很 ...
- 从 0 开始的min_max容斥证明
二项式反演 \[f_n=\sum\limits_{i=0}^nC^i_ng_i \Leftrightarrow g_n=\sum\limits_{i=0}^n{(-1)}^{n-i}f_i \] 证明 ...
- memcached session会话共享
1 安装依赖包yum install libevent livevent-devel nc -y 2 yum 安装memcachedyum install -y memcached 3 启动memec ...
- 高速缓冲存储器Cache
目录 概述 问题的提出 局部性原理 命中与未命中 Cache的命中率 Cache-主存系统的效率 例题 工作原理 地址映射方式(本节最重要) 直接映射 全相联映射 组相联映射 例子 替换策略 例题 写 ...
- oracle 11.2.0.4下载
Oracle 11.2.0.4下载地址 Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_L ...
- C# 海量数据瞬间插入到数据库的方法
C# 海量数据瞬间插入到数据库的方法 当我们在数据库中进行大量的数据追加时,是不是经常因为数据量过大而苦恼呢?而所谓的海量数据,一般也是上万级的数据,比如我们要添加一百万条数据,应该如何提高它的效率呢 ...
- vue第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法)
第四单元(初识vue-在页面中直接引入vue框架-学习使用vue语法-vue的指令-介绍data用法-methods用法) #课程目标 了解 vue 框架的特点 掌握创建 vue 实例 掌握 data ...
- Flink连接器-批处理-读写Hbase
Flink批处理与hbase的读写 source-hbase 父类 是模仿官方写的. import org.apache.flink.api.common.io.LocatableInputSplit ...
- 用DirectX 11绘制一个Cube
之前一篇文章讲了如何初始化DirectX 11,现在在此基础上绘制一个Cube,总体可概括为以下几个步骤: 定义Cube顶点数据结构 创建Vertex Buffer和Index Buffer 编写应用 ...
- 简单学习 SQL and NOSql
文章参考链接::https://www.cnblogs.com/xrq730/p/11039384.html 结构化数据.非结构化数据与半结构化数据 文章的开始,聊一下结构化数据.非结构化数据与半结构 ...