各位有兴趣购买云服务器的可以通过我的链接:点击进行购买,有优惠哦!
阿里云服务器领券,新客专享
一、HBase学习大纲
-
1、设计HBase的初衷,HBase的特性,对比MySQL、Solar关系型数据库
-
2、HBase shell,生产用的不多,但是也要了解,老师生产中使用的Phoenix;shell中的建表、增删改也需要了解。
-
3、HBase conf:配置上的东西,有哪些东西是配置完后重新启动集群的。
-
4、HBase的基本术语:Row、cf、ttl version
-
5、HBase搭建(单节点搭建)+ Demo(Java API)
-
6、HBase架构:数据的读写、客户端请求到读到写的每一个部分是怎样一个流程;MASTER、REGIONSERVER、ZK (********)
-
7、Hbase调优:值是调大值还是调小值。
-
8、HBase迁移:版本(一致、不一致)的迁移、集群间(通信、不通信)的迁移;对于关系型数据库,如何将数据迁移到HBase中,随着业务量增大,在MySQL中的数据已经处理不过来了.
-
9、 HBase案例:
-
10、HBase问题排查
-
11、建议:如何去学习?对于不同的人员:运维、开发
二、HBase定位
官网地址:hbase.apache.org
-
Apache HBase is the Hadoop database,a distributed, scalable, big data store.
-
Use Apache HBase when you need random,realtime read/write access to your Big Data(随机、实时的的读写对于访问大数据). This project’s goal is the hosting of very large tablesI(目的是存储一个大宽表) --billions of rows X millions of columns(大到数十亿行,百万列) --atop clusters of commondlity hardware. Apache HBase is an open-source,distributed,versioned,non-relational database modeled after Google’s Bigdata(开源的、分布式的、版本化的、非关系型数据库); A Distributed Storage System for Structured Data by Chang et al. Just as Bigtable leverages the distributed data storage provided by the Google File System. Apache HBase provides Bigtable-like capabilities on top of Hadoop and HDFS.
-
一般的表也就一两百个字段;底层存储时HDFS,后续的HFile文件最终落盘就是HDFS,hadoop中有namenode,datanode;HBase的数据节点和datanode存储在一起。
-
定位就是存储大表的。
2.1 HBase特性
官网中的描述:
1、Linear and modular scalability(线性和模块化可伸缩性)
2、Strictly consistent reads and writes(严格一致的读写)
3、Automatic and configurable sharding of tables(自动和可配置的表分片)
4、Convenient base classes for backing Hadoop MapReduce jobs with Apache HBase tables(区域服务器之间的自动故障转移支持)
5、Easy to use Java API for client access(易于使用Java API进行客户机访问)
6、Block cache and Bloom Filters for real-time queries(块缓存和布鲁斯过滤器的实现)
7、Thrift gateway and REST-ful Web service that supports XML,Protobuf,and binary encoding options(Thrift gateway和一个支持XML、protobuf和二进制数据编辑可扩展想的REST-FUL web服务)
8、Extensible jruby-based(JIRB) shell(可扩展的基于JIRB的shell)
9、Support for exporting metrics via the Hadoop metrics subsystem to files or Ganglia; or via JMX(支持通过Hadoop度量子系统将度量导出到文件或Ganglia)
- 实际生产上不使用Java API,目前数据使用Phoenix来处理;我们使用Spark读取HBase的数据,Spark SQL来处理数据,平常的数据需求直接使用工具。Hive中的pull down(做过滤时候的位次下推,包括一些rest-api,支持二进制的数据操作,包括一些数据处理和监控)
2.2 HBase对比关系型数据库
1、动态列
2、非结构化(数据存储形式)
3、事物(大数据中很少会单独考量事物这种概念,MySQL中存在事物这一概念,大数据中不存在事物这一概念)
4、分布式的,可扩展的
5、支持的列多(数十万行百万列)
6、使用的时K、V存储
7、表与表间的耦合性低
8、版本化造成的差异:
- 对于业务库常规MySQL,只允许存在一个版本,当我们第二条数据做更新的时候,第一条值覆盖掉了;比如第一条数据200,对它进行更新300;更新完后只知道300,不知道原来的值是200.
- 对于HBase,加如我们想要保留3个版本,设置version=3;第一次来的数据是100,第二次200,第三次300,第四次的版本就是400;会把第一次的数据删除掉,永远保留3个最大版本。问题:存在数据冗余。
- 只要有一个人需要数据,就需要保留数据
9、存在数据冗余
10、大数据量查询性能比较高:
- 相比于关系型数据库,查询一条数据会将整行数据加载出来,再去筛选;HBase只筛选指定的列。比如:MySQL有10列,只有5列是有值;对于HBase:null是不存在的,
11、HBase不支持二级索引,只支持rowkey检索、scan(全表、范围),rowkey检索的时候不建议特别长。Solar、Phoenix、ES都支持索引方式。
12、trigger不支持
什么叫动态列:
- 这个表多少列,每一行就有多少列;对于HBase来说,可以第一行有10列,第二行有15列;因为HBase对于null值是不存储的。MySQL不存值位置还是占用的,HBase不存储值位置是不占用的。
小结:
-
简单认知:支持随机、实时读写的;适合存储宽表数据,底层基于HDFS来处理,支持容灾,支持监控
-
对比MySQL为什么要使用它?版本特性(历史数据查询多个版本)
2.3 单节点HBase的安装
1、下载:
- wget http://archive.cloudera.com/cdh5/cdh/5/hbase-1.2.0-cdh5.12.0.tar.gz
2、修改hbase-env.sh的配置
- 把JAVA_HOME的环境配上即可
# The java implementation to use. Java 1.7+ required.
export JAVA_HOME=/usr/java/jdk1.8.0_45
3、修改hbase-site.xml
<property>
<name>hbase.rootdir</name>
<value>/home/hadoop/app/hbase-1.2.0-cdh5.12.0/hbasedata</value>
</property>
<!--默认使用的是HBase自带的zk,这里设置zk数据存储位置,生产上使用Zookeeper的
zoo.cfg中配置的数据路径-->
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/home/hadoop/app/hbase-1.2.0-cdh5.12.0/zkdata</value>
</property>
<property>
<name>hbase.unsafe.stream.capability.enforce</name>
<value>false</value>
</property>
4、随后即可进入bin目录下启动:
- cd /home/hadoop/app/hbase-1.2.0-cdh5.12.0/bin
./start-hbase.sh
5、查看进程发现HMaster即可:
[hadoop@hadoop004 bin]$ jps -m
11585 HMaster start
4339 SecondaryNameNode
4042 NameNode
11964 Jps -m
4143 DataNode
2.4 HBase Shell
-
MySQL的数据在达到一定量之后就会存在数据库迁移,如何去选择,就需要根据业务场景去选择了。
-
Redis老师生产中去做临时库来处理,需要从不同的点去考量。
1、输入help就能够查看所有的命令帮助:
-
tools(工具):重新划分assign、compact、flush(手动刷新)、split
-
replication:add_peer、是否启用、是否禁用
-
snapshots(快照):两个集群间数据同步因为版本差异过大只能使用Java API的方式
-
configurarition:静态配置、动态配置
命令How To Use?
注意按键上的使用:
1、backspace:是删除后面一位
2、ctrl+backspace:正常的删除前一位