首先申明一点,小菜并不是大神,只是一个刚入门大数据的菜鸟在这里跟你们分享一下学习心得,也算是对本身学习的一种总结,对于文章中的错误之处,欢迎你们指正。sql
工欲善其事,必先利其器,想学好大数据那就必然现要学会一些基本的大数据工具,这一些列着重分享一些小菜在学习过程当中的一些心得与体会。本篇做为开篇做今天先分享一下在大数据平台下最经常使用的两个工具,即Hbase与Hive。不少人可能会想学大数据一开始为何不学Hadoop平台搭建与使用,或者HDFS的使用,小菜的想法是Hadoop与HDFS想一下深刻理解没那么容易,因此先从偏应用的开始谈起,待按部就班熟悉了以后再回过头来聊聊Hadoop,聊聊HDFS会更好理解一些。废话很少说,开始聊正事。
首先先看一下Hbase,HBase是一个分布式的、面向列的开源数据库。他不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库。另外一个不一样的是HBase基于列的而不是基于行的模式。不少人不太理解什么叫基于列而不是基于行的。这里举个例子说明一下,像一般的关系型数据库就是典型的行模式,一张表建立后列是固定的(不考虑修改的状况,这里只说在表的应用期间),但对于行,是能够随意增减的。而对于Hbase来讲,他的存储是基于列的,也就说他的列是不固定的,每一条数据只是单纯的以rowkey作为惟一标识。任意一条数据写入的时候须要哪些列就将数据值与列对应清楚便可(具体写法会在后续讲到),而这么作除了能够很方便的对表结构进行扩展外还有一个更大的好处就是能够节省存储空间,因为他的这种存储结构致使他的每一条数据列数能够是不同的,举个形象化的例子就是在传统关系型数据库中,每一行的数据列是固定,哪怕有些数据的某几列是空的,但这一列仍是要存储下来,占用必定的存储空间,而对于hbase因为他的列是不固定的,这样当某条数据的某列值为空时,该列压根就不会存储下来,这样就能够大大的节省空间而且同时提升了数据读取的性能。数据库
接着说一下Hbase的逻辑结构,对于初级使用者来讲基本清楚rowkey和列簇,列这几个概念就能够了,至于时间戳和cell在初期几乎用不到。所谓rowkey也就是传统关系型数据库中的主键,每一条数据都会对于一个惟一的rowkey。每一张hbase表能够对应多个列簇(考虑到性能问题经验数据建议普通hbase表最多建不超过三个列簇),每个列簇能够对应多个列。每一列的对于列赋值包括引用时都须要指定列簇名和列名,即:put(列簇名,列名,value) 便可。apache
为了便于理解Hbase基于列的设计理念,这里举一个形象化的数据结构数据结构
从图中能够很明显的看出对于Hbase来讲,一、列是能够随意扩展 二、每一行数据的列能够是不一样的。小菜觉得,这即是Hbase的核心思想所在。分布式
接着聊一下Hive,hive是基于Hadoop的一个数据仓库工具,也能够近似的理解为一个基于Hadoop的ETL工具。他能够将存储在hdfs上面的结构化数据文件映射为一张数据库表,也能够本身建立新表并写入数据,但他本身自己并不存储数据,只是提供一个逻辑关系,真正的数据存储在hdfs上面。他最大的优点是提供简单的sql查询功能,并能够将传统的sql语句转换为MapReduce任务进行运行。 也就是对于只熟悉sql可是对map-reduce开发并不十分熟的人能够利用它在大数据平台上作一些ETL即统计分析。有点须要说明,在传统的ETL过程当中会涉及到一些比较复杂清洗工做,在hive上涉及到比较复杂的清洗转换时一样能够作,这里就要顺便介绍一下UDF函数了。函数
UDF函数能够直接应用于select语句,对查询结构作格式化处理输出内容,自定义UDF须要继承org.apache.Hadoop.Hive.ql.UDF,实现evaluate函数(至关于重写evaluate函数)。简单的讲udf函数就是一种能够直接在hql(hive上的sql)上用的轻量级函数,在函数内部能够定义一些清洗或者转换的方法从而间接的对数据的清洗与转换。工具