IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hive的知识 -> 正文阅读

[大数据]hive的知识

一. Hive是什么
Hive是一个基于Hadoop的数据仓库平台。通过hive,我们可以方便地进行ETL的工作。hive定义了一个类似于SQL的查询语言:HQL,能 够将用户编写的QL转化为相应的Mapreduce程序基于Hadoop执行。
Hive是基于hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类sql的查询功能。

二.Hive的执行过程
1.hive的核心是驱动引擎:

Hive处理的数据存储在hdfs文件
Hive分析数据底层是mapreduce
执行程序运行在yarn上。
mapreduce是第一代计算引擎,Tez和spark是第二代。由于hive在mapreduce上运行速度很慢,于是用impala、presto、Drill等交互sql引擎解决mapreduce引擎太慢的问题,但是效果还是一般。
hive on tez/spark和sparksql取代mapreduce,来跑sql。

优点:
(1)操作接口采用类sql语法,提供快速开发的能力
(2)避免了去写mapreduce,减少开发人员的学习成本。
(3)Hive的执行延迟比较高,因此hive常用于数据分析,对实时性要求不高的场合。
(4)Hive的优势处理大数据,对于数据小的没有优势,因为hive的执行延迟比较高
(5)Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。

缺点:
(1)hql的表达有限,迭代式计算无法表达,数据挖掘方面不擅长
(2)hive的效率比较低,hive自动生成mapreduce作业,不够智能化。Hive调优比较困难,颗粒较粗。

三.Hive创建数据表



CREATE [EXTERNAL] TABLE [IF NOT EXISTS]
table_name
   [(col_name data_type [COMMENT col_comment], ...)]  ----指定表的名称和表的具体列信息。
   [COMMENT table_comment]  ---表的描述信息。
   [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]  ---表的分区信息。
   [CLUSTERED BY (col_name,col_name, ...)   --分桶
   [SORTED BY (col_name
[ASC|DESC], ...)] INTO num_buckets BUCKETS]   ---表的桶信息。
   [ROW FORMAT row_format]  ---表的数据分割信息,格式化信息。
   [STORED AS file_format]   ---表数据的存储序列化信息。
   [LOCATION hdfs_path] ---数据存储的文件夹地址信息。
  
 

创建数据表解释说明:
1CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT EXISTS 选项来忽略这个异常。hive中的表可以分为内部表(托管表)和外部表,区别在于,外部表的数据不是有hive进行管理的,也就是说当删除外部表的时候,外部表的数据不会从hdfs中删除。而内部表是由hive进行管理的,在删除表的时候,数据也会删除。一般情况下,我们在创建外部表的时候会将表数据的存储路径定义在hive的数据仓库路径之外。hive创建表主要有三种方式,第一种直接使用create table命令,第二种使用create table ... as select...(会产生数据)。第三种使用create
table tablename like exist_tablename命令。

2、 EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。

3LIKE 允许用户复制现有的表结构,但是不复制数据。

4ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char]
[COLLECTION ITEMS TERMINATED BY char]
        [MAPKEYS TERMINATED BY char] [LINES TERMINATED BY char] SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value,...)]
用户在建表的时候可以自定义 SerDe 或者使用自带的 SerDe。如果没有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,将会使用自带的 SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的 SerDe,Hive通过 SerDe 确定表的具体的列的数据。
数据切分格式:ROW FORMAT DELIMITED FIELDS TERMINATED BY/’ 按照换行切割每个字段之间由[ , ]分割----------FIELDS TERMINATED BY ','第二个字段是Array形式,元素与元素之间由[ - ]分割----------COLLECTION
ITEMS TERMINATED BY '-'第三个字段是K-V形式,每组K-V对内部由[ : ]分割,每组K-V对之间由[ - ]分割----------MAP KEYS TERMINATED BY ':'每条数据之间由换行符分割(默认[ \n ]),如果是其它分割方式(比如[ ; ])----------LINES TERMINATED BY ';'


