【数据仓库-Hive】笔记(未完)

PART1 数据仓库-

PART2 Hive的基本概念

一. Hive 简介

在这里插入图片描述

二. Hive 架构

在这里插入图片描述

三. Hive 与 Hadoop 的关系

在这里插入图片描述

四. Hive与传统数据库对比

在这里插入图片描述

五. Hive 的安装

前提:安装好hadoop集群

第一步:上传并解压安装包

第二步:安装mysql,并授权远程登录,打开3306端口

第三步:修改hive文件
修改hive-env.sh
修改hive-site.xml

第四步:添加mysql的连接驱动包到hive的lib目录下

第五步:配置hive的环境变量
/etc/profile
配置后source使得生效

六. Hive 的交互方式

前提:启动hadoop集群 /opt/hadoop-2.7.7/sbin/start-all.sh

第一种交互方式 bin/hive
[root@bigdata ~]# cd /export/servers/apache-hive-2.1.1-bin/
[root@bigdata apache-hive-2.1.1-bin]# bin/hive

创建一个数据库
create database if not exists mytest;

第二种交互方式: 使用sql语句或者sql脚本进行交互
不进入hive的客户端直接执行hive的hql语句
cd /export/servers/apache-hive-2.1.1-bin
bin/hive -e “create database if not exists mytest;”

第二种交互方式:hql语句写成一个sql脚本然后执行
cd /export/servers
vim hive.sql
create database if not exists mytest;
use mytest;
create table stu(id int,name string);
通过hive -f 来执行sql脚本
bin/hive -f /export/servers/hive.sql

PART3 Hive的基本操作

一、数据库操作

1.创建数据库

show databases;
create  database if not exists 数据库名称;
ues 数据库名称;

新建的数据库都保存在hdfs上,由hive-site.xml属性指定
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>

2.指定路径创建数据库

create database 数据库名 location 位置

3.设置数据库键值对信息

#数据库可以有一些描述性的键值对信息,在创建时添加
create database 数据库名 with dbproperties('owner'=拥有者,'date'=日期)
#查看数据库的键值对信息:
describe database extended 数据库名
#修改数据库的键值对信息:
alter database 数据库名 set dbproperties('owner'=拥有者,'date'=日期)

4.查看数据库详细信息

descdatabase extended 数据库名

5.删除数据库

drop database 数据库名;#只能删除空数据库,有数据时报错
drop database 数据库名 casecade;#数据库和数一起删除,慎用

二、数据库表操作

1.创建表

create [external] table [if not exists] table_name (
col_name data_type [comment '字段描述信息']
col_name data_type [comment '字段描述信息'])
[comment '表的描述信息']
[partitioned by (col_name data_type,...)]
[clustered by (col_name,col_name,...)]
[sorted by (col_name [asc|desc],...) into num_buckets buckets]
[row format row_format]
[storted as ....]
[location '指定表的路径']
  1. create table
    创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用 IF NOT
    EXISTS 选项来忽略这个异常。
  2. external
    可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径
    (LOCATION),Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部
    表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的
    元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。
  3. comment
    表示注释,默认不能使用中文
  4. partitioned by
    表示使用表分区,一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下 .
  5. clustered by 对于每一个表分文件, Hive可以进一步组织成桶,也就是说桶是更为细粒
    度的数据范围划分。Hive也是 针对某一列进行桶的组织。
  6. sorted by
    指定排序字段和排序规则
  7. row format
    指定表文件字段分隔符
  8. storted as指定表文件的存储格式, 常用格式:SEQUENCEFILE, TEXTFILE, RCFILE,如果文件
    数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 storted as
    SEQUENCEFILE。
  9. location
    指定表文件的存储路径

2.内部表操作

