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
HDFS | HBase |
---|---|
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