HBase 分布式数据库
我从来没见过我们单位的主库系统,无论是小机或者EMC。如果哪天在值班时,收到通知主库挂了,我会觉得是一个深藏在机房沉重铁门里的大家伙,冒了几缕青烟,紧接着监控上各种Web小图标就都红了....
在5、6年前,我们就希望能用分布式存储和分布式数据库来替代集中存储,觉得分布式廉价,而且高可靠。
其实,分布式存储不能替代集中存储。如果你问一个老鸟,他会给你一个关键字--事务。传统的集中存储有很强大的事务支持能力,而分布式系统不支持事务。
菜鸟就会很懵逼,事务?增删改查是事务吗?
什么是事务,我确实也不清楚,但我觉得分布式不能替换集中存储,主要因为性能,在小量数据规模下集中存储提供更高的性能。1000万条数据选择Mysql,1亿左右选择Oracle,10亿条数据用大数据。
至于高可靠,加各种HA吧。
一、BigTable传说
03年(作者上大二),谷歌发表了三篇论文:Google FS、MapReduce、BigTable。虽然Google没有公布这三个产品的源码,但是他发布了这三个产品的详细设计论文,奠定了风靡全球的大数据算法的基础!
HBase就是基于BigTable思想,由开源社区发布的实现,除了CURD之外,还有很多特点:
- 基于HDFS系统,存储空间不受限制
- 可不断增加维度
- 基于列的存储
- 信息多版本
很多时候,HBase被当做HDFS系统的管理系统,将文件作为内容直接存储在HBase中,实现海量文件的索引、查找。
二、安装HBase,伪分布式
环境搭建,
- HDFS
- Zookeeper
下载tar包
- 解压
- 修改conf/hbase-env.sh,设置JAVA_HOME
- 修改配置文件conf/hbase-site.xml
<property> <name>hbase.rootdir</name> <value>hdfs://namenode:9000/hbase</value> </property> <property> <name>hbase.zookeeper.quorum</name> <value>hbase</value> </property>
启动命令
bin/start-hbase.sh
>jps HMaster HRegionServer
随着版本迭代,安装步骤可能变化,参照https://hbase.apache.org/book.html#getting_started。
三、Shell
和MySql一样,先用shell完成一些操作。
Table操作
- list 列出全部表
- create "scores","grade","course"
创建一张表,命为scores,两个列族grade和course。 - describe "score"
查看表信息。
Table scores is ENABLED
scores
COLUMN FAMILIES DESCRIPTION
{NAME => 'course', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false',
KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER',
COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '
65536', REPLICATION_SCOPE => '0'}
{NAME => 'grade', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', K
EEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', C
OMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6
5536', REPLICATION_SCOPE => '0'}
CURD
- put 'scores', 'Tom', 'grade', 5
Tom是该条记录的RowKey,插入grade=5的记录;当Tom对应grade存在时,更新。 - put 'scores', 'Tom', 'course:math', 97
Tom是该条记录的RowKey,插入course:math=97的记录 - get 'scores', 'Tom', 'grade', 'course'
获得RowKey为Tom的记录
COLUMN CELL
course:math timestamp=1534492933043, value=97
grade: timestamp=1534492881763, value=5
- delete 'scores', 'Tom', 'course:math'
删除Rowkey 为Tom的记录。
hbase(main):011:0> delete 'scores', 'Tom', 'course:math'
0 row(s) in 0.0640 seconds
hbase(main):012:0> get 'scores', 'Tom', 'grade', 'course'
COLUMN CELL
grade: timestamp=1534492881763, value=6
1 row(s) in 0.0210 seconds
Alert操作
- alter 'scores', NAME => 'profile'
添加一列族 - alter 'scores', NAME => 'profile', METHOD => 'delete'
删除列族
四、JavaApi
1.pom.xml
<dependency> <groupId>org.apache.hbase</groupId> <artifactId>hbase-client</artifactId> <version>1.2.5</version> </dependency>
2.创建Connection,获取Table对象
Configuration conf = HBaseConfiguration.create(); conf.set("hbase.zookeeper.quorum","172.18.0.12"); Connection connection = ConnectionFactory.createConnection(conf);
3.插入Put操作
Table table = connection.getTable(TableName.valueOf("scores")); try { // Use the table as needed, for a single operation and a single thread Put p = new Put(Bytes.toBytes("Rose")); p.addColumn(Bytes.toBytes("grade"),null,Bytes.toBytes("3")); p.addColumn(Bytes.toBytes("course"),Bytes.toBytes("math"),Bytes.toBytes("90")); table.put(p); } finally { table.close(); connection.close(); }
4.读取Get操作
Get get= new Get(Bytes.toBytes("Rose")); //get.addColumn(Bytes.toBytes("course"),Bytes.toBytes("math")); //指定列 Result result = table.get(get); for (KeyValue keyValue : result.raw()) { System.out.println("列:" + new String(keyValue.getFamily()) +":"+ new String(keyValue.getQualifier()) + "====值:" + new String(keyValue.getValue())); }
列:course:math====值:90
列:grade:====值:3
五、总结
作者接触HBase时间不长,无法估量在企业中流行程度,但已深感这个系统的强大。本文是作者一点感悟,和HBase的入门shell和Api,希望作为入门参考。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
开源大数据周刊-第97期
资讯 TF和PyTorch都不够好!甲骨文开源GraphPipe 机器学习虽然在过去几年取得了重大进展,也出现了很多相关的框架,但因为缺乏事实上的标准,在重用和整合机器学习模型时通常涉及大量的定制化工作,而且在性能方面也存在不足。甲骨文开源的 GraphPipe 旨在解决这些问题,让机器学习变得更加简单,使企业更容易从任何框架部署和查询机器学习模型。 Apache Flink 1.6.0 正式发布 Apache Flink 1.6.0在上周发布,涵盖多项重要更新,此版本继续使 Flink 用户能够无缝地运行快速数据处理并轻松构建数据驱动和数据密集型应用程序。 Alluxio发布新版本,伯克利走出的技术将如何改变数据分析和机器学习的云端部署? 云端逐渐成为大数据企业的必争之地,近期开源分布式存储系统Alluxio发布1.8版本,加速针对数据分析
- 下一篇
8月17日云栖精选夜读 |HBaseCon亚洲2018峰会盛大开幕 阿里带你洞悉HBase大数据生态最新发展和行业实践
作为国内的主要社区贡献者,阿里巴巴此次联合小米、华为、滴滴等国内主流互联网企业承办的HBaseCon亚洲2018峰会落户北京,本次HBaseCon亚洲峰会不仅得到了Apache官方授权,还得到了来自Cloudera,Intel等商业公司社区PMC的强烈支持。 热点热议 HBaseCon亚洲2018峰会盛大开幕 阿里带你洞悉HBase大数据生态最新发展和行业实践 作者:桐碧2018 农业农村部谈首届“中国农民丰收节”:将联合电商打造全民购物节 作者:技术小能手 程序员永远修不好的Bug——情人节 作者:gavin_hsueh 知识整理 mysql中的几个常用的方法 作者:推荐码发放 人生苦短:Python里的17个“超赞操作 作者:qq1622479435 反射与动态代理原理 作者:vsky灬天宇 mybatis plus 中 EntityWrapper源码解读 作者:上古休斯 Linux中管理用户和组命令 作者:俄又不乱来 美文回顾 KIT开发出可擦除的3D打印墨水 可用于直接激光写入 作者:ixianbai 针对商品标题冗长问题,阿里工程师怎么解决? 作者:技术小能手 深度教练:让深...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- 设置Eclipse缩进为4个空格,增强代码规范
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6