1. 文件存储格式
- TextFile
- SequeceFile
- RCFile
- ORCFile
- PARQuet
2. 说明
格式 |
导入数据方式 |
textfile |
将数据文件直接拷贝到hdfs上,不进行处理 |
SequenceFile, RCFile, ORCFile, PARQuet |
不能直接将数据文件直接拷贝到hdfs上,数据文件要先导入到TextFile格式的表中,然后再从表中用insert导入各个格式的表中;或者复制表结构及数据的方式 |
3. 不同格式的不同
格式 |
存储方式 |
效率 |
textfile |
行存储 |
磁盘开销大,数据解析开销大,hive不会对数据进行切分 |
sequencefile |
行存储 |
可分割压缩,一般选择block压缩 |
refile |
数据按行分块,每块按照列存储 |
压缩快,快速列存取,读取全量数据的操作,性能可能比sequencefile没有明显的优势 |
orcfile |
数据按行分块,每块按照列存储 |
压缩快,快速列存取,效率比refile高 |
parquet |
数据列式存储 |
相对于orc格式,hadoop生态系统中大部分工程都支持parquet文件 |
4. 一起对比
- 压缩比:
ORC>Parquet>TextFile(没有进行压缩)
- 查询速度:
三者几乎一致
5. 建表/加载数据
| |
| create table log_text[log_orc|log_parquet] ( |
| track_time string, |
| url string, |
| session_id string, |
| referer string, |
| ip string, |
| end_user_id string, |
| city_id string |
| ) row format delimited fields terminated by '\t' |
| stored as textfile[orc|parquet]; |
| |
| |
| load data local inpath '/opt/module/datas/log.data' into table log_text; |
| |
| |
| insert into table log_orc select * from log_text; |
| |
| |
| insert into table log_parquet select * from log_text; |
6. 压缩和存储结合
| |
| |
| create table log_orc_none( |
| track_time string, |
| url string, |
| session_id string, |
| referer string, |
| ip string, |
| end_user_id string, |
| city_id string |
| ) |
| row format delimited fields terminated by '\t' |
| stored as orc tblproperties ("orc.compress"="NONE"); |
| |
| hive (default)> insert into table log_orc_none select * from log_text; |
| |
| |
| |
| create table log_orc_snappy( |
| track_time string, |
| url string, |
| session_id string, |
| referer string, |
| ip string, |
| end_user_id string, |
| city_id string |
| ) |
| row format delimited fields terminated by '\t' |
| stored as orc tblproperties ("orc.compress"="SNAPPY"); |
| |
| hive (default)> insert into table log_orc_snappy select * from log_text; |
| |
| |
| |
| |
| create table log_orc( |
| track_time string, |
| url string, |
| session_id string, |
| referer string, |
| ip string, |
| end_user_id string, |
| city_id string |
| ) |
| row format delimited fields terminated by '\t' |
| stored as orc; |
| |
| insert into table log_orc select * from log_text; |
| |
| |
| |
| hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_none; |
| 18.1 M /user/hive/warehouse/db_hive.db/log_orc_none/log.data |
| hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc_snappy; |
| 3.8 M /user/hive/warehouse/db_hive.db/log_orc_snappy/000000_0 |
| hive (db_hive)> dfs -du -h /user/hive/warehouse/db_hive.db/log_orc; |
| 2.8 M /user/hive/warehouse/db_hive.db/log_orc/000000_0 |
| 没有压缩的orc格式相当于textfile, |
| 默认的压缩格式压缩比例最大,orc存储文件默认采用ZLIB压缩,ZLIB采用的时deflate压缩算法。 |
| 文件没有压缩的话,HDFS上显示的是原来的文件名,如果压缩的话,使用类似000000_0的文件名。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?