hive的一些基础知识

Hive 是什么? Hive 是建立在 Hadoop 上的数据仓库。通俗的说,数据仓库就是用来作为查询 分析的数据库,很少用来插入,修改,删除 当前我们使用的hive版本是2.5.3.0-37

hive中的基本数据类型

数值型:tinyint、smallint、int、integer、bigint、float、double、decimal

日期类型:timestamp(纳秒级时间戳) DATE(YYYY-MM-DD)

字符串类型 string varchar char

布尔类型 boolean(使用较少)

字节数组 binary

复杂数据类型 STRUCT、MAP、ARRAY

复杂数据类型的使用:

(1)STRUCT

CREATE TABLE student_test(id INT, info struct<name:STRING, age:INT>) 

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

COLLECTION ITEMS TERMINATED BY ':';

'FIELDS TERMINATED BY',':字段与字段之间的分隔符,''COLLECTION ITEMS TERMINATED BY' :一个字段各个item的分隔符

(2)ARRAY

建表

create table class_test(name string, student_id_list array<INT>)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

COLLECTION ITEMS TERMINATED BY ':';   

设置了一个int型数组,数组里的元素用:分隔

(3)MAP

create table employee(id string, perf map<string, int>)

ROW FORMAT DELIMITED

FIELDS TERMINATED BY '\t'//字段之间的分隔符

COLLECTION ITEMS TERMINATED BY ','//指定map里的每组元素之间的元素分隔符

MAP KEYS TERMINATED BY ':'; //指定map和key的分隔符


hive中的数据文件格式和压缩格式

文件格式

