Hadoop相关基础知识

  一、Hivesql

  1)Hive是一个构建在Hadoop上的数据仓库框架。它把数据组织成表,经过这种方式为存储在HDFS的数据赋予结构。咱们能够经过外壳环境与Hive进行交互,向它发送HiveQL(SQL的一种方言)命令。Hive把HiveQL转换为一系列在Hadoop集群上运行的MR做业。数据库

  应用:腾讯分布式数据仓库(TDW)即是基于Hive构建的。详见https://code.csdn.net/Tencent/tdw/app

  2)分区和桶:框架

  Hive根据分区列(如日期)的值对表进行粗略划分,把表组织成分区及子分区,以此加快数据分片的查询速度。在文件系统级别,分区只是表目录下嵌套的子目录(以下图)。数据文件中并不包含分区列的值,由于这些值包含在目录名中。分布式

  

  另外,关于分区的一些操做有:show partitions table_name;查看表的分区;alter table table_name add partition(partition_date = 20150101);增长一个分区,分区字段是partition_date;alter table table_name drop partition(partition_date = 20150101);删除一个分区。oop

  表或分区能够进一步分为桶,它会为数据提供额外的结构以得到更高效的查询处理。物理上,每一个桶就是表/分区目录里的一个文件。在map端链接时,若两个表以相同方式划分桶且桶个数是倍数关系,则处理左表某个桶的mapper知道右表相匹配的行在哪一个桶内,能够提升链接效率;另外,当桶中数据根据一个或多个列排序时,桶的链接变成了高效的合并排序。建立桶的语法:性能

  clustered by(id) sorted by(id asc) into 4 buckets(Hive根据对id取哈希值再mod桶数的结果,把记录随机分散到不一样的桶内)学习

  3)经常使用命令:.net

  hive> dfs -ls /user/hive/warehouse;(使用dfs命令访问Hadoop文件系统)命令行

  hanerfan@host:~> hive -e "select *from test_db.test limit 100"(执行命令行中指定的HiveQL)

  hanerfan@host:~> hive -f test.sql(执行文件中指定的HiveQL)

  4)order by可以产生全排序的结果,但它只用了一个reducer,所以对于大规模数据集,其效率很是低。

  若是不须要全局排序,可使用Hive的非标准的扩展sort by,它为每一个reducer产生一个排序文件。

  distribute by field_name确保全部具备相同field_name值的行都在同一个reducer,这一般是为了后续的汇集操做。

  5)存储格式

  (1)默认存储格式:分隔的文本

  (2)二进制存储格式:顺序文件和RCFile

 

  二、HBase

  1)HBase是一个在HDFS上开发的面向列的分布式数据库。若是须要实时地随机读写超大规模数据集,就可使用它。HBase经过Hadoop文件系统API来持久化存储数据。

  2)RDBMS与HBase的比较:

  标准的RDMBS是模式固定、面向行的数据库且具备ACID性质和复杂的SQL查询处理引擎。RDBMS强调事务的“强一致性”、参照完整性、数据抽象与物理存储层相对独立,以及基于SQL语言的复杂查询支持。对于大多数中小规模的应用,MySQL和PostgreSQL之类现有开源RDBMS解决方案所提供的易用性、灵活性、产品成熟度以及强大、完整的功能特性几乎是无可替代的。但若是想要支持大规模可伸缩的分布式处理能力,则会很是困难(好比须要放松ACID限制、放弃易用性等)。

  HBase自底向上地进行构建,可以简单地经过增长节点来达到线性扩展。它并非关系型数据库,不支持SQL。但它可以在廉价硬件构成的集群上管理超大规模的稀疏表。

  3)HBase自动把表水平分红区域,每一个区域由它所属的表,它的第一行及最后一行(不包括这行)表示。区域是HBase集群分布数据的最小单位。

  4)特性:

  (1)没有真正的索引:行是顺序存储的,每行中的列也是,因此不存在索引膨胀的问题,并且插入性能和表的大小无关。

  (2)自动分区:在表增加的时候,表会自动分裂成区域,并分布到可用的节点上。

  (3)线性扩展和对于新节点的自动处理:增长一个节点,把它指向现有集群,并运行Regionserver,区域自动从新进行平衡,负载会均匀分布。

  (4)普通商用硬件支持:集群能够用1000到5000美圆的单个节点搭建,而不须要使用单个得花5万美金的节点。RDBMS须要大量I/O,所以要求更昂贵的硬件。

  (5)容错:大量节点意味着每一个节点的重要性并不突出,不用担忧单个节点失效。

  (6)批处理:MR的集成功能使咱们能够用全并行的分布式做业根据“数据的位置”来处理它们。

 

 

  参考资料:

  《Hadoop权威指南》

 

 

不断学习中。。。