文章目录
Hive是什么
-
Hive是建立在Hadoop上的数据仓库的基础架构。它提供了一系列的工具,可以用来进行数据提取转化加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据,同时这个语言也允许熟悉Map Reduce开发者的开发自定义的mapper和reduce来处理内建的mapper和reducer无法完成的复杂的分许工作
-
什么是数据仓库:数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库,是为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。它是单个数据存储,出于分析性报告和决策支持目的而创建。 为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
-
Hive是SQL解析引擎,他将SQL语句转译成M/R Job然后在Hadoop执行
-
Hive的表其实就是HDFS的目录,按照表名把文件夹分开,如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据
-
Hive相当于Hadoop的客户端,部署时不一定放在集群管理节点中,可以放在某个节点上面
Hive与传统数据库的比较
、
查询语句 | HiveQL | SQL | 类SQL的查询语句HQL,熟悉SQL开发的开发者可以很方便的使用Hive进行开发 |
---|---|---|---|
数据存储位置 | HDFS | Raw Device 或者本地 | 所有的Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或者本地文件系统中 |
数据格式 | 用户定义 | 系统决定 | Hive中没有定义专门的数据格式。而在数据库中,所有的数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时 |
数据更新 | 不支持(1.x版本以后支持) | 支持 | Hive对数据的改写和添加比较弱化,0.14版本之后支持,需要启动配置项。而数据库中的数据通常是需要经常进行修改的 |
索引 | 新版本有,但是很弱 | 有 | Hive在加载数据的过程中不会对数据进行任何的处理。因此访问延迟比较高。数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询 |
执行 | MapReduce | Excutor | Hive中执行是通过MapReduce来实现的而数据库通常有自己的执行引擎 |
执行延迟 | 高 | 低 | |
可扩展性 | 高 | 低 | |
数据规模 | 大 | 小 | 由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。 |
Hive的存储格式
- Hive的数据存储基于Hadoop HDFS
- Hive没有专门的数据文件格式,常见的有一下几种
Hive的存储格式 | 格式介绍 | 优缺点 |
---|---|---|
TEXTFILE | TextFile即正常的文本格式,是Hive默认文件存储格式,应为大多数情况下源数据文件都是以text文件格式保存(便于查看验数和防止乱码)。此种格式的表文件在HDFS上是明文,可用hadoop fs -cat命令查看,从HDFS上get下来后也可以直接读取。 | 这种格式存储文件默认每一行就是一条记录,可以指定任意的分隔符进行字段间的分割。但这个格式无压缩,需要的存储空间很大。虽然可以结合Gzip、Bzip2等使用,但是使用这种方式,Hive不会对数据进行切分,从而无法对数据进行并行操作,所以一般这种防止只有与其他系统由数据交互的接口表采用TEXTFILE格式,其他事实表和维度表都不建议使用 |
RCFile | 这个格式是Record Columnar的缩写,是Hadoop中第一个列文件格式,能够很高的压缩和快速的查询性能 | 通常写操作比较慢,比非列形式的文件格式需要更多的内存空间和计算量。RCFile是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block,其次,块数据列式存储,有利于数据压缩和快速的列存取 |
ORCFile | Hive从0.11版本开始提供了ORC的文件格式,ORC文件不仅仅是一种列式文件存储格式,最重要的是有着很高的压缩比,并且对于MapReduce来说是课切分的。 | 在Hive中使用ORC作为表的文件存储格式,不经可以很大程度的节省HDFS存储资源,而且对数据的查询和处理性能有着非常大的提升,应为ORC较其他文件格式压缩比高,查询任务的输入数据量减少,使用的Task也就减少了。ORC能很大程度的节省存储和计算资源,但它在读写的时候需要消耗额外的CPU资源来压缩和解压缩,当然这部分的CPU消耗是非常小的 |
Parquet | Parquet仅仅是一种存储格式,他是语言、平台无关的,并且不需要和任何一种数据处理框架绑定,这也是parquet相较于orc的仅有的优势:支持嵌套结构 | Parquet没有太多其他可圈可点的地方,比如他不支持update操作(数据写成后不可修改),不支持ACID等 |
SEQUENCEFILE | SequenceFile是HadoopAPI提供的一种二进制文件,他将数据以<key,value>的形式序列化到文件中,这种二进制文件内部使用Hadoop的标准的Writable接口实现序列化和反序列化,它与Hadoop APi中的MapFile是互相兼容的。Hive中的SequenceFile继承自Hadoop API的SequenceFile,不过他的key为空,使用value存放实际的值,这样是为了避免MR在运行map阶段的排序过程。 | SequenceFile支持三种压缩选择:NONE、RECORD、BLOCK。Recore压缩率低,一般建议使用BLOCK压缩。SequenceFile最重要的优点是Hadoop原生支持较好,有API,但除此之外平平无奇,实际生产中不会使用 |
AVIO | Avro是一种用于支持数据密集型的二进制文件格式 | 他的文件格式更为紧凑,若要读取大量数据时,Avro能够提供更好的序列化和反序列化性能。并且Avro数据文件天生是带Schema定义的,所以他不需要开发者在API级别实现自己的Writable对象,Avro提供的机制是动态语言可以方便的处理Avro数据。最近多个子项目都支持Avro数据格式,如:Pig,Hive,Flume、Sqoop和Hcatalog |
Hive的四大常用存储格式存储效率及执行速度对比
Hive操作客户端
常用的俩个:CLI,JDBC/ODBC
- CLI:即执行shell命令行
- JDBC/ODBC是Hive的Java,与使用传统数据库JDBC的方式类似
- Hive将元数据存储在数据库中(metastore)目前只支持MySQL、derby。
- Hive中的元数据包括表的名字、表的列和分区及属性、表的属性(是否为外部表等)、表的数据所在目录等;由解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划(plan)的生成,生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行
- Hive的数据存储在HDFS中。大部分的查询是由MapReduce完成(但是:包含*的查询,比如:select * from table 不会生成MapReduce任务)
Hive的metastore
- metastore是hive元数据的集中存放池
- metastore默认使用内嵌的derby数据库作为存储引擎
- Derby引擎的缺点,一次只能打开一个会话
今日份的分享到此结束,希望大家做个好梦,晚安,世界!!!!!