hive基础讲解及进阶

前言:数据时代,大数据可能会成为每个rd的基本功,甚至ai也会是基本功。hive的使用作为入门大数据乃至ai第一步还是不错的。hive涉及内容较多,不能保证大家一听就会,就全面掌握,但尽量做到大家听了后会对一些概念有一定了解,或者说当某种情境下用到hive的某个方面的时候,你知道有这么个相关概念或知识点或需要注意的地方。

一、绕不开的hadoop简介

狭义上说,Hadoop指是一个开发和运行处理大规模数据的软件平台,它的核心组件有:

HDFS(分布式文件系统):解决海量数据存储

YARN(作业调度和集群资源管理的框架):解决资源任务调度

MAPREDUCE(分布式运算编程框架):解决海量数据计算

广义上来说,Hadoop通常是指一个更广泛的概念——Hadoop生态圈。

 

例如:

HBASE:基于HADOOP的分布式海量数据库

ZOOKEEPER:分布式协调服务基础组件,负载均衡,ha(高可用,选举机制)

Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库

OOZIE:工作流调度框架

Sqoop:数据导入导出工具(比如用于mysql和HDFS之间)

FLUME:日志数据采集框架

IMPALA:基于hive的实时sql查询分析

druid:大数据量olap神器,时序性数据库,预聚合,空间换时间, 用到hdfs等

kylin:大数据量olap神器,时序性数据库,预聚合,用到hdfs、hbase等

 

二、hive简介

       Hive是一个数据仓库基础工具,在Hadoop中用来处理结构化数据。它架构在Hadoop之上,总归为大数据,并使得查询和分析方便,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

       Hive 构建在基于静态批处理的Hadoop 之上,Hadoop 通常都有较高的延迟并且在作业提交和调度的时候需要大量的开销。因此,Hive 并不能够在大规模数据集上实现低延迟快速的查询,例如,Hive 在几百MB 的数据集上执行查询一般有分钟级的时间延迟。因此,Hive 并不适合那些需要低延迟的应用,例如,联机事务处理(OLTP)。Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为MapReduce 作业提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业,例如,网络日志分析。

 

hive与hdfs的关系:

hive是将hdfs上的文件映射成table,同时支持用户运用类sql即hql对hdfs文件进行操作。

类似我们在服务器上对日志文件进行处理,我们会写一个shell,对日志进行分列并赋给变量,然后对某一列数据进行累加、去重等处理。

在这里日志文件就类似于hdfs系统,hdfs是有实际存储真实待查询数据能力的,而shell中对日志进行分列并赋给变量的过程类似于hive建表的过程,最后对某一列数据进行累加、去重等处理则类似于用hivesql对hive表的操作。

hdfs的主要结构:

NameNode负责管理整个文件系统的元数据,使用 Master-Slave 模式(zk ha的使用按理之一),防止 NameNode 成为单点故障。

DataNode 负责管理用户的文件数据块,听从NameNode指挥。

 

hive表相关概念介绍:

1、hive表的存储格式 

  • textFile textFile为默认格式,存储方式:行存储    

    缺点:磁盘开销大;数据解析开销大;压缩的text文件,hive无法进行合并和拆分

  • sequencefile 二进制文件,以<key,value>的形式序列化到文件中,存储方式:行存储

    优点:可分割、压缩,一般选择block压缩,与hadoop api中的mapfile是互相兼容的。

  • Rcfile 存储方式:数据按行分块 每块按照列存储,压缩快 快速列存取,读记录尽量涉及到的block最少,读取需要的列只需要读取每个row group 的头部定义。

    读取全量数据的操作 性能可能比sequencefile没有明显的优势

  • ORC

    存储方式:数据按行分块 每块按照列存储,压缩快 快速列存取

    效率比rcfile高,是rcfile的改良版本

    官网介绍:

1

The Optimized Row Columnar (ORC) file format provides a highly efficient way to store Hive data. It was designed to overcome limitations of the other Hive file formats. Using ORC files improves performance when Hive is reading, writing, and processing data.

    ORC实际上是在RC文件存储格式做了一些优化,它的主要优点有:
      (1)、每个task只输出单个文件,这样可以减少NameNode的负载;
      (2)、支持各种复杂的数据类型,比如: datetime, decimal, 以及一些复杂类型(struct, list, map, and union);
      (3)、在文件中存储了一些轻量级的索引数据;
      (4)、基于数据类型的块模式压缩:a、integer类型的列用行程长度编码(run-length encoding);b、String类型的列用字典编码(dictionary encoding);
      (5)、用多个互相独立的RecordReaders并行读相同的文件;
      (6)、无需扫描markers就可以分割文件;
      (7)、绑定读写所需要的内存;
      (8)、metadata的存储是用 Protocol Buffers的,所以它支持添加和删除一些列。

  • 自定义格式

    用户可以通过实现inoutformat和outputformat来定义输入输出格式。

