Hadoop学习系列笔记(六):关于Hive

Hive是构建在Hadoop上的数据仓库框架。Hive设计的目的是让精通SQL技能(但Java编程技能相对较弱)的分析师能够对Facebook存放在HDFS中的大规模数据集执行查询,是一个通用的、可伸缩的数据处理平台。

Hive一般在工作站上运行,它把SQL查询转换为一系列在Hadoop集群上运行的MapReduce作业Hive把数据组织为,元数据(如表模式)存储在metastore数据库中。

HiveQLHive查询语言,基于SQL语言,是SQL的一种“方言”,命令必须一分号结束。和SQL一样,HiveQL对大小写不敏感。

如:

 

第一行和SQL一样,声明一张表,包含三列,必须指明每一列的数据类型。ROW FORMAT子句是HiveQL所特有的。这个子句声明数据文件的每一行是由制表符分割文本。

 

配置Hive

Hadoop类似,Hive使用XML配置文件进行设置。

 

Hive服务:

常用的Hive服务:clihiveserverhwijarmetastore

 

Hive的体系结构如下图所示。

 

metastoreHive元数据的集中存放地。metastore包括两个部分:服务后台数据的存

SQLHiveQL概要比较:

 

 

表:

Hive在逻辑上由存储的数据描述表中数据形式的相关元数据组成。数据一般存放在HDFS中,但也可以存放在其他任何Hadoop文件系统中,包括本地文件系统或S3Hive元数据存放在关系数据库中,而不是放在HDFS中。

分区和桶:

Hive把表组织成分区”。这是一种根据“分区列的值对表进行粗略划分的机制,使用分区可以加快数据分配的查询速度。表或分区可以进一步分为“桶”。

一个表可以以多个维度来进行分区。

把表(或分区)组织的两个理由:一是获得更高的查询处理效率。桶为表加上了额外的结构Hive在处理有些查询时能够利用这个结构,具体而言,连接两个在相同列上划分了桶的表,可以使map端连接高效地实现。二是使“取样”更为高效。在处理大规模数据集时,在开发和修改查询阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

存储格式:

Hive从两个维度对表的存储进行管理:“行格式”和“文件格式”。行格式指一行中的字段如何存储。文件格式指一行中字段容器的格式,最简单的格式是纯文本文件,也可使用面向行和面向列的二进制格式。

 

查询数据:

排序和聚集:

Hive可以使用标准ORDER BY子句对数据进行排序,但有一个潜在的不利因素。ORDER BY能够预期产生完全排序的结果,但它是通过只用一个reducer来做到这一点的。所以对于大规模的数据集,它的效率非常低。很多情况下并不需要结果是全局排序的,此时可以换用Hive非标准扩展SORT BYSORT BY每个reducer产生一个排序文件

连接:

(内连接)和直接使用MapReduce相比,使用Hive的一个好处在于Hive简化了常用操作。对比在MapReduce中实现“连接”要做的事情,Hive中进行连接操作能充分体现这个好处。Hive只支持等值连接,只允许在FROM子句中出现一个表。

(外连接)LEFT OUTER JOINRIGHT OUTER JOINFULL OUTER JOIN

(半连接)LEFT SEMI JOIN

子查询:

Hive对子查询的支持很有限,它只允许子查询出现在SELECT语句的FROM子句中。

视图:

视图是一种用SELECT语句定义的“虚表”。视图以一种不同于磁盘实际存储的形式把数据呈现给用户。Hive中,创建视图时并不把视图“物化存储到磁盘上。相反,视图的SELECT语句只是在执行引用视图的语句时才执行。创建视图时并不执行查询,查询只是存储在metastore中。Hive中的视图时只读的,无法通过视图为基表加载或插入数据。

 

用户定义函数:

有时所要查询无法使用Hive提供的内置函数来表示,通过写“用户定义函数”(user-defined functionUDFHive可以方便地插入用户写的处理代码并在查询中调用它们。UDF必须用Java语言编写Hive本身也是用Java写的。

Hive中有三种UDF普通UDF、用户定义聚集函数UDAF)、用户定义表生成函数UDTF)。它们所接受的输入产生的输出数据行数量是不同的。

->普通UDF操作作用于单个数据行,且产生一个数据行作为输出。

->UDAF接受多个输入数据行,并产生一个输出数据行。如COUNTMAX这样的函数都是聚集函数。

->UDTF操作作用于单个数据行,且产生多个数据行——一个表作为输出。

编写UDF

一个UDF必须满足以下两个条件

->:一个UDF必须是org.apache.hadoop.hive.ql.exec.UDF的子类

->:一个UDF必须至少实现了evaluate()方法

为了在Hive中使用UDF,需要把编译后Java打包(package)成一个JAR文件,并Hive中注册这个文件。

编写UDAF

聚集函数比普通UDF难写。因为值是在块内进行聚集的(这些块可能分布在很多mapreduce任务中),从而实现时要能够把部分的聚集值组合成最终结果。

UDFA必须是org.apache.hadoop.hive.ql.exec.UDAF的子类,且包含一个或多个嵌套的、实现了org.apache.hadoop.hive.ql.exec.UDAFEvaluator

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 内容概要 《计算机试卷1》是一份综合性的计算机基础和应用测试卷,涵盖了计算机硬件、软件、操作系统、网络、多媒体技术等多个领域的知识点。试卷包括单选题和操作应用两大类,单选题部分测试学生对计算机基础知识的掌握,操作应用部分则评估学生对计算机应用软件的实际操作能力。 ### 适用人群 本试卷适用于: - 计算机专业或信息技术相关专业的学生,用于课程学习或考试复习。 - 准备计算机等级考试或职业资格认证的人士,作为实战演练材料。 - 对计算机操作有兴趣的自学者,用于提升个人计算机应用技能。 - 计算机基础教育工作者,作为教学资源或出题参考。 ### 使用场景及目标 1. **学习评估**:作为学校或教育机构对学生计算机基础知识和应用技能的评估工具。 2. **自学测试**:供个人自学者检验自己对计算机知识的掌握程度和操作熟练度。 3. **职业发展**:帮助职场人士通过实际操作练习,提升计算机应用能力,增强工作竞争力。 4. **教学资源**:教师可以用于课堂教学,作为教学内容的补充或学生的课后练习。 5. **竞赛准备**:适合准备计算机相关竞赛的学生,作为强化训练和技能检测的材料。 试卷的目标是通过系统性的题目设计,帮助学生全面复习和巩固计算机基础知识,同时通过实际操作题目,提高学生解决实际问题的能力。通过本试卷的学习与练习,学生将能够更加深入地理解计算机的工作原理,掌握常用软件的使用方法,为未来的学术或职业生涯打下坚实的基础。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值