hbase基础

hbase安装

在启动hbase前检查zookeeper是否正常启动,(myid常见错误设置有问题)
下载参考:https://archive.apache.org/dist/hbase/

tar -zxvf hbase-2.4.11-bin.tar.gz -C .
ln -s f hbase-2.4.11-bin hbase

mv /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar /export/server/hbase/lib/client-facing-thirdparty/slf4j-reload4j-1.7.33.jar.bak

配置1:vim conf/regionservers

shhadoop02
shhadoop03
shhadoop04

配置2:vim conf/hbase-env.sh

export JAVA_HOME=/export/server/jdk
export HBASE_MANAGES_ZK=false
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"

配置3:vim conf/hbase-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.tmp.dir</name>
    <value>/export/server/hbase/tmp</value>
  </property>
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
<property>
    <name>hbase.zookeeper.quorum</name>
    <value>shhadoop02,shhadoop03,shhadoop04</value>
  </property>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://shhadoop02:8020/hbase</value>
  </property>
</configuration>

配置4:vim /etc/profile

export HBASE_HOME=/export/server/hbase
export PATH=$PATH:$HBASE_HOME/bin

HA

touch conf/backup-masters
echo node1 > conf/backup-masters
xsync conf

定义

数据模型

在这里插入图片描述
d8d
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

linux系统中可以检查xml的正确性

如果有问题才会打印输出
xmllint -noout hbase-site.xml

HBASE简介

HBase是一个开源的、分布式的,多版本的,面向列的,半结构化的NoSql数据库,提供高性能的随机读写结构化数据的能力。它能够直接使用本地文件系统,也可使用Hadoop的HDFS文件存储系统。不过,为了提升数据的可靠性和系统的健壮性,而且发挥HBase处理大数据的能力,使用HDFS做为文件存储系统才更为稳妥。html

HBase存储的数据从逻辑上来看就像一张很大的表,而且它的数据列能够根据须要动态地增长。除此以外,每一个单元(cell,由行和列所肯定的位置)中的数据又能够具备多个版本(经过时间戳来区别)。从下图能够看出,HBase还具备这样的特色:它向下提供了存储,向上提供了运算。另外,在HBase之上还可使用Hadoop的MapReduce计算模型来并行处理大规模数据,这也是它具备强大性能的核心所在。它将数据存储与并行计算完美地结合在一块儿。
HBase 和 HDFSweb

HDFSHBase
HDFS是适于存储大容量文件的分布式文件系统。HBase是创建在HDFS之上的数据库。
HDFS不支持快速单独记录查找。HBase提供在较大的表快速查找。
它提供了高延迟批量处理;没有批处理概念。它提供了数十亿条记录低延迟访问单个行记录(随机存取)。
它提供的数据只能顺序访问。HBase内部使用哈希表和提供随机接入,而且其存储索引,可将在HDFS文件中的数据进行快速查找。

HBASE表具备如下特色:

大:一个表能够有上亿行,上百万列
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,所以,表能够设计的很是稀疏。
HBase以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)。下面是HBASE表的逻辑视图:数据

在这里插入图片描述

hbase shell

list
disable ‘member’
enable ‘member’
put ‘member’,‘zhansan’,‘info:age’,‘24’
scan ‘member’
在这里插入图片描述

将数据记录到时间戳

hbase:001:0> import java.text.SimpleDateFormat
=> [Java::JavaText::SimpleDateFormat]
hbase:002:0> import java.text.ParsePosition
=> [Java::JavaText::ParsePosition]
hbase:003:0> SimpleDateFormat.new("yy/MM/dd HH:mm:ss").parse("08/08/16 20:56:29", ParsePosition.new(0)).getTime()
=> 1218891389000
hbase:004:0> 

查询 Shell 配置和shell设置配置

@shell.hbase.configuration.get(“hbase.rpc.timeout”)
@shell.hbase.configuration.setInt(“hbase.rpc.timeout”, 61010)

HBase数据模型

在 HBase 中,数据模型同样是由表组成的,各个表中又包含数据行和列,在这些表中存储了 HBase 数据。在本节中,我们将介绍 HBase 数据模型中的一些术语。

表(Table)
HBase 会将数据组织进一张张的表里面,一个 HBase 表由多行组成。

行(Row)
HBase 中的一行包含一个行键和一个或多个与其相关的值的列。在存储行时,行按字母顺序排序。出于这个原因,行键的设计非常重要。目标是以相关行相互靠近的方式存储数据。常用的行键模式是网站域。如果你的行键是域名,则你可能应该将它们存储在相反的位置(org.apache.www,org.apache.mail,org.apache.jira)。这样,表中的所有 Apache 域都彼此靠近,而不是根据子域的第一个字母分布。

