hbase获取最老的一条数据 hbase查询历史数据_历史数据


Apache HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,作为用户的首选分布式数据库;但HBase也有其局限性,譬如说不支持SQL语句查询,随着数据规模的变大,造成用户成本的大幅增加,其稳定性和故障恢复能力会变差,也给运维人员带来很大的挑战;我们在拜访客户时也发现有些用户将大量的历史数据和在线数据全部存储在HBase中也遇到了上述问题。因而本文将介绍一种帮助用户从HBase数据库中剥离出历史数据,减小HBase数据库的规模,提高其稳定性并大幅降低客户的成本,实现对历史数据的查询的方案。

Apache HBase 特点及应用场景

Apache HBase是一个分布式,版本化,面向列的开源数据库,构建在Aapche Hadoop 和Aapche ZooKeeper之上。它特别适合千万级的高并发海量数据的瞬间写入,而相对读数据量小的应用,支持存储结构化和非结构化数据和数据的多版本化。但它不适合大范围的扫描查询和支持多条件的查询,不支持基于SQL语句的查询。

Amazon Athena特点及应用场景

Amazon Athena 是一种交互式查询服务,让您能够轻松使用标准 SQL 直接分析 Amazon S3 中的数据。只需在 AWS 管理控制台中单击几下,客户即可将 Athena 指向自己在 S3 中存储的数据,然后开始使用标准 SQL 执行临时查询并在数秒内获取结果。Athena 是Serverless服务,因此没有需要设置或管理的基础设施,客户只需为其执行的查询付费。它特别适合使用 Athena 处理日志、执行即席分析以及运行交互式查询。Athena 可以自动扩展并执行并行查询,因此可快速获取结果,对于大型数据集和复杂查询也不例外。

本次实验演示的Demo数据来自于纽约出租车公司公布的公开数据源2017年1月到6月份Green Taxi trip 数据,下载链接:https://www1.nyc.gov/site/tlc/about/tlc-trip-record-data.page。

准备模拟数据并上传到S3 Bucket

登陆AWS 管理控制台,创建S3 bucket 命名为nytaxisdata,然后创建三个文件夹分别命名为green,hbasedata,hbaseexport如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_历史数据_02


处理数据

清理掉原始数据中的空格列,运行如下命令:

awk 'BEGIN{FS=OFS=","}{gsub(/ /,"-",$2);gsub(/ /,"-",$3);print $0}' green_tripdata_2017-01.csv |more

[hadoop@ip-172-31-28-170 ~]$ awk 'BEGIN{FS=OFS=","}{gsub(/ /,"-",$2);gsub(/ /,"-",$3);print $2,$3,$1,$6,$7}' green_tripdata_2017-01.csv >>greentrip01.csv

如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_数据_03


分别依次处理完对应的6个excel文件。然后将处理完的2017年1月到6月份的数据文件上传到green文件夹内,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_历史数据_04


创建EMR集群

登陆到AWS 管理控制台,选择EMR 服务,点击创建集群,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_数据库_05


点击Go to Advanced options,选择Hadoop和 HBase服务如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_06


在Storage Mode中选择S3,并设置上面刚创建的bucket路径s3://nytaxisdata/hbasedata,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_07


在Hardware Configuration设置中选择Uniform instance groups,并设置网络,子网组及根卷大小,此处设置为100G,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_历史数据_08


点击下一步,设置EMR集群的节点类型和实例数,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_数据库_09


点击下一步输入集群名称hbasecluster,其他默认即可,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_10


点击Next,设置EC2 key pair,如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_数据库_11


点击Create cluster,等待集群创建完成。

登陆HBase集群

创建一个表名为taxiinfo的表,指定列簇为userinfo 和Others,运行如下命令:

hbase(main):001:0> create 'taxiinfo','dropofftime','comno','others'

如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_12


导入数据到HBase集群

运行如下命令:


hbase获取最老的一条数据 hbase查询历史数据_历史数据_13


hbase获取最老的一条数据 hbase查询历史数据_历史数据_14


至此,验证HBase中的数据准备完毕。

剥离HBase数据库中的历史数据

根据需要用户可以将HBase数据库中的历史数据进行导出,HBase数据库中的数据导出为CSV文件有多种方式,譬如自己编写MapReduce类实现,或者借助Pig应用等,本文采用happybase包实现。HappyBase是方便开发人员通过python实现与HBase进行交互的开发库,通过编写Python脚本方式非常灵活的将任意条件的存储在HBase中的数据抽取处理转换成CSV文件。

安装HappyBase

登陆到EMR Master节点,运行如下命令:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_15


hbase获取最老的一条数据 hbase查询历史数据_数据库_16


hbase获取最老的一条数据 hbase查询历史数据_数据库_17


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_18


hbase获取最老的一条数据 hbase查询历史数据_数据库_19


hbase获取最老的一条数据 hbase查询历史数据_数据_20


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_21


使用Amazon Athena实现对历史数据的查询

打开AWS Athena 管理控制台,运行如下命令:


hbase获取最老的一条数据 hbase查询历史数据_历史数据_22


如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_23


https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-athena-to-replace-hbase-to-query-analyze-historical-data15.jpg

数据查询

在SQL脚本编写区,运行如下查询:

SELECT * FROM "nymetadatastore"."hbaseexport" limit 10;

如下图所示:


hbase获取最老的一条数据 hbase查询历史数据_hbase查询语句_24


https://s3.cn-north-1.amazonaws.com.cn/awschinablog/using-athena-to-replace-hbase-to-query-analyze-historical-data16.jpg

总结

通过本篇您将了解到如何使用使用HappyBase库编写Python脚本实现将HBase数据库中的历史数据的随意抽取并转换成csv文件,利用Athena实现对存储在S3上数据文件的访问。该方案可以帮助客户减小HBase集群,大幅降低数据的访问成本。

更多内容请点击:

使用 Athena 替换 Hbase 实现对历史数据的查询分析 | Amazon Web Servicesaws.amazon.com

hbase获取最老的一条数据 hbase查询历史数据_hbase获取最老的一条数据_25