2、分区hive表与非分区hive表(扩展说明:分桶表)

分区数据通常用于水平分布负载,这具有性能优势,并有助于以逻辑方式组织数据。分区表可以有多个分区字段,常用的依据时间、产品线进行联合分区。

非分区表一般用作存储一些静态数据。

分桶表 依据有真实含义的列进行hash取模分桶,Hive 在处理有些查询时能利用这个结构,例如join。

3、外表与内表

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table);内部表数据由Hive自身管理,外部表数据由HDFS管理;删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

三、hivesql(HQL)如何工作

需要对Hive的架构有些了解,

 

图片.png

 

#上图描述了Hive和Hadoop之间的工作流程,下面是Hive和Hadoop框架的交互方式:

 

Hive和Hadoop框架的交互方式:

 

  1. Execute Query。Hive接口,如命令行或Web UI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。

  2. Get Plan。在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。

  3. Get Metadata。编译器发送元数据请求到Metastore(支持MySQL,Postgres,Oracle,MS SQL Server这四种数据库,市面通用mysql)。

  4. Send Metadata。Metastore发送元数据,以编译器的响应。

  5. Send Plan。编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。

  6. Execute Plan。驱动程序发送的执行计划到执行引擎。

  7. Execute Job。在内部,执行作业的过程是一个MapReduce工作。执行引擎发送作业给JobTracker,在名称节点并把它分配作业到TaskTracker,这是在数据节点。在这里,查询执行MapReduce工作。(7.1 Metadata Ops:与此同时,在执行时,执行引擎可以通过Metastore执行元数据操作。)

  8. Fetch Result. 执行引擎接收来自数据节点的结果。

  9. Send Results. 执行引擎发送这些结果值给驱动程序。

  10. Send Results。驱动程序将结果发送给Hive接口。

MapReduce简介:

 

stage划分:

在生成map-reduce任务时,Hive深度优先方式遍历Operator tree(操作符树),遇到第一个reduceSink操作符时,该操作符之前的操作符便划分到一个map-reduce任务的Map任务中,然后该reduceSink到下一个
reduceSink操作符之间的部分划分为map-reduce任务的Reduce任务。

一个完整的MapReduce阶段代表一个stage。当然Hive中还有非MapReduce的stage(例如:explain select * from t limit 1),在MapReduce为计算框架时,基本以MapReduce的stage为主,我们这里也只谈论这一stage。

由于Hive使用MapReduce计算引擎时无法直接使用不同阶段的结果。因此,每个阶段完成之后的结果都要输出到临时目录,供下一阶段读取,因此便将整个操作符图分解成不同的stage。

https://www.cnblogs.com/NightPxy/p/9230253.html(几种explain)

四、数梦的使用

bigdata和数梦定位的不同: bigdata滴滴数据平台,数梦属于开发加工平台

任务类型:手动任务、周期任务

任务流程:创建-保存-发布-执行

报警机制:配置报警规则及接警人。

tag(特殊情况:sparkjar、多表写入、多任务写一个表)、success与上下游依赖关系。

同步中心同步任务-多种途径2hive

 

五、hive增删改查及常用函数与udf

https://blog.csdn.net/wxfghy/article/details/80677785

六、HQL注意事项

1、小文件灾难

文件数是一个重要指标,文件数与namenode资源损耗正相关,同时与下游执行任务的执行快慢相关。不合理的reduce数目会造成小文件灾难。

2、数据倾斜

表现:
任务进度长时间维持在99%(或100%),查看任务监控页面,发现只有少量(1个或几个)reduce子任务未完成。因为其处理的数据量和其他reduce差异过大。单一reduce的记录数与平均记录数差异过大,通常可能达到3倍甚至更多。 最长时长远大于平均时长。

原因:key分布不均匀

          业务数据本身的特性

          建表时考虑不周

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

解决办法:

参数调整 map阶段进行简单聚合 set hive.map.aggr=true 

不均匀key值处理(key值加上前后缀)

3、mapreduce数量管理与执行时长的关系

大型任务调优过程,看当前任务explain,并观察每一个stage中mr分别的数量及耗时情况,判断是否出现1、2中的情况,出现需要解决。再写出可替换sql,执行以上步骤。对比各自耗时情况,选择最优sql。

4、常用参数配置及调整优化。

https://blog.csdn.net/tyhawk/article/details/88863754

七、扩展项

数梦代理 :如何配置大数据集群代理?

基于presto对hive表进行快速查询。02 Presto用户手册 

./presto --server 10.82.128.62:8080  --catalog hive  --user=prod_supervision  --password=???

