Hadoop相关基础知识

  1、Hive

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

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

  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);删除一个分区。

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

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

  3)常用命令:

  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

 

  2、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权威指南》

 

 

不断学习中。。。

你可能感兴趣的:(hadoop)