欢迎投稿

今日深度:

HBase基础,

HBase基础,


记录HBase的学习历程,趟过的坑和总结。内容较多,请先查看目录。

介绍

那HBase是什么呢?我们能用它来做什么?带着这两个疑问,我们一起学习

  • HBase是一个NOSQL数据库,能够完成大数据的秒级查询
  • HBase的数据真正存储的地方还是在HDFS
  • HBase的核心思想 / Bigtable(大表)原理:将所有数据存入一张表中,以存储空间换性能

HBase的几个概念

  • 表:存储和管理数据,Bigtable大表,而不是二维表
  • 行键:不唯一且不为空,相同行键作为一条记录
  • 列族:列的集合(创建大表时预先定义好列族,列是插入数据时HBase自动创建的)
  • 时间戳:列的一个属性
  • 单元格:一个单元格存储多个数据

HBase表的特点(五大)

  • 大:一张表有上亿行、上百万的列
  • 面向列:列式数据库,按照列来存储数据的
  • 稀疏:因为空列不占据存储空间
  • 无模式:不同行可以有截然不同的列
  • 数据类型非常单一:只有字符串类型,没有其他数据类型

安装

  • 下载 https://hbase.apache.org/downloads.html
  • 解压 tar -zxvf hbase-1.3.3-bin.tar.gz
  • 添加环境变量HBASE_HOME
    • vi /ect/profile
      export HBASE_HOME=/root/training/hbase-1.3.3
      export PATH=$HBASE_HOME/bin:$PATH
      
    • source /etc/profile

HBase的四种模式

本地模式

  • 特点:1.不需要HDFS,将数据直接保存在本地磁盘上;2.测试HBase数据库的增删改查功能
  • 修改hbase-env.sh,添加JAVA_HOME的路径
  • 修改hbase-site.xml
    <!--配置HBase在本地磁盘上数据保存的路径-->
    <property>
    <name>hbase.rootdir</name>
    <value>file:///root/training/hbase-1.3.3/data</value>
    </property>
    
  • 启动 start-hbase.sh,控制台输出以下日志即启动成功
    starting master, logging to /root/training/hbase-1.3.3/logs/hbase-root-master-bigdata11.out
    输入jps也能看到进程HMaster

伪分布式模式

  • 特点:单机虚拟出多个节点(HMaster、Regionserver),具备HBase的所有功能,HBase数据保存在HDFS上
  • 修改hbase-env.sh,添加JAVA_HOME的路径,设置HBASE_MANAGES_ZK=true(缺省值也是true)
    配置HBase管理Zookeeper的方式有两种,这里使用HBase自带的zookeeper(默认使用自带)
  • 修改hbase-site.xml
    <!--配置HBase在HDFS上数据保存的路径-->
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://bigdata11:9000/hbase</value>
    </property>
    <!--配置HBase在HDFS上数据备份的个数-->
    <property>
    <name>dfs.replication</name>
    <value>1</value>
    </property>
    <!--配置HBase集群的模式-->
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <!--配置zookeeper地址信息-->
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>bigdata11</value>
    </property>
    <!--配置zookeeper数据存放路径-->
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/data/myzk</value>
    </property>
    
  • 先start-all.sh启动Hadoop集群,再start-hbase.sh启动HBase集群,输入后能够看到控制台输出

    查看java进程jps

全分布式模式

基于Hadoop集群搭建,注意各节点时间要同步,
否则Hadoop执行MapReduce就会报错,HBase的Regionserver会自动停止

  • 集群规划
    bigdata12 HMaster、zookeeper
    bigdata13 Regionserver
    bigdata14 Regionserver
  • 给上面三个节点添加环境变量HBASE_HOME,然后source ~/.bash_profile
  • 修改hbase-env.sh,添加JAVA_HOME的路径,配置HBase管理Zookeeper的方式(默认使用自带)
  • 修改hbase-site.xml
    <!--配置HBase在HDFS上数据保存的路径-->
    <property>
    <name>hbase.rootdir</name>
    <value>hdfs://bigdata12:9000/hbase</value>
    </property>
    <!--配置HBase在HDFS上数据备份的个数-->
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>
    <!--配置HBase集群的模式-->
    <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
    </property>
    <!--配置zookeeper地址信息-->
    <property>
    <name>hbase.zookeeper.quorum</name>
    <value>bigdata12</value>
    </property>
    <!--配置zookeeper数据存放路径-->
    <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/data/myzk</value>
    </property>
    <!--允许HBase集群时间误差的最大值,单位是:毫秒-->
    <property>
    <name>hbase.master.maxclockskew</name>
    <value>180000</value>
    </property>
    
  • 修改regionservers
    bigdata13
    bigdata14
  • bigdata12配置好后,把本地整个文件夹拷贝到其他两个节点
    scp -r hbase-1.3.3 root@bigdata13:/root/training
    scp -r hbase-1.3.3 root@bigdata14:/root/training
  • 先start-all.sh启动Hadoop集群,再start-hbase.sh启动HBase集群,然后查看各个节点的进程


HA模式

部署HA前,访问http://bigdata12:16010

Hadoop的HA模式需要单独搭建,而HBase的HA模式不需要单独搭建
在从节点bigdata13或bigdata14手动启动:hbase-daemon.sh start master
原理:多几个HMaster

小技巧

如果你用的终端模拟工具是Xshell的话,在使用hbase shell的脚本时,肯定也发现了不能使用delted和back建回退删除,解决方法如下

操作HBase

参考资料:https://www.cnblogs.com/shadowalker/p/7350484.html

HBase数据保存的过程(Region的分裂)

HDFS:数据的倾斜 功能:数据平衡—>数据的拷贝(移动)
hdfs balancer run a cluster balancing utility

HBase:数据倾斜的问题 数据平衡----->数据的移动
问题:网络造成巨大的压力
解决方案:多增加从节点的个数

Java API 操作HBase

需要的依赖

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-common</artifactId>
    <version>1.3.1</version>
</dependency>
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-client</artifactId>
    <version>1.3.1</version>
</dependency>

HBase的过滤器

  • 列值过滤器:select * from emp where sal=3000;
    SingleColumnValueFilter
  • 列名前缀过滤器:查询员工的姓名 select ename from emp;
    ColumnPrefixFilter
  • 多个列名前缀过滤器:查询员工的姓名和薪水: select ename,sal from emp;
    MultipleColumnPrefixFilter
  • 行键过滤器:通过rowkey查询,类似通过Get查询数据
    RowFilter
  • 组合多个过滤器查询数据:where 条件1 and(or) 条件2
    如查询sal=3000的员工姓名,需要用到列值过滤器+列名前缀过滤器
    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); //and
    filterList.addFilter(singleColumnValueFilter);
    filterList.addFilter(columnPrefixFilter);

www.htsjk.Com true http://www.htsjk.com/hbase/39888.html NewsArticle HBase基础, 记录HBase的学习历程,趟过的坑和总结。内容较多,请先查看目录。 介绍 那HBase是什么呢?我们能用它来做什么?带着这两个疑问,我们一起学习 HBase是一个NOSQL数据库,能...
相关文章
    暂无相关文章
评论暂时关闭