在大数据时代,传统的关系型数据库系统已经不能再满足现在的大数据分析了.这篇实验报告针对此问题进行了Hbase与RDBMS的比较.在简单介绍了Hbase的背景之后,介绍了Hbase环境的配置和Hbase的基本使用语法,接下来在“各大电商电热水器购物评价”数据集上,分别使用Hbase和RDBMS实现相同的增、删、查、改、统功能,实验结果表示,Hbase在速度和数据安全方面都优于RDBMS.最后总结了Hbase与RDBMS的不同点,对“在什么情况下使用Hbase比较合适”这一问题给出了建议.
随着网络的普及以及通信技术的发展,大数据时代已经到来,不管是工业生产还是人们的8常生活,这些过程都会产生大量的数据,这种数据的规模已经远超传统行业环境下处理的数据规模,在这种背景下,传统的思维和处理方法已经不再适用了,只有使用大数据思维和大数据处理工具,才能顺应时代的发展.
大数据思维就是注重全量样本数据而不是局部数据,注重相关性而不是因果关系.通过分析和挖掘数据将其转化为知识,再由知识提炼成智慧以获取洞察.大数据思维在很多行业都有用武之地,比如在银行行业,基于大数据的风险控制体系就是一个很好的例子.而大数据工具就是借助云计算中的分布式平台,进行并行计算和分布式处理的工具,主要有Hadoop,Spark,Hbase,storn等。本次实验报告介绍了Hbase的相关知识,不仅是实验后的总结,也是一个实验的学习心得。
HBase--Hadoop Database,是-一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC服务器上搭建起大规模结构化存储集群.
HBase是GoogleBigTable的开源实现,模仿并提.供了基于Google文件系统的BigTable数据库的所有功能.类似Google BigTable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理BigTable中的海量数据,HBase同样利用Hadoop MapReduce来处理Hbase中的海量数据;Google BigTable利用Chubby作为协同服务,Hbase利用Zookeeper作为协同服务。
HBase的目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据并且由数百万列元素组成的数据表.HBase中的表一般有这样的特点:大(一个表可以有上亿行,上百万),面向列(面向列的存储和权限控制,列独立检索),稀疏(对于为空的列,并不占用存储空间,因此,表可以设计得非常稀疏).
HBase可以直接使用本地文件系统或者Hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥HBase处理大数据量等功能,需要使用Hadoop作为文件系统.与Hadoop一.样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器来增加计算和存储能力.HDFS为HBase提供了高可靠性的底层存储支持,MapReduce为HBase提供了高性能的计算能力, Zookeeper为HBase提供了稳定服务和失败恢复机制此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变得非常简单.Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变得非常方便.
1.1 Hbase数据模型
HBase是一个类似BigTable的分布式数据库,大部分特性和BigTable-一样是一个稀疏的、长期存储的(存在硬盘上)、多维度的、排序的映射表.这张表的索引是行关键字、列关键字和时间戳.每个值是一-个不解释的字符数组,数据都是字符串,没有类型.在HBase数据模型中,包括如下三个重要概念: 1)行键(Row Key):HBase表的主键表中的记录按照行键排序;
2)时间戳(Timestamp):每次数据操作对应的时间戳,可以看作是数据的版本号;
3)列族(Column Family): 表在水平方向有一个或者多个列族组成,一个列族中可以由任意多个列组成,即列族支持动态扩展,无需预先定义列的数量以及类型,所有列均以二进制格式存储,用户需要自行进行类型转换.
列名字的格式是“!family?:!Labeli?;",都是由字符串组成,每-一张表有一个family集合,这个集合是固定不变的,相当于表的结构,只能通过改变表结构来改变但是,label值相对于每-行来说都是可以改变的.
HBase把同一个family里面的数据存储在同一个目录底下,而HBase的写操作是锁行的,每一行都是一个原子元素,都可以加锁.所有数据库的更新都有一个时间戳标记,每个更新都是一个新的版本,而HBase会保留一定数量的版本,这个值是可以设定的.客户端可以选择获取距离某个时
间最近的版本,或者一次获取所有版本如表1是一个例子.
本次实验所用采用虚拟机搭建分布式平台,一个主节点,两个副节点,三个节点均安装centos6.8系统,配置好ssh免密通信,然后安装Hadoop,之后安装Hbase.关于作为对比的关系型数据库,本次实验采用了MySQL5.7版本.其实安装环境是非常复杂也容易出错的,因为要兼顾各个软件的版本问题,所以这里也将记录下安装过程中的出现的问题.
2.1各个节点准备
首先准备一个节点,配置好相关设置后,克隆此节点然后在进行后续的一些设置. 主要步骤如下: 1)网络配置网络畅通是保证虚拟机和物理机互通的前提,也是各个节点可以互相交换数据的重要条件.首先将虚拟机的网路设置为NAT模式,将网络设置为静态ip.通过命令:
vim etc/sysconfig/ network- scripts/ ifcfg-eth0
进入编辑模式,修改下面几项:
OnBOOT=yes
BOOTPROTO=static
IPADDR=192.168.14.100
NETMASK=255.255.255.0
GATEWAY=192.168.14.2
DNS1=114.114.114.114
之后使用命令:
service network restart
重新启动网卡,即配置好了网络,可以通过ping命令测试网络状态.网络连通之后就要设置hosts,更改主机名,然后关闭防火墙.
2)安装JDK和Hadoop
用ilezilla工具将jdk、Hadoop-2.7.2.tar.gz导 入到opt目录下面的software文件夹下面,解压jdk到/opt/module目录下,之后配置环境变量,之后要通过命令:
source etc/ profile
使配置文件生效,这一点经常会被忘记,生效之后,测试java是否安装成功.Hadoop的安装步骤同java,也是先解压然后配置环境变量,使其生效,追后检测是否安装成功.
3)克隆节点
将上面准备好的一个虚拟机作为主节点,进行克隆,克隆之后也要修改一些文件,不然克隆机是无法正常工作的.这个过程中,最关键的就是修改物理地址和网卡,使用命令:
vim etc/ udev/rules.d/ 70-persistent-net.rules
进入编辑界面,删除eth0该行,将eth1修改为eth0,同时复制物理ip地址,再次使用命令:
vim /etc/sysconfig/ network scripts/ifcfg -eth0
将HWADDR-一项,也就是物理地址,修改为刚才复制的内容,直接粘贴即可,然后重新启动网卡.在复制的俩个节点上,均执行上列操作,这样,三台虚拟机就准备好了.
2.2配置分布式Hadoop
下面就是配置分布式的Hadoop集群了,首先要配置免密登陆ssh,然后修改一些配置文件.
1) ssh配置
首先进入home目录下的.ssh文件夹,使用下列命令生成公钥和私钥: .
ssh-keygen -t rsa
将公钥拷贝到要免密登录的目标机器上,不同的机器,地址也要更改:.
ssh-copy-id 192.168.14.101
在每一个节点上,使用上述命令讲公钥发送过去.
2) core-site.xml文件的更改
第二项配置是修改hadoop临时文件夹的位置如果不修改的话,临时文件是每次运行mapreduce都会生成--个tmp文件夹,不便管理.
3) HDFS文件的更改
找到hadoop-env .sh文件,在结尾添加:
export JAVA HOME=/opt/ module/jdk1.7.0_79
找到hdfs-site.xml文件修改如下:
4) yarn文件的更改
找到yarn-env.sh文件,在结尾添加:
export JAVA. HOME=/opt/ module/jdk1.7.0_79
找到yarn-site.xml文件修改如下:
property>
5) mapreduce文件的更改
找到mapred env .sh文件,在结尾添加: .
export JAVA. HOME=/opt/module/jdk1.7.0_79
找到mapred.xml文件修改如下:
property>
在配置完成之后,还要在所有的节点上都进行以上修改,而且第--次启动的时候,要格式化namenode,然后逐一-启动hdfs和yarn,这样就启动了hadoop集群.
2.3 配置Hbase
在安装好hadoop之后,要保证hadoop能正常启动,然后启动hdfs和yarn,之后安装Hbase,安装完成之后就可以开始配置相关文件了.
1) hbase-env.sh文件的更改
找到hbaseenv.sh文件,在结尾添加:
export JAVA_ HOME=/opt/ module/jdk1.7.0_79
export HBASE. MANAGES. ZK=false
2) hbase-site.xml文件的更改
找到hbase-site.xml文件,修改如下:
property>
property>
property>
#指定Hlog和Hfile副本数,此参数值并不能大于HDFS节点数,如果datanode只有一台则此参数应该设置为1
property>
之后查看regionserver,确定是有三个之后,就说明成功了.
3)解决兼容性问题
首先删除所有的jar包,使用两条命令: .
rm -rf /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/lib
/hadoop-* .
rm -rf lib/zookeeper-3.4.6.jar
这里要注意--点,就是如果lib目录下的zookeeper包不匹配也需要替换.然后进行jar包的替换,将涉及到的jar包复制到Hbase的lib目录下,即可解决兼容性问题.
4) scp安装目录
将整理好的HBase安装目录scp到其他机器节点,使用下面的命令:
scp -r /opt/ modules/cdh/hbase-0.98.6-cdh5.3.6/
\hadoop 102:/ opt/ modules/cdh/
scp -r /opt/modules/cdh/hbase-0.98.6-cdh5.3.6/
\hadoop-senior03.itguigu.com:/opt/ modules/cdh/
之后将Hadoop配置文件软连接到HBase的conf目录下,使用下面的命令更改core- site.xml文件和hdfs-site.xml文件:
ln -s /opt/modules/ cdh/hadoop-2.5.0-cdh5.3.6/etc
/hadoop/core- site.xml /opt/modules/cdh/hbase-0.98.6-
cdh5.3.6/ conf/core-site.xml
ln -s /opt/ modules/ cdh/ hadoop-2.5.0-cdh5.3.6/etc
/hadoop/hdfs-site.xml /opt/ modules/cdh/ hbase-0.98.6-
cdh5.3.6/ conf/hdfs-site.xml
这里也要注意了,不要在其他几台机器做此操作.
5)启动Hbase .
使用下面的两条命令:
bin/hbase-daemon.sh start master
bin/hbase-daemon.sh start regionserver
启动Hmaster和regionserver,启动成功后,可以通过主机名:60010地址来访问HBase的管理页面,也就是浏览器登录ttp:/ /hadoop100:60010.
2.4 按照MySQL
1)安装YUM Repo
由于CentOS的yum源中没有mysql,需要到mysql的官网下载yumrepo配置文件,也可以直接用wget命令:
wget https:/ /dev .mysql.com/get/ mysql57-community-
release-el7-9.noarch.rpm
然后进行repo的安装:
rpm -ivh mysql57-community-release-e17-9.noarch.rpm
执行完成后会在/etc/yum.repos.d/目录下生成
两个repo文件mysql-community.repomysql-community-
source.repo.
2)安装MySQL
使用yum命令即可完成安装:
yum install mysql-server
这一步特别耗时间,之后就是启动MySQL服务,使用下面命令:
systemctl start mysqld
3)配置MySQL
获取安装时的临时密码:
grep 'temporary password' /var/log/mysqld.log
之后会给一个临时密码,使用下面的命令:
mysql -u root -P
回车,然后提示你输入密码输入刚才的临时密码,就可以进入数据库了,之后,首先要做的就是设置密码,使用命令:
set password=password(" yourpassword")
设置密码,MySQL就安装好了,
HBase与以前的关系数据库存在很大的区别,它是按照BigTable来开发的,是-一个稀疏的、分布的、持续多维度的排序映射数组.HBase就是这样-一个基于列模式的映射数据库,它只能表示很简单的“键-数据”的映射关系,它大大简化了传统的关系数据库.二者具体区别如下:
1)数据类型
HBase只有简单的字符串类型,所有类型都是交由用户自己处理,它只保存字符串.而关系数据库有丰富的类型选择和存储方式.
2)数据操作
HBase操作只有很简单的插入、查询、删除、清空等,表.和表之间是分离的,没有复杂的表和表之间的关系,所以,不能也没有必要实现表和表之间的关联等操作.而传统的关系数据通常有各种各样的函数、连接操作.
3)存储模式
HBase是基于列存储的,每个列族都有几个文件保存,不同列族的文件是分离的.传统的关系数据库是基于表格结构和行模式保存的.
4)数据维护
HBase的更新,确切地说,应该不叫更新,而是--个主键或者列对应的新的版本,而它旧有的版本仍然会保留,所以,它实际上是插入了新的数据,而不是传统关系数据库里面的替换修改.
5)可伸缩性
HBase和BigTable这类分布式数据库就是直接为了这个目的开发出来的,能够轻易地增加或者减少(在硬件错误的时候)硬件数量,而且对错误的兼容性较高.而传统的关系数据库通常需要增加中间层才能实现类似的功能.
6)高安全性
HBase有WAL机制,这是--套用来恢复数据的机制,能够应对服务器宕机多种情况,保证数据的安全性.而传统数据库都是基于日志记录的恢复机制,在极端情况下,比如在写入数据的时候突然断电,就会造成数据写入失败和丢失,但是WAL机制可以确保数据的有效性.
BigTable和HBase之类基于列模式的分布式数据库,比传统数据库更适应海量存储和互联网应用的需求,灵活的分布式架构可以使其利用廉价的硬件设备组建一个大的数据仓库.互联网应用是以字符为基础的,BigTable和HBase就是针对这些应用而开发出来的数据库.由于其中的时间戳特性,BigTable和HBase 与生俱来就特别适合于开发wiki、archive.org 之类的服务,而HBase直接就是作为一个搜索引擎的一部分被开发出来的.
5.1 数据集的导入
将CSV故事的数据集导入和Hbase和MySQL中,对于Hbase,要先把数据导入到HDFS中,然后再从HDFS中导入到Hbase中.
5.1.1将数据集的导入到Hbase
再导入之前,首先要在Hbase中创建命名空间,使用命令:
create name space‘yunjisuan'
创建了一个名为yunjsuan的数据空间,在这个数据空间中,建立一张表格,使用命令:
create 'yunjisuan:abc' 'info'
创建了--个名为abc的数据表,这张表的列族为info,注意这些字符都要在单引号之内,否则会出错.之后使用命令将文件导入到Hbase的这张表格中,使用ImportTsv工具,可以方便的导入CSV数据:
hbase org apache.hadoop.hbase.mapreduce.ImportTsv
-Dimporttsv .separator=",”
-Dimporttsv .columns=HBASE ROW _KEY,
info:Platform,info:Brand,
info:Comment,info:PageUrl,
info:time uc13:data /data.csv
导入之后,可以通过scan命令对数据表abc进行查看,导入数据总共花了3.7s的时间
5.1.2将数据集的导入到MySQL
将数据导入到MySQL中,首先要建立表格,根据数据集的各列的数据不同,也要设置不同的数据类型,这里考虑数据集中comment这一列,有 的评论内容很少,但是有的评论内容很多,所以必须兼顾最大值,将所有的列的数据类型都设置为varchar(1000),这里要说明一下,我们这- -张数据表必须设置为utf8类型,utf8字符集中的-一个汉字占据三个字符,所以设置为varchar(1000)最多可以容纳333字,而电商平台的评论中,最大值也就是200,所以可以满足需要具体的建表命令如下:
CREATE TABLE yunjisuan(
id INT NOT NULL AUTO. INCREMENT,
Platform VARCHAR(40) NOT NULL,
Brand VARCHAR(40) NOT NULL,
Comment varchar( 1000),
PageUrl varchar(100),
PRIMARY KEY ( id )
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
在MySQL中建立- -张yunjisuan表之后,可以使用load命令,将本地的CSV格式文件导入到数据库中,命令如下:
LOAD DATA INFILE */var/lib/ mysql-files/ data.csv'
INTO TABLE yunjisuan
CHARACTER SET utf8
FIELDS TERMINATED BY’,'
LINES TERMINATED BY \r\n'
IGNORE 1 LINES
(id,Platform,Brand,Comment,PageUrl);
这里注意,最后一行的各个列的名称顺序不能颠倒,要与数据集相同,也就是数据集,建表格还有导入数据的时候,都要注意顺序.导入之后,就可以使用show命令查看表格了导入时间用了13.2s.
5.2 数据的查找实验
对于两个不同的数据库,查找相同的内容,记录Hbse和MySQL的用时.查找内容决定为查找id为56832的数据.
5.2.1 Hbase的查找 数据实验
使用get命令可以查找数据,格式如下:
get 'tabe',rowkey' ,[familycolumn' ...
将rowkey的值设置为56832:
get 'yunjisuan:abc' ,'56832'
用时37ms.
5.2.2 MySQL的查找 数据实验
使用命令:
select * from yunjisuan where id=56832;
用时307ms.
5.3数据的删除实验
比较两种数据库删除所有数据和删除特定数据的用时,首先先记录删除特定数据的时间,这里特定数据设置为所有京东的评级数据,最后记录清空所有数据的时间.
5.3.1 Hbase的删除 数据实验
使用delete命令可以删除特定数据,命令如下:
delete 'yunjisuan:abc', 'platform:\E4 \BA \AC \E4
\B8 \9C',
其中的\E4 \BA \AC \E4 \B8 \9C表示京东的十六进
制编码,这条命令执行用时126ms.
使用truncate命令可以清空数据,命令如下:
truncate 'yunjisuan:abc'
用时64ms.
5.3.2 MySQL的删除数据实验
使用命令完成特定内容的删除:
delete * from yunjisuan where Platform=‘ 京东’;
用时1109ms.
使用truncate命令完成清空:
truncate 'yunjisuan'
用时513ms.
5.4数据的统计实验
统计某一个特定的电商平台有多少评论,我们这里设置为统计AO品牌的热水器评论数目,还有总共有多少种不同的电商平台.
5.4.1 Hbase的统计数据实验
使用show.filters命令,可以列出来Hbase所有的数据过滤器,使用SingleColumnValueExcludeFilter过滤器,可以统计有多少AO品牌的热水器:
scan 'yunjisuan:abc' ,COLUMN=> 'info:Brand',
FILTER=>”SingleColumnValueFilter
('info',' Brand',=,'substring:AO')”
查询结果为51910条记录,用时1591ms.对于统计总共有多少种不同的电商平台,查看过滤器,发现并没有合适的过滤器,查看资料,发现这种统计规则属于去重查询,而使用Hbase的交互命令,并不能做到去重查询,所以这一项查询必须要借助其他框架的接口,比如java或者hive的接口.
5.4.2 MySQL的统计数据实验
MySQL的统计有多少AO品牌的热水器:
SELECT COUNT(Brand) AS AO. mnum FROM yun-jisuan WHERE Brand='AO'
结果用时1661ms,查询结果与Hbase相同都是51910条记录.相比Hbase,统计不同的电商平台数目就很简单了,只要使用distinct查询就可以了:
SELECT DISTINCT Platform from yunjisuan
查询结果为只有京东,国美,易迅淘宝天猫四种电商平台,用时670ms.
实验结果表明,Hbase在查找,读写,统计等功能的实现上均比MySQL快了一个数量级,实验结果汇总如表2.
分析读写速度,为什么Hbase可以比MySQL快那么多,如表3,两者的结构对比如表,主要就是Hbase的结构是分布式的,多台计算机同时并行计算,速度较快.
Hbase也有自己的局限性,比如成本维护高,特别的,处理JION类型数据不方便,Hbase与RDBMS的功能对比如表4,当需要处理的业务和项目符合Hbase的优点时,就可以使用Hbase数据库,比如:
1)如果数据有很多列,且包含很多空字段
2)数据包含了不定数量的列
3)需要维护数据的版本
4)需要很高的横向扩展性
5)需要大量的压缩数据
6)需要大量的I/O
当符合以上几条条件时,使用Hbase是比较适合的,但是也不能死板地对照这几个条件.比如现在有一项业务要处理一百亿条JION数据,这时也是使用Hbase数据库的,不能说Hbase处理JION数据不方便就使用关系型数据库,这样是不对的,因为这个庞大的数量已经超过了传统数据库的处理能力其实在现在的电商平台中,传统数据库和Hbase都是同时使用的,结合两者各自的特点,用RDBMS处理实时数据,将Hbase用来存储庞大的离线数据或者模型.
|8. 参考文献
[1] 余辉.Hadoop+Spark生态系统操作与实战指南,清华大学出版社
[2] D. Hu, et al. Research on Hadoop Identity AuthenticationBased on Improved Kerberos Protocol. Int. J. Security Appl,2015: 429-438
[3] 张良均. Hadoop大数据分析与挖掘实战,机械工业出版社
Cloudboxer专业软件开发商
官方网址:http://www.cloudboxer.cn
联系我们:cloudboxer@yeah.net