分 类类型描述字面量示例
原 始 类 型BOOLEANtrue/falseTRUE
TINYINT1字节的有符号整数,-128~1271Y
SMALLINT2个字节的有符号整数,-32768~327671S
INT4个字节的带符号整数1
BIGINT8字节带符号整数1L
FLOAT4字节单精度浮点数1.0
DOUBLE8字节双精度浮点数1.0
DEICIMAL任意精度的带符号小数1.0
STRING字符串,变长“a”,’b’
VARCHAR变长字符串“a”,’b’
CHAR固定长度字符串“a”,’b’
BINARY字节数组无法表示
TIMESTAMP时间戳,毫秒值精度122327493795
DATE日期‘2016-03-29’
INTERVAL时间频率间隔
复 杂 类 型ARRAY有序的的同类型的集合array(1,2)
MAPkey-value,key必须为原始类型,value可以任意类型map(‘a’,1,’b’,2)
STRUCT字段集合,类型可以不同struct(‘1’,1,1.0),
named_stract(‘col1’,’1’,’col2’,1,’clo3’,1.0)
UNION在有限取值范围内的一个值create_union(1,’a’,63)

建表入门:

use myhive;
create table stu(id int,name string);
insert into stu values (1,"zhangsan"); #插入数据
select * from stu;

创建表并指定字段之间的分隔符(默认/001,执行insert就会有个小文件)

create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t';

创建表并指定表文件的存放路径

create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t' location '/user/stu2';

根据查询结果创建表

create table stu3 as select * from stu2; # 通过复制表结构和表内容创建新表

根据已经存在的表结构创建表

create table stu4 like stu;

查询表字段

desc stu4;

查询表的详细信息

desc formatted stu2;

删除表

drop table stu4;#移动到回收站,内部表的元数据和表数据都会删除

3.外部表操作

external关键字
外部表因为是指定其他的hdfs路径的数据加载到表当中来,所以hive表会认为自己不完全独占这份数据,所以删除hive表的时候,数据仍然存放在hdfs当中,不会删掉.
只删除元数据,真实数据并未删除

创建表

create external table teacher (t_id string,t_name string) row format delimited fields terminated by '\t';

加载表(直接用hdfs命令将本地文件put到HDFS指定数据库表目录下)
hdsf dfs -put tea.txt /user/hive/warehouse/myhive.db/teacher

加载表(本地)

hive>load data local inpath '/export/servers/hivedatas/student.csv' into table student;

表删除后数据还在,只有重新建表,数据仍旧能加载出来

加载及覆盖表(本地)

hive>load data local inpath '/export/servers/hivedatas/student.csv' overwrite into table student;

从hdfs文件系统向表中加载数据(需要提前将数据上传到hdfs文件系统)
cd /export/servers/hivedatas
hdfs dfs -mkdir -p /hivedatas
hdfs dfs -put techer.csv /hivedatas/#数据上传到hdfs文件系统

hive>load data inpath '/hivedatas/techer.csv' into table teacher;#实际是剪切,之前hdfs位置上的文件没有了

4.分区表操作

把大的数据,按照每月,或者天进行切分成一个个的小的文件,存放在不同的文件夹中
创建分区表

create table score(s_id string,c_id string, s_score int) partitioned by
(month string) row format delimited fields terminated by '\t';

创建分区表(多个分区)
产生多层级

create table score2 (s_id string,c_id string, s_score int) partitioned by
(year string,month string,day string) row format delimited fields
terminated by '\t';

加载数据到分区表中
HDFS:/usr/hive/warehouse/myhive.db/score表下面会生成一个文件夹month=201806,下面有个文件score.csv

load data local inpath '/export/servers/hivedatas/score.csv' into table
score partition (month='201806');

加载数据到多分区表中
HDFS:/usr/hive/warehouse/myhive.db/score2/year=2018/month=06/day=01/score.csv

load data local inpath '/export/servers/hivedatas/score.csv' into table
score2 partition(year='2018',month='06',day='01');

指定分区查询(若不指定,则查询所有分区)

select * from score where month = '201806' 

多分区表联合查询(使用 union all )

select * from score where month = '201806' union all select * from score
where month = '201806';

查看分区

show partitions score;

添加一个分区

alter table score add partition(month='201805')

删除分区

alter table score drop partition(month = '201806');

5.练习

