Hive技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

讨论问题
分区中的数据怎么知道它对应的reduce是哪个呢?
其实map任务一直和其父TaskTracker保持联系,而TaskTracker又一直和 JobTracker保持心跳。所以JobTracker中保存了整个集群中的宏观信息。只要 reduce任务向JobTracker获取对应的map输出位置。 那到底什么是Shuffle呢? Shuffle的中文意思是“洗牌”,如果我们这样看:一个map产生的数据, 结果通过hash过程分区却分配给了不同的reduce任务,是不是一个对数据洗 牌的过程呢?
可扩展接口部分
6
服务端组件
Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL (类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系 数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持 把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服 务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。 Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开 发,hive集成了该服务,能让不同的编程语言调用hive的接口。
SQL查询(SQL92标准)?
18
1) 支持更多的数据类型(DATE, TIME, TIMESTAMP, INTERVAL, BIT string,variable-length character and bit strings, and NATIONAL CHARACTERstrings) 2)除了表示SQL语言本身以外,还支持字符集和更多的排序规则 3) 支持更多的标量操作,如连接字符串和取子字符串的字符串操作,日期和时间操作,条件表达式 4)在标量值查询表达式和表值查询表达式的使用上,增强了通用性和正交性 5)更多的set操作符(例如,union join, natural join, set difference, and setintersection) 6)能够在方案中定义域 7)支持对方案的操作(特别是DROP和ALTER语句) 8)支持在Ada、C、MUMPS语言中嵌入SQL语句(模块和嵌入式语法) 9) 更多的权限能力 10)更多的引用完整性的能力,包括引用的动作,检查约束中的子查询,单独的断言用户控制约束的推迟 11)信息方案的定义 12)支持SQL语言的动态执行 13)支持某些设施所需的远程数据库访问(尤其是连接的管理语句和合格的方案名称) 14)支持临时表 15)支持各级事务的一致性 16)支持数据类型转换(各种数据类型使用CAST表达式) 17)支持滚动游标 18) 19具有标记的能力,以辅助应用程序的可移植性
Reduce端
1.Reduce会接收到不同map任务传来的数据,并且每个map传来的数据都是有序的。如果reduce端接受的数据 量相当小,则直接存储在内存中(缓冲区大小由mapred.job.shuffle.input.buffer.percent属性控制,表示用作此用 途的堆空间的百分比),如果数据量超过了该缓冲区大小的一定比例(由mapred.job.shuffle.merge.percent决 定),则对数据合并后溢写到磁盘中。
value 1 1
Biblioteka Baidu
pagei d
age
key <1,32> <2,25>
value 1 1
key 2
value count 25 2
1
2
32
25
15
Map端
1.每个输入分片会让一个map任务来处理,默认情况下,以HDFS的一个块的大小(默认 为64M)为一个分片,当然我们也可以设置块的大小。map输出的结果会暂且放在一个环 形内存缓冲区中(该缓冲区的大小默认为100M,由io.sort.mb属性控制),当该缓冲区快 要溢出时(默认为缓冲区大小的80%,由io.sort.spill.percent属性控制),会在本地文件 系统中创建一个溢出文件,将该缓冲区中的数据写入这个文件。 2.在写入磁盘之前,线程首先根据reduce任务的数目将数据划分为相同数目的分区,也就 是一个reduce任务对应一个分区的数据。这样做是为了避免有些reduce任务分配到大量 数据,而有些reduce任务却分到很少数据,甚至没有分到数据的尴尬局面。其实分区就 是对数据进行hash的过程。然后对每个分区中的数据进行排序,如果此时设置Combiner, 将排序后的结果进行Combia操作,这样做的目的是让尽可能少的数据写入到磁盘。 3.当map任务输出最后一个记录时,可能会有很多的溢出文件,这时需要将这些文件合并。 合并的过程中会不断地进行排序和combia操作,目的有两个:1.尽量减少每次写入磁盘 的数据量;2.尽量减少下一复制阶段网络传输的数据量。最后合并成了一个已分区且已排 序的文件。为了减少网络传输的数据量,这里可以将数据压缩,只要将 mapred.compress.map.out设置为true就可以了。 4.将分区中的数据拷贝给相对应的reduce任务 16
11
构建标准化的MapReduce开发过程
首先,Hive已经用类SQL的语法封装了 MapReduce过程,这个封装过程就是MapReduce的 标准化的过程。我们在做业务或者工具时,会针 对场景用逻辑封装,这是第二层封装是在Hive之 上的封装。在第二层封装时,我们要尽可能多的 屏蔽Hive的细节,让接口单一化,低少灵活性, 再次精简HQL的语法结构。只满足我们的系统要 求,专用的接口。 在使用二次封装的接口时,我们已经可以不 用知道Hive是什么, 更不用知道Hadoop是什么。 我们只需要知道,SQL查询(SQL92标准),怎么写 效率高,怎么写可以完成业务需要就可以了。
需要强调的是:map任务不是随随便便地分配给某个TaskTracker的,这里有个概念叫:数据本地化
(Data-Local)将map任务分配给含有该map处理的数据块的TaskTracker上,同时将程序JAR包复制到 该TaskTracker上来运行,这叫“运算移动,数据不移动”。而分配reduce任务时并不考虑数据本地化。 TaskTracker每隔一段时间会给JobTracker发送一个心跳,告诉JobTracker它依然在运行,同时心跳中 还携带着很多的信息,比如当前map任务完成的进度等信息。当JobTracker收到作业的最后一个任务完 成信息时,便把该作业设置成“成功”。当JobClient查询状态时,它将得知任务已完成,便显示一条消 息给用户。
8
Hive执行流程
9
目录
1 2
Hive简介 结构与功能介绍
适用场景 部署与简单操作 问题指南
2 4
11 13 22
10
3
4 5
适用场景
业务场景 非结构化数据的的离线分析统计。
场景技术特点
为超大数据集设计的计算、扩展能力。 支持SQL like 查询语言。
多表的join操作。
支持非结构化数据的查询、计算。 提供对数据存取的编程接口,支持jdbc、odbc。
7
客户端组件
CLI:command line interface,命令行接口。
Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建 立在thrift客户端之上,包括JDBC和ODBC接口。
WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应 hive的hwi组件(hive web interface),使用前要启动hwi服务。
reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。 Hive是一种以SQL风格进行任何大小数据分析的工具,其特点是采取类似关系数据库
的SQL命令。其特点是通过 SQL处理Hadoop的大数据,数据规模可以伸缩扩展到100PB+,
数据形式可以是结构或非结构数据。
3
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进
行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规 模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用
户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和
4
目录
1 2 3 4
Hive简介 结构与功能介绍 适用场景 部署与简单操作 问题指南 2 4 11 32 42
5
5
Hive的技术架构
Hive系统
元数据存储(Metastore)
驱动(Driver) 查询编译器(Query Compiler)
执行引擎 (Execution Engine)
服务器(HiveServer) 客户端组件
作业启动多少个map任务等信息。
13
JobTracker节点
JobTracker接收到作业后,将其放在一个作业队列里,等待作业调度器对其进行调度(这里是不是很 像微机中的进程调度呢,呵呵),当作业调度器根据自己的调度算法调度到该作业时,会根据输入划分 信息为每个划分创建一个map任务,并将map任务分配给TaskTracker执行。对于map和reduce任务, TaskTracker根据主机核的数量和内存的大小有固定数量的map槽和reduce槽。
Hive中MapReduce优化 1. 使用单独的数据库存储元数据
2. 定义合理的表分区和键
3. 设置合理的bucket数据量 4. 进行表压缩 5. 定义外部表使用规范 6. 合理的控制Mapper, Reducer数量
20
Hive的SQL数据类型和SQL语法
SQL数据类型: INT TINYINT/SMALLINT/BIGINT BOOLEAN FLOAT DOUBLE STRING BINARY TIMESTAMP ARRAY, MAP, STRUCT, UNION DECIMAL
Hive介绍
研发技术分享
目录
1 2 3 4
Hive简介 结构与功能介绍 适用场景 部署与简单操作 问题指南 2 4 11 32 42
2
5
Hive 简介
Hive起源于Facebook,它使得针对Hadoop进行SQL查询成为 可能,从而非程序员也可以方便地使用。Hive是基于Hadoop的 一个数据仓库工具,可以将结构化的数据文件映射为一张数据 库表,并提供完整的SQL查询功能,可以将SQL语句转换为 MapReduce任务运行。
2.随着溢写文件的增多,后台线程 会将它们合并成一个更大的有序的文 件,这样做是为了给后面的合并节省 时间。其实不管在map端还是reduce 端,MapReduce都是反复地执行排序, 合并操作。 3.合并的过程中会产生许多的中 间文件(写入磁盘了),但 MapReduce会让写入磁盘的数据尽 可能地少,并且最后一次合并的结 果并没有写入磁盘,而是直接输入 到reduce函数。 17
12
MapReduce流程分析
在客户端启动一个作业。 向JobTracker请求一个Job ID。 将运行作业所需要的资源文件复制到HDFS上,包括 MapReduce程序打包的JAR文件、配置文件和客户端计 算所得的输入划分信息。这些文件都存放在JobTracker 专门为该作业创建的文件夹中。文件夹名为该作业的Job ID。JAR文件默认会有10个副mapred.submit.replication 属性控制,输入划分信息告诉了JobTracker应该为这个
14
MR实现过程
key 1 1 reduce key <2,25> <2,25> value 1 1 valu e 25 32 count 1 1
pagei d 1 2
age 25 25 map
key <1,25> <2,25>
value 1 1 Shuffer Sort
key <1,25> <1,32>
相关文档
最新文档