5、 STORED AS
SEQUENCEFILE  |  TEXTFILE |  RCFILE
如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用STORED AS
SEQUENCEFILE。
创建表的时候,hive文件存储格式有五种:列式存储和行式存储
         1)、TEXTFILE:默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理。行存储(一行一行存储)。数据不做压缩,磁盘开销大,数据解析开销大。
         2)、SEQUENCEFILE:以<key,value>的形式序列化到文件中;存储方式:行存储;可分割 压缩;
         3)、RCFILE:列存储
         4)、ORCFILE(0.11以后出现):数据按行分块 每块按照列存储;压缩快 快速列存取;效率比rcfile高。Orc文件有一个至多个stripe组成,每个stripe250MB大小。
         5)、PARQUET:类似于orc,该文件以二进制的方式存储的。使用该方法存储数据的时候会按照block大小设置行组的大小,每一个mapper任务处理数据的最小单位是block,这样可以把每一行组由一个mapper任务处理,增大任务的执行并行度。该文件中有三种类型的页:数据页、字典页、索引页。索引页还不支持。
SEQUENCEFILE,RCFILE,ORCFILE,PARQUET格式的表不能直接从本地文件导入数据,数据必须要先导入到textfile格式的表中,
然后再从表中用insert导入SequenceFile,RCFile,ORCFile,PARQUET表中。
性能耗时来说:ORCfile <parquet <RCFILE<textfile,ORCFILE最优
Orc和压缩:orc默认压缩为zlib压缩,比snappy压缩的小,但是速率snappy高,一般都会运用到。实际开发会运用orc和parquet的多一些
Stored as orc tblproperties(“orc.compress”=”SNAPPY”)
–压缩

6CLUSTERED BY
对于每一个表(table)或者分区, Hive可以进一步组织成桶,也就是说桶是更为细粒度的数据范围划分。Hive也是
针对某一列进行桶的组织。Hive采用对列值哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中。
把表(或者分区)组织成桶(Bucket)有两个理由:
分区分的是文件夹,分桶分的是文件。
(1)获得更高的查询处理效率。桶为表加上了额外的结构,Hive 在处理有些查询时能利用这个结构。具体而言,连接两个在(包含连接列的)相同列上划分了桶的表,可以使用 Map 端连接
(Map-side join)高效的实现。比如JOIN操作。对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。
(2)使取样(sampling)更高效。在处理大规模数据集时,在开发和修改查询的阶段,如果能在数据集的一小部分数据上试运行查询,会带来很多方便。

7.ROW FORMAT
DELIMITED代表一行是一条记录,是自己创建的全部字段和文件的字段对应,一行对应一条记录。

8.分区表实际上就是对应hdfs文件系统上的独立的文件夹,该文件夹下是该分区的所有的数据文件,hive中的分区就是分目录。

运用在每天日志上、创建的分区表、加载数据到分区表中。
如加载数据到分区:Hive>load data local 
inpath ‘/into table a patition(b=20210101)
加分区:Hive>alter table a add partition(b=20210102) partition(b=20210103);
Drop —是删除分区
存在二级分区:create table a(b int,c string) patitioned by(month string,date string);
创建分区要指定类型;分桶不用指定类型,字段分桶。
往已经存在的分区中加载数据:
>dfs –mkdir –p [表的路径]/month=2021-01-01;
>dfs –put [文件数据的路径]  [分区路径]
或者:load加载
修复分区表:
>msck repair table a;
导入Load语法:
Load data [local] inpath ‘’ overwrite |
into table student [partition ]
import table a partition(b=20210101) from
[文件目录路径];
导出:
1) insert overwrite local
directory [路径] row format delimited fields terminated by ‘\t’ select * from a;
2) hadoop命令:dfs –get [] []
3) shell命令:
4) export:export table a to [];
5) sqoop
清空表:Truncate table a ——只会清空内部表(管理表)

9.针对分桶:
有关分区、分桶的区别:分区针对的是数据的存储路径、分桶针对的是数据文件。分桶表很少用。分区提供一个隔离数据和优化查询的便利方式,不过,并非所有的数据集都可以形成合理的分区,尤其找不到合适的划分时。分桶是将数据集分解成更容易管理的若干部分,是对大数据量表来说的。使用clustered  by [字段]。
才创建分桶表时,要设置属性,不然创建好分桶表后,loadinsert数据后只有一个分桶文件。有多少个reducer就有多少个文件生成。
创建分桶前设置:
>set hive.enforce.bucketing = true;
>set mapreduce.job.reduces=-1
分桶抽样:针对非常大的数据集,用户只需要抽取一些数据结果查看
Select * from a tablesample(bucket x out of y on 【分桶字段】);
一共四个桶,y=2,则是抽取4/2个桶;x指的是从哪个桶开始抽。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-17 11:59:21  更:2021-07-17 12:00:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 5:18:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码