学习Hive编程指南笔记
1 MapReduce
MapReduce是一种计算模型,该模型可将大型数据处理任务分解成很多单个的、可以在服务器集群中并行执行的任务。这些任务的计算结果可以合并在一起来计算最终的结果。
MapReduce将计算过程分为两个阶段:Map和Reduce
1)Map 阶段并行处理输入数据---------》分
2)Reduce 阶段对Map结果进行汇总----------》合

在MapReduce计算框架中,某个键的所有键-值对都会被分发到同一个reduce操作中。确切地说,这个键和这个键所对应的所有值都会被传递给同一个Reducer,reduce过程的目的是将值的集合转换成一个值(例如对一组数值求和或求平均值),或者转换成另一个集合。这个Reducer最终会产生一个键-值对。
Hadoop神奇的地方一部分在于后面要进行的Sort(排序)和Shuffle(重新分发)过程。
Hadoop会按照键来对键-值对进行排序,然后“重新洗牌”,将所有具有相同键的键值对分发到同一个Reducer中。
2 Hive
HiveQL可能和MySQL的方言最接近,但是两者还是存在显著性差异的。Hive不支持行级插入操作、更新操作和删除操作。Hive也不支持事务。Hive增加了在Hadoop背景下的可以提供更高性能的扩展,以及一些个性化的扩展,甚至还增加了一些外部程序。
有好几种方式可以与Hive进行交互
命令行界面(CLI)
图形用户界面——
- Karmasphere发布的一个商业产品(http://)
- Cloudera提供的开源的Hue项目(https:/lgithub.com/cloudera/hue)
- Qubole提供的"Hive即服务”方式(http://qubole.com)等。
引用图片:


通常要处理的数据文件是存储在HDFS中的,而HDFS是由NameNode进行管理的。
Hive所需要的组件中只有一个外部组件是Hadoop没有的,那就是metastore(元数据存储)组件。Metastore(元数据存储)是一个独立的关系型数据库(通常是一个MySQL实例),Hive会在其中保存表模式和其他系统元数据。用户在执行如create table x.或者alter table y…等命令时会指定这些信息。因为多用户和系统可能需要并发访问元数据存储,所以默认的内置数据库并不适用于生产环境。
所有的Hive客户端都需要一个metastoreservice(元数据服务),Hive使用这个服务来存储表模式信息和其他元数据信息。通常情况下会使用一个关系型数据库MySQL中的表来存储这些信息。
默认情况下,Hive会使用内置的Derby SQL服务器,其可以提供有限的、单进程的存储服务。例如,当使用Derby时,用户不可以执行2个并发的Hive CLI实例,然而,如果是在个人计算机上或者某些开发任务上使用的话这样也是没问题的。对于集群来说,需要使用MySQL或者类似的关系型数据库。
Thrift Server 服务提供了可远程访问其他进程的功能,也提供使用JDBC和ODBC访问Hive的功能。这些都是基于Thrift服务实现的。
3 Pig
Hive的替代工具中最有名的就是Pig了
Pig是由Yahoo!开发完成的,而同时期Fackbook正在开发Hive,Pig现在同样也是一个和Hadoop紧密联系的顶级Apache项目。
Pig被描述成一种数据流语言,而不是一种查询语言。在Pig中,用户需要写一系列的声明语句来定义某些关系和其他一些关系之间的联系,这里每个新的关系都会执行新的数据转换过程。Pig会查找这些声明,然后创建一系列有次序的MapReduce任务(job),来对这些数据进行转换,直到产生符合用户预期的计算方式所得到的最终结果。
Pig常用于ETL(数据抽取,数据转换和数据装载)过程的一部分,也就是将外部数据装载到Hadoop集群中,然后转换成所期望的数据格式。

Hadoop团队通常会将Hive和Pig结合使用,对于特定的工作选择合适的工具。
4 HBase
HBase是一个分布式的、可伸缩的数据存储,其支持行级别的数据更新、快速查询和行级事务(但不支持多行事务)
参考引用:https://zhuanlan.zhihu.com/p/297769662

Hive依赖于Hadoop,而Hadoop依赖于Java.
5 其他

Hive命令
查看hive命令的一个简明说明的选项列表
bin/hive --helphive服务


















