背景:

mysql不适合存储非常巨大的数据量,不利于扩展,影响性能。(包括oracle数据库十分巨大)我们就需要考虑HBase作为存储工具。

HBase具有非常高的读写性能,支持无上限的数据存储容量

数据采集:Flume NG Logstash sqoop
数据存储:HDFS HBase Hive Kafka
数据分析:Hive MR Spark streaming SQL Storm
数据展示:Echarts Excel表格

HBase与传统关系数据库区别(列式数据与行式数据):

HBase适合大量插入同时又有读的情况,key-value,noSql

HBase是一种日志集数据库。它的存储方式,像日志文件一样。它是批量大量的写入到硬盘,通常以文件形式读写,读写速度取决于硬盘和机器的传输速度。oracle瓶颈是硬盘寻道时间。

HBase允许保存不同时间戳的版本。数据按时间排序,适合找出某人最近浏览记录,最近的N种等等

 Hbase的局限。只能做很简单的Key-value查询。它适合有高速插入,同时又有大量读的操作场景

Oracle是行式数据库,而Hbase是列式数据库。列式数据库的优势在于数据分析这种场景。数据分析与传统的OLTP的区别。数据分析,经常是以某个列作为查询条件,返回的结果也经常是某一些列,不是全部的列。在这种情况下,行式数据库反应的性能就很低效

HBase安装

下载 http://mirrors.hust.edu.cn/apache/hbase

将hbase-2.2.4-bin.tar放在linux /myfiles/hbase目录下,解压tar -zxvf hbase-2.2.4-bin.tar.gz

修改环境变量

vim /etc/profile

export HBASE_HOME=/myfiles/hbase/hbase-2.2.4
export PATH=$HBASE_HOME/bin:$PATH
#关闭自身zookeeper采用外部
export HBASE_MANAGES_ZK=false
export HBASE_PID_DIR=/myfiles/hbase/pids

source /etc/profile

修改/myfiles/hbase/hbase-2.2.4/conf/hbase-env.sh添加变量

export JAVA_HOME=/myfiles/java/jdk1.8.0_191
export HBASE_HOME=/myfiles/hbase/hbase-2.2.4
export PATH=$PATH:/myfiles/hbase/hbase-2.2.4/bin
export HBASE_MANAGES_ZK=false
在bin/confg目录下修改 vim hbase-site.xml
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://cluster/hbase</value>
  </property>
  <!-- hadoop集群名称 -->
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>node01,node02,node03</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2181</value>
  </property>
  <!--  是否是完全分布式 -->
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <!--  完全分布式式必须为false  -->
  <property>
    <name>hbase.unsafe.stream.capability.enforce</name>
    <value>false</value>
  </property>
  <!--  指定缓存文件存储的路径 -->
  <property>
     <name>hbase.tmp.dir</name>
     <value>/myfiles/hbase/data01/hbase/hbase_tmp</value>
  </property>
  <!--  指定Zookeeper数据存储的路径  -->
  <property>
     <name>hbase.zookeeper.property.dataDir</name>
     <value>/myfiles/hbase/data01/hbase/zookeeper_data</value>
  </property>
  <property>
     <name>hbase.master</name>
     <value>master:60000</value>
  </property>
</configuration>

注意!!!

将hostname 修改为对应ip

192.168.100.5

配置regionservers

修改文件: vim /home/hadoop/hbase/conf/regionservers。添加DataNode的IP或者机器名即可,这个文件把RegionServer的节点列了下来,内容为:

node02
node03

配置高可用

保证HBase集群的高可靠,HBase支持多backup设置。当active挂掉之后back可以自动接管HBase集群。

在/myfiles/hbase/hbase-2.2.4/conf目录下新增配置
backup-masters,在配置添加要备份的节点的hostname(比如:node02,node03)

vi backup-masters

node02
node03

在bin目录下 start-hbase.sh启动。

启动时候报错log4j冲突---目前我不需要解决也可以

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hbase/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]

移除其中一个

mv /myfiles/hbase/hbase-2.2.4/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar /myfiles/hbase/hbase-2.2.4/lib/client-facing-thirdparty/slf4j-log4j12-1.7.25.jar.bak

报错:

java.lang.IllegalArgumentException: java.net.UnknownHostException:cluster

需要将hdfs-site.xml和core-site.xml,复制一份到/myfiles/hbase/hbase-2.2.4/conf

否则注册不到master上

报错

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

针对启动hadoop的警告,需要将hadoop安装目录下的lib/native引入到环境变量中

export JAVA_LIBRAY_PATH=/myfiles/hadoop/hadoop-3.2.1/lib/native

在/myfiles/hbase/hbase-2.2.4/conf/hbase-env.sh 也一样添加

注意:在过程中遇到一直无法注册建议删除hdfs以及hbase目录重新安装

再次启动

hbase shell 进入命令页面说明安装成功

访问

http://192.168.100.5:16010/

Hbase物理迁移。

(首先保证mapReduce没有问题)

hbase org.apache.hadoop.hbase.mapreduce.Export 'todopool'  /back/hbase/todopool
导出到hdfs文件夹中

hbase org.apache.hadoop.hbase.mapreduce.Import 'todopool'  /back/hbase/todopool