热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hive架构原理和性能优化

一. Hive介绍hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制

一. Hive介绍
hive是基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表,并提供SQL查询功能,能将SQL语句转变成MapReduce任务来执行。

为什么要使用Hive?

  • MapReduce实现复杂查询逻辑开发难度太大,避免了去写MapReduce,减少开发人员的学习成本。

  • 操作接口采用类SQL语法,提供快速开发的能力。

  • Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

提供统一的元数据管理。

  • Hive很容易扩展本身的存储能力和计算能力(数仓),最适合应用在基于大量不可变数据的批处理作业。

Hive的缺点:

  1. Hive的HQL表达能力有限,如迭代式算法无法表达。

  2. Hive自动生成的MapReduce作业,粒度较粗,运行效率不算高。

二. Hive架构及原理

1. 用户接口:Client

CLI(command-line interface)、JDBC/ODBC(jdbc访问hive)、WEBUI(浏览器访问hive)

2. 元数据:Metastore

元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等;一般结合MySQL数据库来存储Metastore

3. Hadoop

使用HDFS进行存储,使用MapReduce进行计算。

4. 驱动器:Driver

  • 解析器(SQL Parser):

    将SQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法分析,比如表是否存在、字段是否存在、SQL语义是否有误。

  • 编译器(Physical Plan):

    将AST编译生成逻辑执行计划。

  • 优化器(Query Optimizer):

    对逻辑执行计划进行优化。

  • 执行器(Execution):

    把逻辑执行计划转换成可以运行的物理计划。对于Hive来说,就是MR/Spark。

三. DDL、DML操作
1. DDL 操作


CREATE DATABASE/SCHEMA, TABLE, VIEW, FUNCTION, INDEXDROP DATABASE/SCHEMA, TABLE, VIEW, INDEXTRUNCATE TABLEALTER DATABASE/SCHEMA, TABLE, VIEWMSCK REPAIR TABLE (or ALTER TABLE RECOVER PARTITIONS)SHOW DATABASES/SCHEMAS, TABLES, TBLPROPERTIES, VIEWS, PARTITIONS, FUNCTIONS, INDEX[ES], COLUMNS, CREATE TABLEDESCRIBE DATABASE/SCHEMA, table_name, view_name, materialized_view_name

创建数据库:

create database if not exists hive; show databases;

创建学生表:

create table student(Sno int,Sname string,Sex string,Sage int,Sdept string)row format delimited fields terminated by ','stored as textfile;

创建课程表

create table course(Cno int,Cname string) row format delimited fields terminated by ',' stored as textfile;

创建分数表

create table sc(Sno int,Cno int,Grade int)row format delimited fields terminated by ',' stored as textfile;

插入数据到表

insert into  student values(95001,'李勇','男',20,'CS');

或者批量插入数据到学生,课程,分数表

load data local inpath '/home/gpadmin/hivedata/students.txt' overwrite into table student;

2. DML操作

查询学生的总人数

select count(distinct Sno)count from student;

查询各科成绩平均分

select Cno,avg(Grade) from sc group by Cno;

查询选修了3门以上的课程的学生学号

select Sno from (select Sno,count(Cno) CountCno from sc group by Sno)a where a.CountCno>3;

查询选修了课程的学生姓名(inner join)

select distinct Sname from student inner join sc on student.Sno=Sc.Sno;

hive命令执行:

hive -e "select * from hive.student;"

delete update语法

表本身能支持ACID

3. 可视化客户端工具

DBeave

四. Hive性能优化
1. join优化

小表驱动大表,Join操作的Reduce阶段,位于Join操作符左边的表的内容会被加载进内存,将条目少的表放在左边,可以有效减少发生内存溢出错误的几率。

2. 数据倾斜

(1)key分布不均匀

(2)业务数据本身的特性

(3)建表时考虑不周

(4)某些SQL语句本身就有数据倾斜

参数优化:hive.map.aggr=true 聚合操作放在Map阶段执行,从而减轻清洗阶段数据传输和Reduce阶段的执行时间,提升总体性能、join倾斜设置hive.optimize.skewjoin=true、group by倾斜设置hive.groupby.skewindata=true等

3. 合并小文件

小文件过多,会给 HDFS 带来压力,影响处理效率,可以通过合并 Map 和 Reduce 的结果文件来消除这样的影响(修改hive hive-site.xml配置文件):

hive.merge.mapfiles = true是否合并 Map 输出文件,默认为 True

hive.merge.mapredfiles = false是否合并 Reduce 输出文件,默认为 False

hive.merge.size.per.task = 256*1000*1000合并文件的大小

4. 排序优化

Order by  对查询结果进行全局排序,消耗时间长

Sort by 实现部分有序,单个reduce输出的结果是有序的,效率高

参数设置:
hive-site.xm永久生效/hive --hiveconf 单次生效/cli set 会话有效。

END


更多精彩干货分享

点击下方名片关注

IT那活儿



推荐阅读
  • Hadoop——Hive简介和环境配置
    一、Hive的简介和配置1.简介Hive是构建在Hadoop之上的数据操作平台lHive是一个SQL解析引擎,它将SQL转译成MapReduce作业,并 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • Tomcat/Jetty为何选择扩展线程池而不是使用JDK原生线程池?
    本文探讨了Tomcat和Jetty选择扩展线程池而不是使用JDK原生线程池的原因。通过比较IO密集型任务和CPU密集型任务的特点,解释了为何Tomcat和Jetty需要扩展线程池来提高并发度和任务处理速度。同时,介绍了JDK原生线程池的工作流程。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • MySQL笔记_MySQL笔记1|数据库17问17答
    本文由编程笔记#小编为大家整理,主要介绍了MySQL笔记1|数据库17问17答相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 伸缩性|发生_分布式文件系统设计,该从哪些方面考虑?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了分布式文件系统设计,该从哪些方面考虑?相关的知识,希望对你有一定的参考价值。点击上方关注“ ... [详细]
  • 我们在之前的文章中已经初步介绍了Cloudera。hadoop基础----hadoop实战(零)-----hadoop的平台版本选择从版本选择这篇文章中我们了解到除了hadoop官方版本外很多 ... [详细]
  • mysql主机地址是什么????下面的该怎么添??mysql主机地址是什么????下面的该怎么添??答:SQLyogEnterprise中,mysql的主机地址如果你是本机,就填写 ... [详细]
  • 语法:CREATE[索引类型]INDEX索引名称ON表名(列名)WITHFILLFACTOR填充因子值0~100GOUSE库名GOIFEXISTS(SELECT*FR ... [详细]
  • 基于HDFS和JavaWeb的简易网盘环境搭建注意事项详解
    文章目录登录页面安装mysql数据库安装workbench关于tomcat新建动态web项目登录页面前端的界面代码我就不贴出来了,网上很多,不会写的网 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
author-avatar
喵喵的诱惑_204
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有