大数据课程G1——Hbase的概述

文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州

 ▲ 本章节目的

⚪ 了解HIve的概念;

⚪ 了解HIve与数据库的区别;

⚪ 了解HIve的特点;

一、简介

1. 概述

1. HBase原本是由Yahoo!公司开发后来贡献给了Apache的一套开源的、基于Hadoop的、分布式的、可扩展的、非关系型数据库。

2. 如果需要对大量数据进行随机且实时读写,那么可以考虑使用HBase。

3. HBase能够管理非常大的表:billions of rows * millions of columns。

4. HBase是仿照Google的Big Table来进行实现的,因此,HBase和BigTable的原理几乎一致,只有实现语言不同。HBase是使用Java语言实现的,BigTable使用的是C语言实现的 - HBase最终将数据落地到HDFS上。

5. HBase提供了2个大版本,并且2个版本都在同时更新。其中,Hadoop3.1.3版本支持的是HBase2.2.X及以上版本。

6. HBase作为非关系型数据库,不支持标准的SQL语法,提供了一套全新的命令。

7. HBase能够存储稀疏类型的数据,也因此HBase能够存储结构化(数据本身有结构,经过解析之后,能够用传统数据库中的一个或者几个表来存储)和半结构化数据(数据本身有结构,但是解析之后无法用传统数据库中的表来存储)。

8. HBase本身作为数据库,提供了完整的增删改查的功能。HBase基于HDFS来进行存储,HDFS的特点是允许一次写入多次读取,不允许修改而允许追加写入,但是HBase提供了"改"功能,HBase如何实现"改"功能的?- HBase实际上并没有去修改写入的数据,而是在文件末尾去追加数据。HBase会对写入的每条数据自动添加一个时间戳,当用户获取数据的时候,HBase自动返回最新的数据,那么从用户角度来看,就是发生了数据的修改。

9. 在HBase中,数据的每一个时间戳称之为是一个版本。

10. 如果要锁定唯一的一条数据,那么需要通过行键+列族+列+时间戳这四个维度来锁定,这种结构称之为是一个Cell(单元格)。

11. HBase中的表在创建的时候,如果不指定,那么只对外提供一个版本的数据。

12. 如果建好表之后再修改可以获取的版本,那么已经添加的数据不起作用。

13. 即使表允许对外获取多个版本的数据,在获取的时候如果不指定,依然只获取一个版本的数据。

2. 基本概念

1. Rowkey:行键

a. 在HBase中没有主键的概念,取而代之的是行键。

b. 不同于传统的关系型数据库,在HBase中,定义表的时候不需要指定行键列,而是在添加数据的时候来手动添加行键。

c. HBase默认会对行键来进行排序,按照字典序排序。

2. Column Family:列族/列簇

a. 在HBase中,没有表关联的概念,取而代之的是用列族来进行设计。

b. 在HBase中,一个表中至少要包含1个列族,可以包含多个列族,理论上不限制列族的数量。

c. 在HBase中强调列族,但是不强调列 - 在定义表的时候必须定义列族,但是列可以动态增删,一个列族中可以包含0到多个列。

3. namespace:名称空间

a. 在HBase中没有database的概念,取而代之的是namespace。

b. 在HBase启动的时候,自带了两个空间:default和hbase。hbase空间下放的是HBase的基本信息;在建表的时候如果不指定,则表默认是放在default空间下。

3. 基本命令

命令

解释

processlist

查看当前HBase在执行的任务

status

查看HBase的运行状态

version

查看HBase的版本

whoami

查看HBase的当前用户

create 'person', {NAME => 'basic'}, {NAME => 'info'}, {NAME => 'other'}

或者

create 'person', 'basic', 'info', 'other'

建立一个person表,包含3个列族:basic,info,other

append 'person', 'p1', 'basic:name', 'Bob'

在person表中添加一个行键为p1的数据,向basic列族的name列中添加数据

get 'person', 'p1'

获取指定行键的数据

get 'person', 'p1', {COLUMN => 'basic'}

或者

get 'person', 'p1', 'basic'

获取指定行键指定列族的数据

get 'person', 'p1', {COLUMN => ['basic', 'info']}

或者

get 'person', 'p1', 'basic', 'info'

获取指定行键多列族的数据

get 'person', 'p1', {COLUMN => 'basic:name'}

或者

get 'person', 'p1', 'basic:name'

