背景:
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