需求描述 :
现在有一个文件score.csv文件,存放在集群的这个目录下/scoredatas/month=201806,这个文件每天都会生成,存放到对应的日期文件夹下面去,文件别人也需要公用,不能移动。需求,创建hive对应的表,并将数据加载到表中,进行数据统计分析,且删除表之后,数据不能删除
流程简述:
使用hdfs命令在创建目录,并将文件put上去,创建分区表,最后将文件和表产生映射。
数据准备 :
hdfs dfs -mkdir -p /scoredatas/month=201806
hdfs dfs -put hivadatas/score.csv /scoredatas/month=201806/

创建外部分区表,并指定文件数据存放目录

create external table score4(s_id string, c_id string,s_score int)
partitioned by (month string) row format delimited fields terminated by
'\t' location '/scoredatas';

将表直接创建在分区文件夹下,表的数据就已经存在,但是(先有数据文件后才有表表)表和数据文件之间还没有形成映射,此时查询表不会有返回结果。

进行表的修复 (建立表与数据文件之间的一个关系映射)

msck repair table score4;

6.分桶表操作

分桶,就是将数据按照指定的字段进行划分到多个文件当中去,分桶就是MapReduce中的分区。将hive表文件进行分区,把这些表数据划分到多个文件中进行存储,避免单个表文件数据过大。

step 1

开启 Hive 的分桶功能

set hive.enforce.bucketing=true;

设置 Reduce 个数

set mapreduce.job.reduces=3;

step 2
创建分桶表

create table course (c_id string,c_name string,t_id string) clustered
by(c_id) into 3 buckets row format delimited fields terminated by '\t';

桶表的数据加载走mapreduce,因此桶表的数据加载通过直接hdfs dfs -put文件或者通过load data均不好使,只能通过insert overwrite。
先创建普通表,然后通过insert overwriter的方式将普通表的数据通过查询的方式加载到桶表当中去

step 3
创建普通表

create table course_common (c_id string,c_name string,t_id string) row
format delimited fields terminated by '\t';

普通表中加载数据

load data local inpath '/export/servers/hivedatas/course.csv' into table
course_common;

通过insert overwrite给桶表中加载数据

insert overwrite table course select * from course_common cluster
by(c_id);

HDFS:/user/hivewarehouse/course下有3个文件,每个文件都只有一种c_id,但查询数据时没有影响,会返回所有数据

三、修改表结构

1.重命名

alter table score4 rename to score5;

2.增加/修改列信息:

查询表结构

desc score5;

添加列

alter table score5 add columns (mycol string, mysco int);

更新列

alter table score5 change column mysco mysconew int;

删除表

drop table score5;

PART4 Hive查询语法

一、SELECT

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list [HAVING condition]]
[CLUSTER BY col_list
| [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]
]
 [LIMIT number]
  1. order by 会对输入做全局排序,因此只有一个reducer,会导致当输入规模较大时,需要较长的计算时间。
  2. sort by不是全局排序,其在数据进入reducer前完成排序。因此,如果用sort by进行排序,并且设置mapred.reduce.tasks>1,则sort by只保证每个reducer的输出有序,不保证全局有序。
  3. distribute by(字段)根据指定的字段将数据分到不同的reducer,且分发算法是hash散列。
  4. cluster by(字段) 除了具有distribute by的功能外,还会对该字段进行排序.
    因此,如果distribute 和sort字段是同一个时,此时, cluster by = distribute by +
    sort by

二、查询语法

全表查询

select * from score;

选择特定列

select s_id ,c_id from score;

列别名
1)重命名一个列。 2)便于计算。 3)紧跟列名,也可以在列名和别名之间加入关键字‘AS’

select s_id as myid ,c_id from score;

三、常用函数

求总行数(count)

select count(1) from score;

求分数的最大值(max)

select max(s_score) from score;

求分数的最小值(min)

select min(s_score) from score;

求分数的总和(sum)

select sum(s_score) from score;

求分数的平均值(avg)

select avg(s_score) from score;

四、LIMIT语句

典型的查询会返回多行数据。LIMIT子句用于限制返回的行数。

select * from score limit 3;

五、WHERE语句

使用WHERE 子句,将不满足条件的行过滤掉。
WHERE 子句紧随 FROM 子句。

#查询出分数大于60的数据
select * from score where s_score > 60;

比较运算符