列(Column)
HBase 中的列由一个列族和一个列限定符组成,它们由:(冒号)字符分隔。

列族(Column Family)
出于性能原因,列族在物理上共同存在一组列和它们的值。在 HBase 中每个列族都有一组存储属性,例如其值是否应缓存在内存中,数据如何压缩或其行编码是如何编码的等等。表中的每一行都有相同的列族,但给定的行可能不会在给定的列族中存储任何内容。

列族一旦确定后,就不能轻易修改,因为它会影响到 HBase 真实的物理存储结构,但是列族中的列标识(Column Qualifier)以及其对应的值可以动态增删。

列限定符(Column Qualifier)
列限定符被添加到列族中,以提供给定数据段的索引。鉴于列族的content,列限定符可能是content:html,而另一个可能是content:pdf。虽然列族在创建表时是固定的,但列限定符是可变的,并且在行之间可能差别很大。

单元格(Cell)
单元格是行、列族和列限定符的组合,并且包含值和时间戳,它表示值的版本。

时间戳(Timestamp)
时间戳与每个值一起编写,并且是给定版本的值的标识符。默认情况下,时间戳表示写入数据时 RegionServer 上的时间,但可以在将数据放入单元格时指定不同的时间戳值。

content:html 列族 column family
content: 列 , html:限定符 column qualifier
cell: 单元格
timestamp 时间戳:版本值的标识符

列的限定符,是列族中数据的索引;列族创建表格时是固定的,但是列的限定符是动态并且行与行之间的差别也是特别大的
列都给属于某个列族,否则(Column family 字段名 does not exis)
权限控制、存储、调优都是在列族层面进行的
cell:由行和列交叉决定;单元格是有版本的;单元格的内容是未解析的字节数组;
单元格由行,列族,列的限定符,值,代表版本的时间戳组成,唯一确定单元格,cell中的数据没有类型的字节数组;

表格视为一组稀疏的行的集合,但他们是按照列族进行物理存储的。
默认压缩过程中清除所有删除标记
对同一行的put操作保证了事务的ACID(原子性,一致性,隔离性,持久性),多行事务

row key

Hotspotting热发现

参考信息:
http://noobyard.com/article/p-awtllgdc-gs.html
https://www.w3cschool.cn/hbase_doc/hbase_doc-4poq2lqf.html

shell

> hbase shell
# “create”命令来创建一个新的表。您必须指定表名称和列族名称(ColumnFamily名称) 
> create 'member','member_id','address','info'
> list 'member'
> describe 'member'
> put'member','zhangsan','info:age','24'
> put'member','zhangsan','address:city','beijing'
> get 'member','zhangsan'
> get 'member','zhangsan','info'
# 修改列值
> put 'member','zhangsan','info:age','25'
> get 'member','zhangsan','info:age'
> get'member','zhangsan',{COLUMN=>'info:age'}
# 全表扫描
> scan 'member'
# 修改版本
> alter'member',{NAME=>'info',VERSIONS=>3}
# 删除指定列的字段
> delete 'member','zhangsan','info:age'
# 这个颇有意思,若是有两个版本的数据,那么只会删除最新的一个版本,当再次查询的时候结果就是上一个版本的
# 删除整行
> deleteall 'member','lisi'
# 查询表中有多少行
> count'member'
# 清空整张表
> truncate 'member'
> disable 'member'
> drop 'member'

hive操作hbase

数据存储在hbase中(flush前是内存中,flush之后在hdfs 二进制),使用hive的sql操作hbase数据,也可以将hive的数据直接导入到hbase中;
参考:https://www.bilibili.com/video/BV1fU4y1F7V8?p=10&vd_source=2206412ce4975125b2458c9d1ed874c7

pyspark操作hbase

参考: https://blog.csdn.net/hj1993/article/details/130651793
在这里插入图片描述
官网示例代码:
参考:https://github.com/apache/hbase/blob/master/hbase-examples/src/main/java/org/apache/hadoop/hbase/mapreduce/SampleUploader.java#L75

python操作hbase

需要安装:

pip install -i https://mirrors.aliyun.com/pypi/simple/ happybase
pip install -i https://mirrors.aliyun.com/pypi/simple/ thrift
# hadoop02服务启动thrift 
hbase-daemon.sh start thrift -p 9090

测试

import happybase
if __name__ == '__main__':
# 默认启动hadoop02 9090端口
    connection = happybase.Connection('hadoop02')
    connection.open()
    table = connection.table('mytable')
    row = table.row(b'row-key')
    print(row[b'cf1:col1'])

参考:https://blog.csdn.net/qq_50833617/article/details/135511938

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值