Presto 基于内存的并行计算,Facebook推出的分布式SQL交互式查询引擎 多个节点管道式执行 
支持任意数据源 数据规模GB~PB 是一种Massively parallel processing(mpp)(大规模并行处理)模型 
数据规模PB 不是把PB数据放到内存,只是在计算中拿出一部分放在内存、计算、抛出、再拿 。

spark与hive的关系。 spark进行更多借助于内存对hive进行读取计算。

存储量 传统与ec https://blog.csdn.net/weixin_42486226/article/details/99581136

hive未来 作为存储组件拥有不会动摇的地位,作为查询工具来说,已经在慢慢被替代。spark、presto都是由于人类受不了hivesql(mapreduce)的执行效率而被发明出来的,实质是更多地依赖内存和一些技巧。

八、答疑

OLTP:on-linetransactionprocessing 对数据的增删改查等操作,主要用于传统的关系数据库。

OLAP:On-LineAnalyticalProcessing 数据按不同维度的聚合,维度的下钻,上卷等,主要用于数据仓库。

以上内容存在引用,如有侵权请联系本人。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用网络文章开启本课程的开篇: 在大数据分析领域中,传统的大数据分析需要不同框架和技术组合才能达到最终的效果,在人力成本,技术能力和硬件成本上以及维护成本让大数据分析变得成为昂贵的事情。让很多中小型企业非常苦恼,不得不被迫租赁第三方大型公司的数据分析服务。  ClickHouse开源的出现让许多想做大数据并且想做大数据分析的很多公司和企业耳目一新。ClickHouse 正是以不依赖Hadoop 生态、安装和维护简单、查询速度快、可以支持SQL等特点在大数据分析领域越走越远。  本课程采用全新的大数据技术栈:Flink+ClickHouse,让你体验到全新技术栈的强大,感受时代变化的气息,通过学习完本课程可以节省你摸索的时间,节省企业成本,提高企业开发效率。本课程不仅告诉你如何做项目,还会告诉你如何验证系统如何支撑亿级并发,如何部署项目等等。希望本课程对一些企业开发人员和对新技术栈有兴趣的伙伴有所帮助,如对我录制的教程内容有建议请及时交流。 课程概述:在这个数据爆发的时代,像大型电商的数据量达到百亿级别,我们往往无法对海量的明细数据做进一步层次的预聚合,大量的业务数据都是好几亿数据关联,并且我们需要聚合结果能在秒级返回。  那么我们该如何实现这一需求呢?基于Flink+ClickHouse构建电商亿级实时数据分析平台课程,将带领大家一步一步从无到有实现一个高性能的实时数据分析平台,该系统以热门的互联网电商实际业务应用场景为案例讲解,对电商数据的常见实战指标以及难点实战指标进行了详尽讲解,具体指标包括:概况统计、全站流量分析、渠道分析、广告分析、订单分析、运营分析(团购、秒杀、指定活动)等,该系统指标分为分钟级和小时级多时间方位分析,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。 本课程凝聚讲师多年一线大数据企业实际项目经验,大数据企业在职架构师亲自授课,全程实操代码,带你体验真实的大数据开发过程,代码现场调试。通过本课程的学习再加上老师的答疑,你完全可以将本案例直接应用于企业。 本套课程可以满足世面上绝大多数大数据企业级的海量数据实时分析需求,全部代码在老师的指导下可以直接部署企业,支撑千亿级并发数据分析。项目代码也是具有极高的商业价值的,大家可以根据自己的业务进行修改,便可以使用。  本课程包含的技术: 开发工具为:IDEA、WebStorm Flink1.9.0 ClickHouseHadoop2.6.0 Hbase1.0.0 Kafka2.1.0 Hive1.0.0 Jmeter(验证如何支撑亿级并发)Docker (虚拟化部署)HDFS、MapReduce Zookeeper SpringBoot2.0.2.RELEASE SpringCloud Finchley.RELEASE Binlog、Canal MySQL Vue.js、Nodejs Highcharts Linux Shell编程  课程亮点: 1.与企业对接、真实工业界产品 2.ClickHouse高性能列式存储数据库 3.大数据热门技术Flink新版本 4.Flink join 实战 5.Flink 自定义输出路径实战 6.全链路性能压力测试 7.虚拟化部署 8.集成指标明细查询 9.主流微服务后端系统 10.分钟级别与小时级别多时间方位分析 11.数据库实时同步解决方案 12.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS 13.集成SpringCloud实现统一整合方案 14.互联网大数据企业热门技术栈 15.支持海量数据的实时分析 16.支持全端实时数据分析 17.全程代码实操,提供全部代码和资料 18.提供答疑和提供企业技术方案咨询 企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值