操作符支持的数据类型描述
A=B基本数据类型如果A等于B则返回TRUE,反之返回FALSE
A<=>B基本数据类型如果A和B都为NULL,则返回TRUE,其他的和等号(=)操作符的结果一致,如果任一为NULL则结果为NULL
A<>B,A!=B基本数据类型A或者B为NULL则返回NULL;如果A不等于B,则返回TRUE,反之返回FALSE
A<B基本数据类型A或者B为NULL,则返回NULL;如果A小于B,则返回TRUE,反之返回FALSE
A<=B基本数据类型A或者B为NULL,则返回NULL;如果A小于等于B,则返回TRUE,反之返回FALSE
A>B基本数据类型A或者B为NULL,则返回NULL;如果A大于B,则返回TRUE,反之返回FALSE
A>=B基本数据类型A或者B为NULL,则返回NULL;如果A大于等于B,则返回TRUE,反之返回FALSE
A [NOT] BETWEEN B AND C基本数据类型如果A,B或者C任一为NULL,则结果为NULL。如果A的值大于等于B而且小于或等于C,则结果为TRUE,反之为FALSE。如果使用NOT关键字则可达到相反的效果。
A IS NULL所有数据类型如果A等于NULL,则返回TRUE,反之返回FALSE
A IS NOTNULL所有数据类型如果A不等于NULL,则返回TRUE,反之返回FALSE
IN(数值1,数值2)所有数据类型使用 IN运算显示列表中的值
A [NOT]LIKEBSTRING类型B是一个SQL下的简单正则表达式,如果A与其匹配的话,则返回TRUE;反之返回FALSE。B的表达式说明如下:‘x%’表示A必须以字母‘x’开头,‘%x’表示A必须以字母’x’结尾,而‘%x%’表示A包含有字母’x’,可以位于开头,结尾或者字符串中间。如果使用NOT关键字则可达到相反的效果。
A RLIKE B, A REGEXP BSTRING类型B是一个正则表达式,如果A与其匹配,则返回TRUE;反之返回FALSE。匹配使用的是JDK中的正则表达式接口实现的,因为正则也依据其中的规则。例如,正则表达式必须和整个字符串A相匹配,而不是只需与其字符串匹配。
#查询分数等于80的所有的数据
select * from score where s_score = 80;
#查询分数在80到100的所有数据
select * from score where s_score between 80 and 100;
#查询成绩为空的所有数据
select * from score where s_score is null;
#查询成绩是80和90的数据
select * from score where s_score in(80,90);

六、LIKE 和 RLIKE

  • 使用LIKE运算选择类似的值
  • 选择条件可以包含字符或数字:
  • % 代表零个或多个字符(任意个字符)。
  • _ 代表一个字符。
  • RLIKE子句是Hive中这个功能的一个扩展,其可以通过Java的正则表达式言来指定匹配条件。
#查找以8开头的所有成绩
select * from score where s_score like '8%';
#查找第二个数值为9的所有成绩数据
select * from score where s_score like '_9%';
#查找s_id中含1的数据
select * from score where s_id rlike '[1]'; # like '%1%'

七、逻辑运算符

操作符含义
AND逻辑并
OR逻辑或
NOT逻辑否
#查询成绩大于80,并且s_id是01的数据
select * from score where s_score >80 and s_id = '01';
#查询成绩大于80,或者s_id 是01的数
select * from score where s_score > 80 or s_id = '01';
#查询s_id 不是 01和02的学生
select * from score where s_id not in ('01','02');

八、分组

GROUP BY 语句
GROUP BY语句通常会和聚合函数一起使用,按照一个或者多个列队结果进行分组,然后对每个组执行聚合操作

#计算每个学生的平均分数
select s_id ,avg(s_score) from score group by s_id;
#计算每个学生最高成绩
select s_id ,max(s_score) from score group by s_id;

HAVING 语句
. having与where不同点

  1. where针对表中的列发挥作用,查询数据;having针对查询结果中的列发挥作用,筛选数据。
  2. where后面不能写分组函数,而having后面可以使用分组函数。
  3. having只用于group by分组统计语句
#求每个学生平均分数大于85的人
select s_id ,avg(s_score) avgscore from score group by s_id having avgscore > 85;

