简介: HBase是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。可在廉价PC Server上搭建起大规模结构化存储集群。 HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。 HBase与传统数据库(RDBMS)的最大区别面向列。操作数据库,如果是索引访问用HBase+Hadoop 当前市场上有很多类似的序列化系统,如Avro、Google 的 Protocol Buffers、Facebook 的 Thrift。 Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。 HBase是Hadoop生态系统的一个组成部分。如图: HBase与HDFS对比: 两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点; HDFS适合批处理场景但不支持数据随机查找,不适合增量数据处理,不支持数据更新。 HBase表的特点: 为什么要使用hbase? HBase数据模型 表:Tables 由 rows 和 columns 组成。数据存放在带标签的表中。HBase中的每一张表,就是所谓的BigTable。稀疏表。 单元格:Table cells单元格有版本(Timestamp是HBase插入单元格时候的时间戳)。 时间戳( Timestamp ):时间戳,每次数据操作对应的时间戳,可以看作是数据的version number。是一个 64 位整数 列:列组成“列族” 列族:所有的列族成员有相同的前缀。物理上,所有的列族成员都一起存放在文件系统中。HBase实际上就是一个面向列族的存储器。Table在水平方向有一个或者多个列簇组成,一个列簇中可以有任意多个列组成 RowKey:二进制值byte[],按字典顺序排序。行键,Table的主键,Table中的记录按照Row Key排序 ColumnKey:二进制值byte[],按字典顺序排序。是表中每条记录的“主键”,方便快速查找 value:一个未解释的字节数组byte[]。 注意:表中的不同行可以拥有不同数量的成员。即支持“动态模式”模型 HBase数据模型中 行 的特点: HBase数据模型中 列 的特点 HBase架构体系 Client:包含访问HBase的接口,client维护着一些cache 来加快对HBase的访问,比如region的位置信息 Zookeeper: Master:可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master运行 Region Server: 注意: HBase中有两张特殊的Table: .META.:记录了用户表的Region信息,.META.可以有多个regoin -ROOT-:记录了.META.表的Region信息,-ROOT-只有一个region Zookeeper中记录了-ROOT-表的location Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数 据的位置去访问 启动HBase: 启动HBase shell: 退出HBase shell: 帮助命令: 查看集群状态 创建表: 添加记录: 查看记录: 查看表中的记录总数: 删除记录: 删除整行: 删除一张表:先要屏蔽该表,才能对该表进行删除。1、 注意:修改表结构或者删除表,需要先disable 查看所有记录: 查看某个表某个列中所有数据: 清空表: 获取单元格数据的版本数据: 列出全部表: 得到表的描述: 查看表的状态 : 使表有效或无: HBase的组件: 管理用户对Table的增、删、改、查操作 管理RegionServer的负载均衡、调整Region的分布 在Region Split后,将新Region分布到不同的RegionServer。 在RegionServer宕机后,该RegionServer上所管理的Region 由HMaster进行重新分配。 HBase的组件单元: 表空间:在关系数据库系统中,命名空间 namespace 指的是一个表的逻辑分组,同一组中的表有类似的用途。有两个默认表空间: 表:HBase以表的形式存储数据,表在 hdfs 上以文件夹形式存(HBase表组成模型在上面) HBase vs Oracle HBase写入数据流程: Client通过Zookeeper调度获取表的元数据信息; Cilent通过rpc协议与RegionServer交互,通过-ROOT-表与.META.表找到对应的对应的Region; 将数据写入HLog日志中,如出现意外可以同通过HLog恢复信息; 将数据写入Region的MemStore中,当MemStore达到阈值开始溢写,将其中的数据Flush成一个StoreFile; MemStore不断生成新的StoreFile,当StoreFile的数量到达阈值后会出发Compact合并操作,将多个StoreFile合并成一个StoreFile; StoreFile文件会不断增大,当达到阈值后会出发Split操作,把当前的Region且分为两个新的Region。父Region会下线,两个子Region会被HMaster分配到相应的RegionServer。 HBase查询数据流程: Client访问Zookeeper,从ZK获取-ROOT-表的位置信息,通过访问-ROOT-表获取.META.表的位置,然后确定数据所在的HRegion位置; Client访问HRegion所在的HRegionServer,通过HRegionServer获取需要查找的数据; Client到HRegion的中去查找数据,首先到MemStore中查找,查到直接返回;查不到就去ClockCache中查找,查到直接返回;再查不到就去StoreFile中读数据,把读到的数据存入BlockCache中再返回Client。 内存优化: HBase 操作过程中需要大量的内存开销,毕竟 Table 是可以缓存在内存中的,一般会分配整个可用内存的 70%给 HBase 的 Java 堆。但是不建议分配非常大的堆内存,因为 GC 过 程持续太久会导致 RegionServer 处于长期不可用状态,一般 16~48G 内存就可以了,如果因 为框架占用内存过高导致系统内存不足,框架一样会被系统服务拖死。 rowkey优化的主要方式: 一条数据的唯一标识就是 RowKey,那么这条数据存储于哪个分区,取决于 RowKey 处 于哪个一个预分区的区间内,设计 RowKey 的主要目的 ,就是让数据均匀的分布于所有的 region 中,在一定程度上防止数据倾斜。 基础优化: 1、允许在 HDFS 的文件中追加内容 文件:hdfs-site.xml、hbase-site.xml 属性:dfs.support.append 解释:开启 HDFS 追加同步,可以优秀的配合 HBase 的数据同步和持久化。默认值为 true。 2、优化 DataNode 允许的最大文件打开数 文件:hdfs-site.xml 属性:dfs.datanode.max.transfer.threads 解释:HBase 一般都会同一时间操作大量的文件,根据集群的数量和规模以及数据动作, 设置为 4096 或者更高。默认值:4096 3、优化延迟高的数据操作的等待时间 文件:hdfs-site.xml 属性:dfs.image.transfer.timeout 解释:如果对于某一次数据操作来讲,延迟非常高,socket 需要等待更长的时间,建议把 该值设置为更大的值(默认 60000 毫秒),以确保 socket 不会被 timeout 掉。 4、优化数据的写入效率 文件:mapred-site.xml 属性:mapreduce.map.output.compress 、mapreduce.map.output.compress.codec 解释:开启这两个数据可以大大提高文件的写入效率,减少写入时间。第一个属性值修改为 5、设置 RPC 监听数量 文件:hbase-site.xml 属性:Hbase.regionserver.handler.count 解释:默认值为 30,用于指定 RPC 监听的数量,可以根据客户端的请求数进行调整,读写 请求较多时,增加此值。 6、优化 HStore 文件大小 文件:hbase-site.xml 属性:hbase.hregion.max.filesize 解释:默认值 10737418240(10GB),如果需要运行 HBase 的 MR 任务,可以减小此值, 因为一个 region 对应一个 map 任务,如果单个 region 过大,会导致 map 任务执行时间 过长。该值的意思就是,如果 HFile 的大小达到这个数值,则这个 region 会被切分为两个Hfile。 7、优化 HBase 客户端缓存 文件:hbase-site.xml 属性:hbase.client.write.buffer 解释:用于指定 Hbase 客户端缓存,增大该值可以减少 RPC 调用次数,但是会消耗更多内 存,反之则反之。一般我们需要设定一定的缓存大小,以达到减少 RPC 次数的目的。 8、指定 scan.next 扫描 HBase 所获取的行数 文件:hbase-site.xml 属性:hbase.client.scanner.caching 解释:用于指定 scan.next 方法获取的默认行数,值越大,消耗内存越大。 9、flush、compact、split 机制 当 MemStore 达到阈值,将 Memstore 中的数据 Flush 进 Storefile;compact 机制则是把 flush 出来的小文件合并成大的 Storefile 文件。split 则是当 Region 达到阈值,会把过大的 Region 一分为二。 下载安装Eclipse,Eclipse IDE for Java Developers 下载安装jdk(Windows) 下载安装Maven 设置jdk、maven环境变量: 验证jdk、maven安装:java -version、javac -version、mvn -version 修改maven配置: 补充: HBase高可用配置,涉及的配置文件名称backup-masters H、PATH、MAVEN_HOME 补充: HBase高可用配置,涉及的配置文件名称backup-masters HBase分布式安装时需要将配置文件中的HBase.cluster.distributed值修改为true
HBase
-ROOT-
和.META.
HBase的shell操作
start-hbase.sh
hbase shell
quit
help
status
create '表名称', '列族名称1','列族名称2','列族名 称N'
create 'users','user_id','address','info'
put '表名称', '行名称', '列名称:', '值'
put 'users','xiaoming','info:age','24';
get '表名称', '行名称'
get 'users','xiaoming' #取得一个id的所有数据 get 'users','xiaoming','info' #获取一个id,一个列族的所有数据 get 'users','xiaoming','info:age' #获取一个id,一个列族中一个列的所有数据
count '表名称'
count 'users'
delete '表名' ,'行名称' , '列名称'
delete 'users','xiaoming','info:age'
deleteall '表名' , '行名称'
deleteall 'users','xiaoming'
disable '表名称'
。2、drop '表名称'
disable 'users' drop 'users'
scan "表名称"
scan 'test' #查看test表中的所有数据
scan "表名称" ,'列族名称:列名称'
scan 'test','info:age'
truncate '表名'
truncate 'users'
get 'users','xiaoming',{COLUMN=>'info:age',VERSIONS=>1}
list
describe '表名'
describe 'users'
exists '表名'
exists 'users' is_enabled 'users' is_disabled 'users
enable/disable '表名'
enable 'users' disable 'users'
表设计和调优
true,第二个属性值修改为:org.apache.hadoop.io.compress.GzipCodec 或者其 他压缩方式。
有关安装:
安装HBase:
#adduser hadoop //useradd #开头表示root操作 #cat /etc/passwd #ls /home/ #su hadoop
chmod -R 777 /opt
tar zxvf /tmp/jdk-8u241-linux-x64.tar.gz
(tar zxvf filename可以解压缩.tar.gz
文件)#!/bin/bash export JAVA_HOME=/opt/jdk export PATH=.:$JAVA_HOME/bin:$PATH
systemctl status firewalld
systemctl stop firewalld
sestatus -v
或者 getenforce
setenforce 0
。0设置 SELinux 成为 permissive 模式,1设置为 enforcing 模式vim /etc/selinux/config, 将SELINUX=enforcing改为SELINUX=disabled
systemctl status sshd
ssh-keygen -t rsa
,生成文件在:~/ .ssh/
ssh localhost
。ssh远程登录服务使用的端口号是22start-dfs.sh
start-yarn.sh
。登录网络界面检查:https://192.168.100.11:50070start-hbase.sh
hbase shell
。检查hbase:https://192.168.100.11:16010使用python操作(CentOS7):
python3
显示 Python 3.6.8 (default, Aug 7 2019, 17:28:10)
pip3 install thrift
yum install python3-devel
。Centos 7中安装软件包提示”python.h: 没有那个文件或目录”, 可以安装python3-devel解决此问题pip3 install happybase
pip3 list
hbase-daemon.sh start thrift
ps aux|grep thrift
或 jps
使用java操作:
https://www.eclipse.org/downloads/packages/
https://www.oracle.com/java/technologies/javase-jdk8-downloads.html
https://maven.apache.org/download.cgiJAVA_HOME、CLASSPATH、PATH、MAVEN_HOME
apache-maven-3.6.3confsettings.xml
<localRepository>本地路径</localRepository> <!-- 配置maven路径 -->
mvn help:system
成功提示:BUILD SUCESS
5. 验证jdk、maven安装:java -version、javac -version、mvn -version 6. **修改maven配置:**
apache-maven-3.6.3confsettings.xml`<localRepository>本地路径</localRepository> <!-- 配置maven路径 -->
mvn help:system
成功提示:BUILD SUCESS
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算