Hive文件格式及数据导入导出
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
相关文章