九、JOIN语句

1.等值 JOIN

Hive支持通常的SQL JOIN语句,但是只支持等值连接,不支持非等值连接。

#查询分数对应的姓名
select s.s_id,s.s_score,stu.s_name,stu.s_birth from score s join student
stu on s.s_id = stu.s_id;

2.表的别名

合并老师与课程表
select * from techer t join course c on t.t_id = c.t_id;

3.内连接

内连接:只有进行连接的两个表中都存在与连接条件相匹配的数据才会被保留下来

select * from techer t inner join course c on t.t_id = c.t_id;

4.左外连接

左外连接:JOIN操作符左边表中符合WHERE子句的所有记录将会被返回。 查询老师对应的课程

select * from techer t left join course c on t.t_id = c.t_id;

5.右外连接

右外连接:JOIN操作符右边表中符合WHERE子句的所有记录将会被返回

select * from teacher t right join course c on t.t_id = c.t_id;

6.多表连接

注意:连接 n个表,至少需要n-1个连接条件。例如:连接三个表,至少需要两个连接条件。

#多表连接查询,查询老师对应的课程,以及对应的分数,对应的学生
select * from teacher t
left join course c
on t.t_id = c.t_id
left join score s
on s.c_id = c.c_id
left join student stu
on s.s_id = stu.s_id;

十、排序

1.全局排序

Order By:全局排序,一个reduce
使用 ORDER BY 子句排序 ASC(ascend): 升序(默认) DESC(descend): 降序
ORDER BY 子句在SELECT语句的结尾。

#查询学生的成绩,并按照分数降序排列
SELECT * FROM student s LEFT JOIN score sco ON s.s_id = sco.s_id
ORDER BY sco.s_score DESC;

2.按照别名排序

#按照分数的平均值排序
select s_id ,avg(s_score) avg from score group by s_id order by avg;

3.多个列排序

#按照学生id和平均成绩进行排序
select s_id ,avg(s_score) avg from score group by s_id order by s_id,avg;

4.每个MapReduce内部排序(Sort By)局部排序

Sort By:每个MapReduce内部进行排序,对全局结果集来说不是排序。

#设置reduce个数
set mapreduce.job.reduces=3;
#查看设置reduce个数
set mapreduce.job.reduces;
#查询成绩按照成绩降序排列
select * from score sort by s_score;
#将查询结果导入到文件中(按照成绩降序排列)
insert overwrite local directory '/export/servers/hivedatas/sort' select *
from score sort by s_score;

本地/export/servers/hivedatas/sort下有3个文件,分别是每个reduce排序后的结果

5.分区排序(DISTRIBUTE BY)

Distribute By:类似MR中partition,进行分区,结合sort by使用。
注意,Hive要求DISTRIBUTE BY语句要写在SORT BY语句之前。
对于distribute by进行测试,一定要分配多reduce进行处理,否则无法看到distribute by的效果。

#先按照学生id进行分区,再按照学生成绩进行排序

#设置reduce的个数,将我们对应的s_id划分到对应的reduce当中去
set mapreduce.job.reduces=7;
#通过distribute by 进行数据的分区
insert overwrite local directory '/export/servers/hivedatas/sort' select *
from score distribute by s_id sort by s_score;
本地/export/servers/hivedatas/sort下有7个文件,分别是每个reduce排序后的结果

6.CLUSTER BY

当distribute by和sort by字段相同时,可以使用cluster by方式。
cluster by除了具有distribute by的功能外还兼具sort by的功能。但是排序只能是倒序排序,不能指定排序规则为ASC或者DESC。

以下两种写法等价

select * from score cluster by s_id;
select * from score distribute by s_id sort by s_id;

PART5 hive shell参数

一、Hive命令行

语法结构
bin/hive [-hiveconf x=y]* [<-i filename>]* [<-f filename>|<-e querystring>] [-S]
说明:

  1. -i 从文件初始化HQL。
  2. -e 从命令行执行指定的HQL
  3. -f 执行HQL脚本
  4. -v 输出执行的HQL语句到控制台
  5. -p connect to Hive Server on port number
  6. -hiveconf x=y Use this to set hive/hadoop configuration variables. 设置hive运行时候的参数配置

