回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Hive!

作者:高广超,多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。目前从事大数据相关研发与架构工作。

https://www.jianshu.com/p/e9ec6e14fe52

Hive简介


Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。

官网定义:

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL.

Hive是一种用类SQL语句来协助读写、管理那些存储在分布式存储系统上大数据集的数据仓库软件。

Hive的几个特点


  • Hive最大的特点是通过类SQL来分析大数据,而避免了写MapReduce程序来分析数据,这样使得分析数据更容易。

  • 数据是存储在HDFS上的,Hive本身并不提供数据的存储功能

  • Hive是将数据映射成数据库和一张张的表,库和表的元数据信息一般存在关系型数据库上(比如MySQL)。

  • 数据存储方面:它能够存储很大的数据集,并且对数据完整性、格式要求并不严格。

  • 数据处理方面:因为Hive语句最终会生成MapReduce任务去计算,所以不适用于实时计算的场景,它适用于离线分析。

Hive架构


image.png


Hive的底层存储


Hive的数据是存储在HDFS上的。Hive中的库和表可以看作是对HDFS上数据做的一个映射。所以Hive必须是运行在一个Hadoop集群上的。

Hive语句的执行过程


Hive中的执行器,是将最终要执行的MapReduce程序放到YARN上以一系列Job的方式去执行。

Hive的元数据存储


Hive的元数据是一般是存储在MySQL这种关系型数据库上的,Hive和MySQL之间通过MetaStore服务交互。

Hive重要概念

外部表和内部表

内部表(managed table)
  • 默认创建的是内部表(managed table),存储位置在hive.metastore.warehouse.dir设置,默认位置是/user/hive/warehouse

  • 导入数据的时候是将文件剪切(移动)到指定位置,即原有路径下文件不再存在

  • 删除表的时候,数据和元数据都将被删除

  • 默认创建的就是内部表create table xxx (xx xxx)

外部表(external table)
  • 外部表文件可以在外部系统上,只要有访问权限就可以

  • 外部表导入文件时不移动文件,仅仅是添加一个metadata

  • 删除外部表时原数据不会被删除

  • 分辨外部表内部表可以使用DESCRIBE FORMATTED table_name命令查看

  • 创建外部表命令添加一个external即可,即create external table xxx (xxx)

  • 外部表指向的数据发生变化的时候会自动更新,不用特殊处理

分区表和桶表


分区(partioned)
  • 有些时候数据是有组织的,比方按日期/类型等分类,而查询数据的时候也经常只关心部分数据,比方说我只想查2017年8月8号,此时可以创建分区,查询具体某一天的数据时,不需要扫描全部目录,所以会明显优化性能

  • 一个Hive表在HDFS上是有一个对应的目录来存储数据,普通表的数据直接存储在这个目录下,而分区表数据存储时,是再划分子目录来存储的

  • 使用partioned by (xxx)来创建表的分区

分桶(clustered)
  • 分桶是相对分区进行更细粒度的划分。分桶将整个数据内容安装某列属性值得hash值进行区分,按照取模结果对数据分桶。如取模结果相同的数据记录存放到一个文件。

  • 桶表也是一种用于优化查询而设计的表类型。创建通表时,指定桶的个数、分桶的依据字段,hive就可以自动将数据分桶存储。查询时只需要遍历一个桶里的数据,或者遍历部分桶,这样就提高了查询效率。

具体说明分桶

  • clustered by (user_id) sorted by(leads_id) into 10 buckets

    • clustered by是指根据user_id的值进行哈希后模除分桶个数,根据得到的结果,确定这行数据分入哪个桶中,这样的分法,可以确保相同user_id的数据放入同一个桶中。

    • sorted by 是指定桶中的数据以哪个字段进行排序,排序的好处是,在join操作时能获得很高的效率。

    • into 10 buckets是指定一共分10个桶。

    • 在HDFS上存储时,一个桶存入一个文件中,这样根据user_id进行查询时,可以快速确定数据存在于哪个桶中,而只遍历一个桶可以提供查询效率。

Hive文件格式

hive文件存储格式包括以下几类:

  1. TEXTFILE

  2. SEQUENCEFILE

  3. RCFILE

  4. ORCFILE(0.11以后出现)

其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中。


列式存储和行式存储