获取指定行键指定列的数据

scan 'person'

扫描整表

scan 'person', {COLUMNS => 'basic'}

获取指定列族的数据

scan 'person', {COLUMNS => ['basic', 'info']}

获取多列族的数据

scan 'person', {COLUMNS => ['basic:name', 'other:address']}

获取多个列的数据

put 'person', 'p1', 'basic:age', 20

修改数据

delete 'person', 'p1', 'other:adderss'

或者

deleteall 'person', 'pb', 'basic:name'

删除指定行键指定列族的指定列

deleteall 'person', 'p1'

删除指定行键的所有数据

create 'students', {NAME => 'basic', VERSIONS => 3}, {NAME => 'info', VERSIONS => 4}

指定每一个列族允许对外获取的版本数量

desc 'students'

或者

describe 'students'

描述表

get 'students', 's1', {COLUMN => 'basic:age', VERSIONS => 3}

获取指定行键指定列的指定数量版本的数据

scan 'students', {COLUMNS => 'basic:age', VERSIONS => 3}

获取指定列的指定数量版本的数据

count 'person'

统计person表中行键的个数

get_splits 'person'

获取person表对应的HRegion的个数

truncate 'person'

摧毁重建person表

list_namespace

查看所有的空间

create_namespace 'demo'

创建demo空间

create 'demo:users', 'basic'

在demo空间下创建users表

list_namespace_tables 'demo'

获取demo空间下的所有表

describe_namespace 'demo'

描述demo空间

drop_namespace 'demo'

删除demo空间,要求这个空间为空

disable 'demo:users'

禁用表

drop 'demo:users'

删除表

enable 'person'

启用表

exists 'users'

判断表是否存在

is_disabled 'person'

判断person表是否被禁用

is_enabled 'person'

判断person表是否被启用

list

查看所有空间下的所有的表

locate_region 'person', 'p1'

定位p1行键所在的HRegion的位置

show_filters

展现所有的过滤器

disable_all 'demo:.*'

禁用demo空间下的所有的表

drop_all 'demo.*'

删除demo空间下的所有的表

enable_all 'demo:.*'

启用demo空间下的所有的表

4. Hive和HBase的比较

1. Hive本质上是一个用于进行数据仓库管理的工具,在实际过程中经常用于对数据进行分析和清洗,提供了相对标准的SQL结构,底层会将SQL转化为MapReduce来执行,因此Hive的效率相对较低,更适合于离线开发的场景。Hive一般针对历史数据进行分析,一般只提供增加和查询的能力,一般不会提供修改和删除的功能。

2. HBase本质上是一个非关系型数据库,在实际过程中,用于存储数据。因为HBase的读写效率较高,吞吐量较大,因此一般使用HBase来存储实时的数据,最终数据会落地到HDFS上。HBase作为数据库,提供了完整的增删改查的能力,但是相对而言,HBase的事务能力较弱。HBase不支持SQL,提供了一套完整的命令。

3. 总结:Hive强调的是分析能力,但是HBase强调的是存储能力,相同的地方在于两者都是利用HDFS来存储数据。

二、安装

1. 硬件环境:至少需要3台虚拟机或者云主机,Centos7.5及以上版本,至少需要双核,至少4G内存+20G磁盘。

2. 软件环境:JDK1.8+Zookeeper3.5.7+Hadoop3.1.3。

3. 进入/home/software目录下。

cd /home/software

4. 上传或者下载HBase的安装包,云主机的下载地址。

 wget http://bj-yzjd.ufile.cn-north-02.ucloud.cn/hbase-2.4.2-bin.tar.gz

5. 解压。

tar -xvf hbase-2.4.2-bin.tar.gz

6. 进入HBase的配置目录

cd hbase-2.4.2/conf

7. 编辑文件。

vim hbase-env.sh

#添加如下属性

export JAVA_HOME=/home/software/jdk1.8

export HBASE_MANAGES_ZK=false

#保存退出,重新生效

source hbase-env.sh

8. 编辑文件。

vim hbase-site.xml

#添加如下内容

<!--指定HBase在HDFS上的数据存储目录-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://hadoop01:9000/hbase</value>

</property>

<!--开启HBase的分布式-->

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<!--配置Zookeeper的连接地址-->

<property>

<name>hbase.zookeeper.quorum</name>

<value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>

</property>

<property>