二、Hive参数配置方式

开发Hive应用时,不可避免地需要设定Hive的参数。设定Hive的参数可以调优HQL代码的执行效率,或帮助定位问题。
对于一般参数,有以下三种设定方式:

1)配置文件 :Hive的配置文件包括(在下面的conf/文件夹下)
用户自定义配置文件:$HIVE_CONF_DIR/hive-site.xml
默认配置文件: $HIVE_CONF_DIR/hive-default.xml
用户自定义配置会覆盖默认配置。
配置文件的设定对本机启动的所有Hive进程都有效。

2)命令行参数:启动Hive(客户端或Server方式)时,可以在命令行添加-hiveconf param=value
设置将log信息打印到控制台
bin/hive -hiveconf hive.root.logger=INFO,console
这一设定对本次启动的Session(对于Server方式启动,则是所有请求的Sessions)有效

3)参数声明 :可以在HQL中使用SET关键字设定参数

#设置reduce数
set mapred.reduce.tasks=100;
#设置jobname(所有的sql生成的job都会有同一个名字)
set mapred.job.name = etl.bi.test;
#设置job提交到队列
set mapreduce.job.queuename = theme;

这一设定的作用域也是session级的。
参数声明 > 命令行参数 > 配置文件参数(hive)

PART6 HIVE函数

一、内置函数

《Hive官方文档》https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF

查看系统自带的函数

hive> show functions;

显示自带的函数的用法

hive> desc function upper;

详细显示自带的函数的用法

hive> desc function extended upper;

常用内置函数

--字符串连接函数: concat
select concat('abc','def','gh');
#abcdefgh

--带分隔符字符串连接函数: concat_ws
select concat_ws(',','abc','def','gh');
#abc,def,gf

--cast类型转换
select cast(1.5 as int);
#1

--get_json_object(json 解析函数,用来处理json,必须是json格式)
select get_json_object('{"name":"jack","age":"20"}','$.name');
#jack

--URL解析函数
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','HOST');
#facebook.com
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','PATH');
#/path1/p.php
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','QUERY');
#k1=v1&k2=v2
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1','QUERY','K1');
#v1

--explode:把map集合中每个键值对或数组中的每个元素都单独生成一行的形式

二、自定义函数

1.概述

Hive 自带了一些函数,比如:max/min等,当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF).

根据用户自定义函数类别分为以下三种:

  1. UDF(User-Defined-Function)
    一进一出
  2. UDAF(User-Defined Aggregation Function)
    聚集函数,多进一出
    类似于: count / max / min
  3. UDTF(User-Defined Table-Generating Functions)
    一进多出
    如 lateral view explore()

编程步骤:

  1. 继承org.apache.hadoop.hive.ql.UDF
  2. 需要实现evaluate函数;evaluate函数支持重载;

注意事项:

  1. UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
  2. UDF中常用Text/LongWritable等类型,不推荐使用java类型;

2. UDF 开发实例

PART7 hive的数据压缩

在实际工作当中,hive当中处理的数据,一般都需要经过压缩

一、MR支持的压缩编码

查看hadoop支持的压缩方式
bin/hadoop checknative

压缩格式对应的编码解码器
DEFLATEorg.apache.hadoop.io.compress.DefaultCodec
gziporg.apache.hadoop.io.compress.GzipCodec
bzip2org.apache.hadoop.io.compress.BZip2Codec
LZOcom.hadoop.compression.lzo.LzopCodec
LZ4org.apache.hadoop.io.compress.Lz4Codec
Snappyorg.apache.hadoop.io.compress.SnappyCodec

二、压缩配置参数

mapred-site.xml文件中

三、开启Map输出阶段压缩

四、开启Reduce输出阶段压缩

PART 8 数据存数格式

一、列式存储和行式存储

行存储
行查询效率高,列查询效率低,数据压缩效率低
列存储
行查询效率低,列查询效率高,数据压缩效率高

二、常用数据存储格式

PART 9 文件存储格式与数据压缩结合

PART 10 hive调优

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值