面向行/ 列类型类型名称是否可切割计算优点缺点适用场景
面向行文本文件格 式(.txt)可以查看、编辑简单无压缩占空间 大、传输压力 大、数据解析 开销大学习练习 使用
面向行SequenceFil e 序列文件格 式(.seq可以自支持、二进制 kv 存储、支持行 和块压缩本地查看不方 便:小文件合 并成 kv 结构 后不易查看内 部数据生产环境 使用、map 输出的默 认文件格 式
面向列rcfile 文件 格式(.rc)可以数据加载块、查 询快、空间利用 率高、高负载能 力每一项都不是 最高学习、生 产均可
面向列orcfile 文件 格式(.orc)可以兼具 rcfile 优 点、进一步提高 了读取、存储效 率、新数据类型 的支持每一项都不是 最高学习、生 产均可

 

 

 

 

 

 

 

 

 

 

 

压缩格式

类型名称可切分性是否原生 支持优点缺点适用场景
lzo(.lzo)可切分压缩/解压速度 快 合理的压缩率压缩率比 gzip 低 不原生、 需要 native 安 装单个文件越大, lzo 优点越越明 显。压缩完成 后>=200M 为宜
bzip2(.bz2 )可切分高压缩率超过 gzip 原生支持、不 需要 native 安 装、用 linux bzip 可解压操 作压缩/解压 速率慢处理速度要求不 高、要求高压缩 率
gzip(.gz)不可切分压缩/解压速度 快原生/native 都支持使用方 便不可切 分、对CPU 要求 较高压缩完成后 <=130M 的文件适宜
snappy(.sn appy)不可切分高速压缩/解压 速度 合理的压缩率压缩率比 gzip 低 不原生、 需要 native 安 装适合作为 map- >reduce 或是 job 数据流的中 间数据传输格式
      

 

 

 

 

 

 

 

 

 

 

 

 

数据操作分类

DDL:建表删表修改表结构,创建删除视图,创建数据库,显示命令(Create/Drop/Alter Database, Create/Drop/Truncate Table, Alter Table/Partition/Column, Create/Drop/Alter View, Create/Drop Index, Create/Drop Function, Show Describe)

ddl中要注意内表和外表的区别,

内表:元数据和数据本身均被 hive 管理。删除表则全部删除。

外表:元数据被 hive 管理,数据本身存储在 hdfs,不受 hive 管理。 删除表则只删除元数据,数据本身不变,创建外表时在table前加 external

分区 伪列,并不是真正的字段,从hdfs上看,分区是一个文件路径。大部分分区字段都是日期

分桶  根据选定的字段的hash值来划定分桶,不是伪列,使用真实的字段

虚表:

row format:用于设定行、列、集合的分隔符等设置

CREATE TABLE student(
id string comment '学号',
username string comment '姓名',
classid int comment '班级 id',
classname string comment '班级名称'
)
comment '学生信息主表'
partitioned by (come_date string comment '按入学年份分区')
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS textfile;

 

DML:数据插入(insert,load) load data ... into table,insert overwrite table

DQL:数据查询(select)  join

区分 inner join取两表交集;left join保留左表全部数据,右表没有与之对应的就置为NULL,right join与之相反;full outer join将两表数据全部保留。

hive不支持update和delete

hive的内置函数:聚合函数如sum、avg、max、min、count等。处于效率考虑,进行行数统计时使用count(1)而不是count(*)

                             字符串函数 reverse、trim 、split等split的用法split("a,b,c",","),其返回值是一个数组

                             表生成函数explode。常与later view连用形成新表

分析函数:NTILE:序列分析函数,用于数据分片排序,对数据分片并返回当前分片 值。(即对数据集分块,如第 1 块,第 2 块                    等),不均匀的时候,依次增 加前边分片序列的数量

                  ROW_NUMBER:序列分析函数,用于排序,按照顺序,不关心是否有相等 情况,从 1 开始逐条给数据一个加 1 后                    的序列号。如 1,2,3,4....

                  RANK:序列分析函数,用于排序,按照顺序,关心相等情况,如遇到相 等情况,名次会留下空位。1,2,2,4,4,6......

                  DENSE_RANK:DENSE_RANK:序列分析函数,用于排序,关心相等情况,如遇到相等情 况,名次不会留下位。                    如 1,2,2,3,3,4......

                  CUME_DIST:累计计算函数,计算公式为“小于等于当前值的行数/分组 内总行数",用于计算数据分布等场景。

                  PERCENT_RANK:累计计算函数,计算公式为” 分组内当前行的 RANK 值1/分组内总行数-1",用于计算处理进度等                      场景。

OVER() 从句和GROUP BY    over与聚合函数连用指定分析窗口函数的细化落围规则

hive的基本架构设计,如图 

Hive的自定义函数

1、udf (user define function) 实现的是输入输出1:1

创建自定义UDF的步骤:(1) 自定义java类(2)继承UDF类 (3)重写evaluate方法(4)maven打包 (5)add jar(6)使用create function创建临时函数(6)调用该udf函数

例如 实现输入的字符串两位后的全部都由*代替

package com.tianliangedu.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
/*
* 功能:实现当输入字符串超过 2 个字符的时候,多余的字符以"..."来表示。
* 输入/输出:* 如“12”则返回“12”,如“123”返回“12..."
*/
public class ValueMaskUDF extends UDF{
    public String evaluate(String input,int maxSaveStringLength,String replaceSign) {
        if(input.length()<=maxSaveStringLength){
            return input;
        }
         return input.substring(0,maxSaveStringLength)+replaceSign;
    }
    public static void main(String[] args) {
        System.out.println(new ValueMaskUDF().evaluate("河北省",2,"..."));;
    }
}

采取maven管理打包方式,相应的pom配置

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0http:
//maven.apache.org/xsd/maven-4.0.0.xsd";>
<modelVersion>4.0.0</modelVersion>
<groupId>com.tianliangedu.course</groupId>
<artifactId>TlHadoopCore</artifactId>
<version>0.0.1-SNAPSHOT</version>
<!-- 首先配置仓库的服务器位置,首选阿里云,也可以配置镜像 -->
<repositories>
    <repository>
        <id>nexus-aliyun</id>
        <name>Nexus aliyun</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </repository>
</repositories>
<dependencies>
<!-- 引入 hadoop-cli-2.7.4 依赖 -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>2.7.4</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-cli</artifactId>
        <version>1.2.1</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
<build>
    <finalName>TlHadoopCore</finalName>
    <plugins>
        <plugin>
            <artifactId>maven-assemblyplugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-withdependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>assembly</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
        <plugin>
            <artifactId>maven-compilerplugin</artifactId>
            <version>2.3.2</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
                <encoding>UTF-8</encoding>
            </configuration>
        </plugin>
    </plugins>
</build>
</project>

maven打包后上传到目的路径里,命令是add jar jar包的路径,然后声明函数 create temporary function 函数名 as ‘包名.类名’;然后像使用系统函数一样,用select语句使用就行了。

2、udaf(user defined aggregation function)  作用相当于聚合函数

继承UDAF类

hive中的一些重要参数

名称设置类 mapred.job.name=JobName 任务在执行时的名称

资源限制类:mapred.reduce.tasks=reduceNum  设置reduce个数

                      mapred.map.task=mapNumber 设置map的个数

                      hive.exec.reducers.max 设置最大可用的reduce个数

性能优化类 hive.e

性能优化-本地化 hive.map.aggr

性能优化-数据倾斜类 hive.map.aggr 本地化的一个方法,

                                   hive.groupby.mapaggr.checkinterval 在map端开启聚合combiner,减少网络传输                                     减少数据倾斜的发生

hive参数的使用方式:1、配置文件设置。2、通过在进入hive cli时指定配置参数。3、进入hive cli后,通过set来设定也是session级参数,比较常见。4、通过shell脚本调用hive -e做参数设置和脚本执行,生产环境采用最多

数据架构 分为三层,源数据落地区(SDF),数据仓库区(DW),数据集市区(DM)

hive使用的引擎各自特点:1、配置mapreduce计算引擎set hive.execution.engine=mr;    2、配置spark计算引擎set hive.execution.engine=spark;3、配置tez 计算引擎set hive.execution.engine=tez;

MapReduce:是一种离线计算框架,将一个算法抽象成Map和Reduce两个阶段进行处理,非常适合数据密集型计算。

Spark:Spark是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于map reduce算法实现的分布式计算,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的map reduce的算法。

Tez: 是基于Hadoop Yarn之上的DAG(有向无环图,Directed Acyclic Graph)计算框架。它把Map/Reduce过程拆分成若干个子过程,同时可以把多个Map/Reduce任务组合成一个较大的DAG任务,减少了Map/Reduce之间的文件存储。同时合理组合其子过程,也可以减少任务的运行时间
Tez可以将多个有依赖的作业转换为一个作业(这样只需写一次HDFS,且中间节点较少),从而大大提升DAG作业的性能

### 回答1: Hive是一个基于Hadoop的数据仓库工具,它提供了一种类似SQL的查询语言,用于将结构化数据存储在Hadoop集群上,并进行查询和分析。下面是一些关于Hive基础知识的选择题: 1. Hive的主要特点是什么? a) 提供类似SQL的查询语言 b) 可以在Hadoop集群上进行数据存储和分析 c) 可以处理结构化和半结构化数据 d) 所有选项都正确 答案:d) 所有选项都正确 2. Hive将数据存储在哪里? a) HBase b) Hadoop Distributed File System (HDFS) c) Cassandra d) MySQL 答案:b) Hadoop Distributed File System (HDFS) 3. Hive的表可以与以下哪种文件格式关联? a) CSV b) JSON c) Parquet d) 所有选项都正确 答案:d) 所有选项都正确 4. Hive使用什么来对数据进行分区和排序? a) HDFS b) Tez c) MapReduce d) Apache Spark 答案:c) MapReduce 5. Hive的数据查询和分析通过什么来实现? a) Hive Query Language (HQL) b) Structured Query Language (SQL) c) Apache Hive d) Apache Hadoop 答案:a) Hive Query Language (HQL) 总之,Hive是一个基于Hadoop的数据仓库工具,具有类似SQL的查询语言,可以在Hadoop集群上存储和分析结构化和半结构化数据。它使用HDFS来存储数据,可以与多种文件格式关联,并使用MapReduce来进行数据分区和排序。数据查询和分析通过Hive Query Language (HQL)来实现。 ### 回答2: Hive是一款基于Hadoop的数据仓库工具,它提供了方便的数据查询和分析的功能。接下来我将回答一些关于Hive基础知识的选择题。 1. Hive的表是如何定义的? 答案:C. 使用HiveQL语句创建表。 2. 在Hive,数据是如何存储的? 答案:B. 在Hadoop的HDFS文件系统。 3. Hive的分区是用来做什么的? 答案:A. 对数据进行逻辑上的划分,便于查询优化和数据管理。 4. 在Hive,可以使用哪种语言进行数据查询? 答案:D. HiveQL。 5. 在Hive,用来处理复杂逻辑和数据运算的是什么? 答案:B. Hive的UDF(用户定义函数)和UDAF(用户定义聚合函数)。 6. Hive的数据存储格式有哪些? 答案:A. 文本文件(TextFile)、序列文件(SequenceFile)和Parquet等。 7. Hive的数据可以通过什么方式进行加载? 答案:C. 使用Hive的LOAD DATA语句。 8. 在Hive,用来创建管理表结构的是什么? 答案:B. Hive的元数据存储。 9. Hive的优势是什么? 答案:C. 简化了对Hadoop数据的查询和分析。 10. 使用Hive时,可以通过什么方式进行数据的导入和导出? 答案:D. 使用Hive的导入和导出命令。 以上是关于Hive基础知识的一些选择题的答案。Hive是一个功能强大且易于使用的工具,可以帮助用户更好地处理和分析大数据。掌握Hive基础知识对于进行数据仓库的建设和数据分析工作非常重要。 ### 回答3: Hive是一个开源的数据仓库基础架构,运行在Hadoop集群上。以下是关于Hive基础知识选择题的回答: 1. Hive的数据存储在哪里? 答:Hive的数据存储在Hadoop分布式文件系统(HDFS)。 2. Hive的数据是如何组织的? 答:Hive的数据是以表(Tables)的形式进行组织的。 3. Hive的表的结构是如何定义的? 答:Hive的表的结构是通过DDL语句来定义的,包括表的名称、列名称、数据类型等信息。 4. Hive的查询语言是什么? 答:Hive的查询语言类似于SQL,称为HiveQL或HQL。 5. Hive的查询语句是如何转换为MapReduce作业的? 答:Hive将查询语句转换为逻辑查询计划,然后将逻辑查询计划转换为物理查询计划,最后将物理查询计划转换为MapReduce作业。 6. Hive的分区表是什么? 答:Hive的分区表是按照一个或多个列的值分成不同的目录,并且每个目录下存储相应分区的数据。 7. Hive的桶是什么? 答:Hive的桶是将数据分成固定数量的文件的一种方式,目的是提高查询性能。 8. Hive的内部表和外部表有什么区别? 答:内部表的数据和元数据都由Hive管理,删除内部表时会删除表的数据;而外部表的数据和元数据存储在外部的文件系统,删除外部表时只会删除元数据。 9. Hive的UDF是什么? 答:UDF全称为用户定义函数(User-Defined Functions),是由用户自定义的用于特定数据处理操作的函数。 10. Hive的压缩是如何实现的? 答:Hive的压缩是通过执行MapReduce作业时将数据进行压缩,以减少数据的存储空间和提高查询性能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值