<name>hbase.unsafe.stream.capability.enforce</name>

<value>false</value>

</property>

<property>

<name>hbase.wal.provider</name>

<value>filesystem</value>

</property>

9. 编辑文件。

vim regionservers

#添加当前的三台主机的主机名

10. 需要将Hadoop的核心配置文件拷贝到当前的HBase的配置目录下。

cp /home/software/hadoop-3.1.3/etc/hadoop/core-site.xml ./

11. 回到software目录下,远程拷贝给另外两台云主机。

cd /home/software/

scp -r hbase-2.4.2 root@hadoop02:$PWD

scp -r hbase-2.4.2 root@hadoop03:$PWD

12. 配置三台主机的环境变量。

vim /etc/profile

#在文件末尾添加

export HBASE_HOME=/home/software/hbase-2.4.2

export PATH=$PATH:$HBASE_HOME/bin

#保存退出,重新生效

source /etc/profile

13. 启动Zookeeper。

cd /home/software/apache-zookeeper-3.5.7-bin/bin

sh zkServer.sh start

sh zkServer.sh status

14. 在第一台主机上启动Hadoop的HDFS。

start-dfs.sh

15. 在第一台主机上启动HBase。

start-hbase.sh

16. 可以通过IP:16010来访问HBase的界面。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/22409.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自己实现 OpenAI 的 /v1/embeddings 接口

自己实现 OpenAI 的 /v1/embeddings 接口 0. 背景1. 修改 .env 文件2. 修改 get_embedding 方法 0. 背景 使用 OpenAI 的 API Key 是需要付费的&#xff0c;为了节省成本&#xff0c;自己尝试实现 OpenAI 的各种接口。 本文章主要是实现 /v1/embeddings 和 /v1/engines/{mode…

SQL注入 ❤ ~~~ 网络空间安全及计算机领域常见英语单词及短语——网络安全(二)

SQL注入 ❤ 学网安英语 大白话讲SQL注入SQL注入原理1. 用恶意拼接查询进行SQL注入攻击2. 利用注释执行非法命令进行SQL注入攻击3. 利用传入非法参数进行SQL注入攻击4. 添加额外条件进行SQL注入攻击 时间和布尔盲注时间盲注&#xff08;Time-Based Blind SQL Injection&#xf…

使用隧道HTTP时如何解决网站验证码的问题?

使用代理时&#xff0c;有时候会遇到网站验证码的问题。验证码是为了防止机器人访问或恶意行为而设置的一种验证机制。当使用代理时&#xff0c;由于请求的源IP地址被更改&#xff0c;可能会触发网站的验证码机制。以下是解决网站验证码问题的几种方法&#xff1a; 1. 使用高匿…

树和二叉树 --- 数据结构

目录 1.树的概念及结构 1.1树的概念 1.2树的表示 1.3树在实际生活中的运用 2.二叉树的概念及结构 2.1概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 1.树的概念及结构 1.1树的概念 树是一种非线性的数据结构&#xff0c;它是由n (n>0)个有限结点组成…

No primary or single unique constructor found for interface java.util.List

报错截图&#xff1a; 报错内容&#xff1a; 2023-08-04 15:46:32.884 ERROR 14260 --- [io-8080-exec-10] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing fa…

Android 版本 对应的 API版本

Android 14&#xff08;开发者预览版&#xff09; 如需详细了解平台变更&#xff0c;请参阅 Android 14 文档。 Android 13&#xff08;API 级别 33&#xff09; 如需详细了解平台变更&#xff0c;请参阅 Android 13 文档。 Android 12&#xff08;API 级别 31、32&#xf…

模拟宕机后kafka的重新分区

直接停掉192.168.233.133:9092 (broker.id 5) 查看topic 分区 $ /data/kafka_2.13-3.0.0/bin/kafka-topics.sh --bootstrap-server 192.168.233.132:9092 --topic quickstart77-events --describe Topic: quickstart77-events TopicId: A7bNWYseSNqlGfs1XPhN9g PartitionCou…

2023年电赛---运动目标控制与自动追踪系统(E题)OpenART mini的代码移植到OpenMV

前言 &#xff08;1&#xff09;已经有不少同学根据我上一篇博客完成了前三问&#xff0c;恭喜恭喜。有很多同学卡在了第四问。 &#xff08;2&#xff09;我说了OpenART mini的代码是可行的。但是他们不会移植到OpenMV上&#xff0c;再次我讲移植之后的代码贴出来。 &#xff…

