From 99b1ac005842ab432020612bfd6540206a9d0d6a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BD=97=E7=A5=A5?= <1366971433@qq.com> Date: Thu, 30 May 2019 14:31:59 +0800 Subject: [PATCH] hive --- notes/Hive.md | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/notes/Hive.md b/notes/Hive.md index 90f1604..67a3ca7 100644 --- a/notes/Hive.md +++ b/notes/Hive.md @@ -13,16 +13,15 @@ ## 一、简介 -Hive构建在Hadoop之上的,可以将结构化的数据文件映射成表,并提供类SQL查询功能,分析查询SQL语句被转化为MapReduce任务在Hadoop框架中运行。 +Hive是一个构建在Hadoop之上的数据仓库,它可以将结构化的数据文件映射成表,并提供类SQL查询功能,用于查询的SQL语句会被转化为MapReduce作业,然后提交到Hadoop上运行。 **特点**: -1. 简单、容易上手(提供了类似sql查询语言hql),使得精通sql 但是不了解 Java 编程的人也能很好的进行大数据分析; - -2. 其执行延迟高,不适合做实时数据的处理,但其适合做海量数据的离线处理; -3. 灵活性高,可以自定义用户函数(UDF)和自定义存储格式; -4. 为超大的数据集设计的计算/存储扩展能力(基于Hadoop,MR计算,HDFS存储),集群扩展容易; -5. 统一的元数据管理(可与presto/impala/sparksql等共享数据,详见下文)。 +1. 简单、容易上手(提供了类似sql的查询语言hql),使得精通sql但是不了解Java编程的人也能很好地进行大数据分析; +3. 灵活性高,可以自定义用户函数(UDF)和存储格式; +4. 为超大的数据集设计的计算和存储能力,集群扩展容易; +5. 统一的元数据管理,可与presto/impala/sparksql等共享数据; +5. 执行延迟高,不适合做数据的实时处理,但适合做海量数据的离线处理。 @@ -32,21 +31,23 @@ Hive构建在Hadoop之上的,可以将结构化的数据文件映射成表, ### 2.1 command-line shell & thrift/jdbc -我们可以用command-line shell和thrift/jdbc两种方式来操作数据:可以通过hive脚本的方式来操作,也可以通过服务器,通过thrift协议按照编译jdbc的方式就能够完成对hive里面的数据进行相应的操作。 +可以用command-line shell和thrift/jdbc两种方式来操作数据: + ++ **command-line shell**:可以通过hive命令行的的方式来操作数据; ++ **thrift/jdbc**:可以通过thrift协议按照标准的JDBC的方式操作数据。 ### 2.2 Metastore -hive里的表名、表结构、字段名、字段类型、表的分隔符等信息就叫做元数据。Metastore是用来存储Hive的元数据,默认元数据是存储在derby关系型数据库中,但使用derby时只能有一个实例,也就是说不能多个命令行接口同时使用,通常使用MySQL代替derby。 +在Hive中,表名、表结构、字段名、字段类型、表的分隔符等统一被称为元数据。所有的元数据默认存储在Hive内置的derby数据库中,但由于derby只能有一个实例,也就是说不能有多个命令行客户端同时访问,所以在实际生产环境中,通常使用MySQL代替derby。 -这里还需要说明的是hive进行的是同一的元数据管理,就是说你在hive上创建了一张表,然后在presto/impala/sparksql 中都是可以直接使用的,同样的你在presto/impala/sparksql中创建一张表,在hive中也是可以使用的。 +Hive进行的是统一的元数据管理,就是说你在Hive上创建了一张表,然后在presto/impala/sparksql 中都是可以直接使用的,它们会从Metastore中获取统一的元数据信息,同样的你在presto/impala/sparksql中创建一张表,在Hive中也可以直接使用。 ### 2.3 执行流程 -1. 客户端提交的sql后首先会通过Driver,然后通过SQL Parser进行sql解析,首先把语句解析成**抽象语法树**之后才能转换成**逻辑性执行计划**; -2. 接着查询优化工具Query Optimizer对我们**逻辑性执行计划**进行优化,最终再生成**物理性执行计划**(physical plan); -3. 在物理性执行计划中还包括序列化和反序列化(SerDes),用户自定义函数(User Defined Functions,UTFs); -4. 把最终的物理执行计划生成**执行引擎**(Execution)提交到mapreduce上去执行; -5. mapreduce的执行肯定有输入和输出,那么这个输入输出可以是hadoop文件系统上的(Hadoop Storage)比如hdfs,hbase包括本地的文件也都是可以的。 +1. 客户端提交的SQL后首先会通过SQL Parser进行解析,把语句解析成**抽象语法树**后转换成**逻辑性执行计划**; +2. 接着查询优化工具Query Optimizer会对**逻辑性执行计划**进行优化,生成**物理性执行计划**(physical plan); +3. 在生成物理执行计划中,还包括一些序列化和反序列化操作(SerDes),以及解析用户自定义函数(User Defined Functions,UTFs)的操作; +4. 接着物理执行计划被转换为MapReduce作业,提交到Hadoop上执行;