首先我们看一下一张表的存储格式

image.png

行式存储

image.png

列式存储

image.png


列式存储和行式存储的比较


行式存储

优点:

  • 相关的数据是保存在一起,比较符合面向对象的思维,因为一行数据就是一条记录

  • 这种存储格式比较方便进行INSERT/UPDATE操作

缺点:

  • 如果查询只涉及某几个列,它会把整行数据都读取出来,不能跳过不必要的列读取。当然数据比较少,一般没啥问题,如果数据量比较大就比较影响性能

  • 由于每一行中,列的数据类型不一致,导致不容易获得一个极高的压缩比,也就是空间利用率不高

  • 不是所有的列都适合作为索引


列式存储

优点:

  • 查询时,只有涉及到的列才会被查询,不会把所有列都查询出来,即可以跳过不必要的列查询

  • 高效的压缩率,不仅节省储存空间也节省计算内存和CPU

  • 任何列都可以作为索引

缺点:

  • INSERT/UPDATE很麻烦或者不方便

  • 不适合扫描小量的数据

TEXTFILE


默认格式,数据不做压缩,磁盘开销大,数据解析开销大。

可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

SEQUENCEFILE

SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。

SequenceFile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩。

RCFILE


RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。

  • RCFile保证同一的数据位于同一节点,因此元组重构代价较低(需要将分散的数据重新组织,比如一列数据散落在不同集群,查询的时候,需要将各个节点的数据重新组织;但是如果数据都在一个机器上,那就没有必要重新组织)

  • RCFile通过列进行数据压缩,因为同一列都是相同的数据类型,所以压缩比比较好

  • RCFile可以跳过不必要的列读取

从以上几点也可以看出它是兼顾了行式和列式存储的部分优点。

ORC File


ORCFile存储格式,就是Optimized RC File的缩写。意指优化的RCFile存储格式。

ORC File 和 RC File比较

  • 每一个任务只输出单个文件,这样可以减少NameNode的负载

  • 支持各种复杂的数据类型,比如datetime,decimal,以及复杂的struct,List,map等

  • 在文件中存储了轻量级的索引数据

  • 基于数据类型的块模式压缩:比如Integer类型使用RLE(RunLength Encoding)算法,而字符串使用字典编码(DictionaryEncoding)

  • 使用单独的RecordReader并行读相同的文件

  • 无需扫描标记就能分割文件

  • 绑定读写所需要的内存

  • 元数据存储使用PB,允许添加和删除字段

Hive ROW FORMAT

Serde是 Serializer/Deserializer的简写。hive使用Serde进行行对象的序列与反序列化。

你可以创建表时使用用户自定义的Serde或者native Serde,如果 ROW FORMAT没有指定或者指定了 ROW FORMAT DELIMITED就会使用native Serde。

hive已经实现了许多自定义的Serde,之前我们在介绍stored时也涉及到:

  • Avro (Hive 0.9.1 and later)

  • ORC (Hive 0.11 and later)

  • RegEx

  • Thrift

  • Parquet (Hive 0.13 and later)

  • CSV (Hive 0.14 and later)

  • JsonSerDe (Hive 0.12 and later)

Hive写入数据的方式


和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO …. VALUES形式的语句。

从本地文件系统中导入数据到Hive表


load data local inpath 'xxx.txt' into table xxx;

从HDFS上导入数据到Hive表


load data inpath '/home/xxx/add.txt' into table xxx

alter table db.access_log add partition (dt='18-09-18') location 'hdfs://ns/hive/warehouse/access_log/dt=18-09-18';

从别的表中查询出相应的数据并导入到Hive表中


insert overwrite table db.log_v2 partition(dt='18-09-26') select uid,model,key,value,time from db.log where dt='18-09-26';

在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中


create table test4 as select id, name, tel from xxx;

长按订阅更多精彩▼

