hadoop-hive
官方:Apache Hive™数据仓库软件有助于使用SQL读取,编写和管理驻留在分布式存储中的大型数据集。可以将结构投影到已存储的数据中。提供了命令行工具和JDBC驱动程序以将用户连接到Hive。
https://hive.apache.org/
适用:离线计算。用sql生成task调用map_Reduce。
- UI
- driver
会话和JDBC/ODBC接口 - metadata
Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。元数据提供数据的抽象和发现能力,存于database还是文件,考虑到要随机更新、可查询,因此用database。表和元数据用来生成task - complier
解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。 - 执行引擎
执行编译器创建的执行计划的组件。该计划是一个阶段的DAG。执行引擎管理计划的这些不同阶段之间的依赖关系,并在适当的系统组件上执行这些阶段 - 数据存储/计算
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含的查询,比如select from tbl不会生成MapRedcue任务)。
将大多数查询转换为mr组合的计算(select *等不需要)转化过程比较复杂:
https://blog.csdn.net/u010738...
HDFS的存储:表=》分区=》桶
1)、表:Hive中的表和关系型数据库中的表在概念上很类似,每个表在HDFS中都有相应的目录用来存储表的数据,这个目录可以通过${HIVE_HOME}/conf/hive-site.xml配置文件中,如果我有一个表wyp,那么在HDFS中会创建/user/hive/warehouse/wyp 目录(这里假定hive.metastore.warehouse.dir配置为/user/hive/warehouse);wyp表所有的数据都存放在这个目录中。
2)、外部表:Hive中的外部表和表很类似,但是其数据不是放在自己表所属的目录中,而是存放到别处,这样的好处是如果你要删除这个外部表,该外部表所指向的数据是不会被删除的,它只会删除外部表对应的元数据;而如果你要删除表,该表对应的所有数据包括元数据都会被删除。
3)、分区:在Hive中,表的每一个分区对应表下的相应目录,所有分区的数据都是存储在对应的目录中。比如wyp 表有dt和city两个分区,则对应dt=20131218,city=BJ对应表的目录为/user/hive/warehouse /dt=20131218/city=BJ,所有属于这个分区的数据都存放在这个目录中。
4)、桶:对指定的列计算其hash,根据hash值切分数据,目的是为了并行,每一个桶对应一个文件(注意和分区的区别)。比如将wyp表id列分散至16个桶中,首先对id列的值计算hash,对应hash值为0和16的数据存储的HDFS目录为:/user /hive/warehouse/wyp/part-00000;而hash值为2的数据存储的HDFS 目录为:/user/hive/warehouse/wyp/part-00002。
表文件格式支持:text/avro/jsonfile/ORC等
数据行支持:serde/json/csv - 执行流程
UI调用驱动程序的执行接口(图1中的步骤1)。
驱动程序为查询创建会话句柄,并将查询发送到编译器以生成执行计划(步骤2)。
编译器从Metastore获取必要的元数据(步骤3和4)。此元数据用于检查查询树中的表达式以及基于查询谓词修剪分区。由编译器生成的计划(步骤5)是阶段的DAG,其中每个阶段是m/p作业,元数据操作或对HDFS的操作。
执行引擎将这些阶段提交给适当的组件(步骤6,6.1,6.2和6.3)。在每个任务(m/p)中,与表或中间输出相关联的反序列化器用于从HDFS文件中读取行,这些行通过关联的运算符树传递。生成输出后,它将通过序列化程序写入临时HDFS文件(如果操作不需要减少,则会在映射器中发生)。临时文件用于向计划的m/p提供数据。对于DML操作,最终临时文件将移动到表。此方案用于确保不读取脏数据(文件重命名是HDFS中的原子操作)
https://cwiki.apache.org/conf...
- 高可用
hive提供了跨集群(跨hadoop,一般部署需要hadoop,mysql,hive,hadoop对其中文件其实有3份备份的,为了跨hadoop高可用)基于HCatalog的发布订阅(JMS)和EXPORT和IMPORT命令 - 事务
锁+快照
锁:DbLockManager 在hive的metastore 中管理所有的锁和事务。(锁和事务的信息是持久化存储的,即便server挂掉也不会有影响)这也意味着,一旦开启式了事务,之前在zookeeper中的锁行为也不在支持。为了防止客户端因为挂掉而导致事务和锁无法释放,在锁的持有者和事务的初始化器到server的metastore 间会维持一个周期性的心跳。一旦心跳超时,锁和事务就会被释放。
需要明确事务表
只支持快照隔离级别。当一个给定的查询启动时,它会提供该数据的一致快照。
必须分桶
支持了单key的update/delete。新的记录和更新,删除都存在delta files。一次事务操作创建一系列的delta files。在读取的时候,将基础文件和修改,删除合并,最后返回给查询。涉及到delta的合并和删除,Minor compaction :将已有的delta files重写到一个单独的delta file,每个分桶一个。Major compaction: 将delta文件和base 重写到一个新的base file,每个分桶一个。
相关推荐
tugangkai 2020-07-04
zzjmay 2020-05-17
eternityzzy 2020-07-19
archive 2020-05-28
tugangkai 2020-05-09
archive 2020-07-30
成长之路 2020-07-28
taisenki 2020-07-05
tugangkai 2020-07-05
SignalDu 2020-07-05
zlsdmx 2020-07-05
tomson 2020-07-05
tomson 2020-07-05
Zhangdragonfly 2020-06-28
genshengxiao 2020-06-26
成长之路 2020-06-26