接口自动化测试-Postman+Newman+Git+Jenkins实战集成(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Postman 创建…

Linux之 centos、Ubuntu 安装常见程序 (-) Mysql 5.7 版本和8.0版本

CentOS 安装 MySql 注意 需要有root权限 安装5.7版本 – 由于MySql并不在CentOS的官方仓库中&#xff0c;所以需要通过rmp命令&#xff1a; 导入MySQL仓库密钥 1、配置MySQL的yum仓库 配置yum仓库 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022 安装…

c++函数模板

c函数模板 一.函数模板 1.关于模板的使用 template:定义模板的关键字 typename:定义模板类型的关键字 T 通用的类型标识符 使用如下 template<typename T> //这样就写了一个模板2.模板函数的作用 普通函数 int fun(int a, int b) {return a b; }这个函数只能进…

452. 用最少数量的箭引爆气球

452. 用最少数量的箭引爆气球452. 用最少数量的箭引爆气球 有一些球形气球贴在一堵用 XY 平面表示的墙面上。墙面上的气球记录在整数数组 points &#xff0c;其中points[i] [xstart, xend] 表示水平直径在 xstart 和 xend之间的气球。你不知道气球的确切 y 坐标。 一支弓箭可…

【Linux】Linux下git的使用

文章目录 一、什么是git二、git发展史三、Gitee仓库的创建1.新建仓库2.复制仓库链接3.在命令行克隆仓库3.1仓库里的.gitignore是什么3.2仓库里的git是什么 三、git的基本使用1.将克隆仓库的新增文件添加到暂存区(本地仓库)2.将暂存区的文件添加到.git仓库中3.将.git仓库中的变化…

中介者模式——协调多个对象之间的交互

1、简介 1.1、概述 如果在一个系统中对象之间的联系呈现为网状结构&#xff0c;如下图所示&#xff1a; 对象之间存在大量的多对多联系&#xff0c;将导致系统非常复杂&#xff0c;这些对象既会影响别的对象&#xff0c;也会被别的对象所影响&#xff0c;这些对象称为同事对…

深入了解 PostgreSQL 扩展插件

深入了解 PostgreSQL 扩展插件 在 PostgreSQL 数据库中&#xff0c;扩展插件是极具价值的工具&#xff0c;它们为我们提供了丰富多样的功能增强。本篇博客将深入介绍几个常用的 PostgreSQL 扩展插件&#xff0c;包括 pg_stat_statements、uuid、postgis 以及 postgis_raster。…

【JS代码调试技巧】你必须知道的Javascript技巧汇总

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录 使用控制台检查变量值控制台使用 type of 检查变量的类型捕获拼错的变量名和函数名捕获使用赋值运算符而不是相等运算符捕捉函数调用后缺少的左括号和右括号 &#x1f338;I could be bounded in a nutshel…

使用FreeMarker导出word文档(支持导出图片)

今天跟大家分享一下工作中比较实用的导出word 带图片的功能。 对于在idea开发中我们需要引入以下依赖&#xff1a; 2.对于eclipse 开发我们需要进入对应的jar包 这个必须放在lib下&#xff0c;同样也需要在当前项目的环境是加入该依赖 需要在MEAT-INF加入 首先制定word 导出…

ORACLE-DG总结

述 当主库的某些日志没有成功传送到备库,那么这时候就发生了归档裂缝(Archive Gap)。目前Oracle提供了两种日志GAP的检测和处理机制,分别是自动GAP处理(Automatic Gap Resolution)和FAL进程GAP处理(FAL Gap Resolution)。自动GAP处理即主库上的ARCn进程会每分钟检查备库…

如何隐藏开源流媒体EasyPlayer.js视频H.265播放器的实时录像按钮?

目前我们TSINGSEE青犀视频所有的视频监控平台&#xff0c;集成的都是EasyPlayer.js版播放器&#xff0c;它属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;包括WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#x…

Windows安装JDK和JRE的方法

原文网址&#xff1a;Windows安装JDK和JRE的方法_IT利刃出鞘的博客-CSDN博客 简介 本文介绍Windows安装JDK和JRE&#xff08;Java8&#xff09;的方法。 下载 下载入口&#xff1a;https://www.oracle.com/java/technologies/javase/javase8-archive-downloads.html jdk-8…