Hive介绍与核心知识点--大数据技术栈12相关推荐

  1. 图解Spark原理及实践----大数据技术栈12

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Spark! 来自:ITPUB Spark 已经成为广告.报表以及推荐系统等大数据计算场景中首选系统,因效率高,易用以及通用性越来越得到 ...

  2. 大数据技术基础_【基础】大数据技术栈介绍

    大数据技术的体系庞大且复杂,基础的技术包含数据的采集.数据预处理.分布式存储.NoSQL数据库.数据仓库.机器学习.并行计算.可视化等各种技术范畴和不同的技术层面. 首先给出一个通用化的大数据处理框架 ...

  3. StoneDT开源舆情系统大数据技术栈介绍

    我们目前开源的 舆情系统 分为3个部分,整个系统使用了多种开源技术组件和开源框架,涵盖涉及技术领域广泛,例如:分布式计算.大数据.人工智能.数据中台.数据挖掘.深度学习.java和python的大量实 ...

  4. axure9数据统计插件_WMDA:大数据技术栈的综合实践

    一.概述 WMDA是58自主开发的用户行为分析产品,同时也是一款支持无埋点的数据采集产品,只需要在第一次使用的时候加载一段SDK代码,即可采集全量.实时的PC.M.APP三端以及小程序的用户行为数据. ...

  5. 昂贵、复杂、低效...中小型企业如何打破大数据技术栈困境?

    大数据已经成为当代经济增长的重要驱动力 数字经济,已经成为当今经济发展中非常重要的一部分. 与农业经济.工业经济如出一辙,数字经济活动需要土地.劳动力.资本.技术以及相应配套基础设施.不同之处在于:第 ...

  6. 2017中国大数据技术大会12月在京召开

    2017中国大数据技术大会 探索大数据与智能之美 12月7-9号 北京  新云南皇冠假日酒店 辉煌十载         十年的中国大数据盛宴,见证了大数据技术生态在中国的建立.发展和成熟.中国大数据技 ...

  7. Storm原理与实践--大数据技术栈14

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Storm! 来自:有米加瓦 一.Storm简介 1. 引例 在介绍Storm之前,我们先看一个日志统计的例子:假如我们想要根据用户的访 ...

  8. storm 机器上日志查询_Storm原理与实践大数据技术栈14

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Storm! 来自:有米加瓦 一.Storm简介 1. 引例 在介绍Storm之前,我们先看一个日志统计的例子:假如我们想要根据用户的访 ...

  9. Flink在美团的实践与应用--大数据技术栈15

    回顾:大数据平台技术栈 (ps:可点击查看),今天就来说说其中的Flink! 来自:云栖社区 本文整理自在北京举行的Flink Meetup,分享嘉宾刘迪珊(2015年加入美团数据平台.致力于打造高效 ...

最新文章

  1. mysql性能的介绍少_MySQL性能突然下降怎么回事 MySQL性能突然下降原因介绍
  2. 学习笔记:CentOS 7学习之十一:文件的重定向
  3. 公网开放的plc设备——一种新型的后门
  4. 020 Android之so文件动态调试
  5. Excel基础操作(二)
  6. java jedis使用_Java中使用Jedis操作Redis
  7. 操作系统(2) -- 进程管理
  8. __thread 和 __typeof__关键字
  9. html项目列表页面源码,HTML 列表
  10. Xshell如何操作linux
  11. WebClient上传文件至服务器和下载服务器文件至客户端
  12. 博文视点大讲堂第24期:PPT演示之道
  13. Linux内核学习笔记(2)-- 父进程和子进程及它们的访问方法
  14. 安装 tensorflow 环境
  15. vue+elementui+quill富文本框+秀米编辑器和135编辑器
  16. VS Code弹窗:尝试在目标目录创建文件时出错
  17. c语言循环语循环控制,C语言.控制语循环语句.ppt
  18. 手把手教会你视频转文字怎么弄,这个方法建议收藏备用
  19. 【c语言】printf和scanf中* # %g的作用
  20. 【计算机毕业设计】030甘肃非物质文化网站的设计与开发

热门文章

  1. 关于TypeError: ‘numpy.ndarray‘ object is not callable报错
  2. 图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法
  3. python程序更新实现_Python 软件热更新
  4. Android使用smack连接openfire(本地+远程)
  5. matlab固定床反应器,合成气完全甲烷化固定床反应器数值模拟
  6. idea中tomcat环境配置及web项目创建的问题
  7. 【云和恩墨大讲堂】Oracle线上嘉年华第二讲
  8. ASP.NET Core开发之HttpContext
  9. python学习笔记(开课介绍1)
  10. 关于站在主管的角度来看企业用人的一些规则