Hive文件格式及数据导入导出

2020-07-01 00:00:00 数据 专区 方式 导出 导入到

Hive文件格式

TEXTFILE

默认格式,数据不进行任何压缩

存储方式:行存储

磁盘开销大,数据解析开销大

Hive不会对其进行切分,无法对数据进行并行操作

SEQUENCEFILE

二进制文件,以<key,value>形式序列化到文件中

存储方式:行存储

可分割、可压缩。支持三种压缩方式:NONE,RECORD,BLOCK。Record压缩率低,一般选择block压缩。

文件和Hadoop API中的mapfile相互兼容

RCFILE

存储方式:按行分块,每块按照列存储。保证同一个record在一个块上,避免读一个record需要读取多个block。其次,块数据列存储,有利于数据压缩和快速列存取

压缩快,快速列存取

读记录尽量控制block少

读取指定的列只需读取每个row group的头部定义

读取全量数据时,性能可能对SEQUANCEFILE性能差


ORCFILE

存储方式:按行分块,每块按照列存储

压缩快,快速列存储

效率比RC高,可以理解为RC的改进版


PARQUET

类似于ORC

通用性比ORC强,Hadoop生态系统中大部分工程都支持该文件格式


Hive数据导出

本地文件导入到Hive表,需提前创建表

load data local inpath

"/tmp/user/data/demo_local.parquet"

into table db_tmp.demo_local;

HDFS文件导入到Hive表,需提前创建表

load data inpath

"/tmp/user/data/demo_hdfs.parquet"

into table db_tmp.demo_hdfs;

Hive表导入到Hive表

insert into table demo_hive

select * from demo_hive_b;

创建表时从其他Hive表导入

create table demo_a

as select * from demo_hive_b;

通过sqoop将mysql库导入到Hive表

-- 默认导入到default库

sqoop import --connect

jdbc:mysql://10.168.225.1:3306/casedb

--username root

--password password

--table demo --hive-import

--create-hive-table -m 1

-- 指定导入的数据库

sqoop import --connect

jdbc:mysql://10.168.225.1:3306/casedb

--username root

--password root --table demo

--hive-import --create-hive-table

--hive-table database.demo -m 1

Hive数据导出

导出到本地

insert overwrite local directory

"/home/hadoop/data/"

row format dilimited

fields terminated by ","

select * from demo_hive_b;

导出到HDFS

insert overwrite directory

"/home/hadoop/data/"

row format dilimited

fields terminated by ","

select * from demo_hive_b;

Hive命令行导出

# Linux bash终端

# 重定向方式

hive -e "select * from demo_hive_b" >>

/home/hadoop/data/demo_output.txt


# sql文件方式

echo "select * from demo_hive_b" >

/home/hadoop/data/demo_output.sql

hive -f /home/hadoop/data/demo_output.sql >>

/home/hadoop/data/demo_output.txt


查看更多内容,可关注微信公众号:"data爱好者"

或者浏览作者的博客:https://aitolearn.com

相关文章