大家好,又见面了,我是你们的朋友全栈君。
- 软件环境
Hadoop 2.6.0-cdh5.9.0 Hive 1.1.0-cdh5.9.0 Zookeeper 3.4.5-cdh5.9.0
- 需求背景
数据
来源是将8台服务器日志各自压缩成*.gz(8个gz文件)后,按天和小时分区传入到HDFS上,然后通过创建Hive ODS外部表加载到表对应分区,这样一天下来会生产192个gz文件,gz文件是不能进行切分所以查询一天则会产生192个Map数,导致后结数据处理性能与资源占用都比较大。需要进行优化>如下几点:
- 存储后数据可切分
- 数据存储压缩率高
- 数据加载速度要快
- 技术方案
- 通过创建TTexfFile存储格式ODS临时表外部表,将HDFS上的文件目录映射到外部表
create table temp.TempTableName(
col1 string comment 'col1'
,col2 string comment 'col2'
) partitioned by (p_dt string, p_hours string)
row format serde 'org.openx.data.jsonserde.JsonSerDe'
with serdeproperties ("ignore.malformed.json"="true")
stored as textfile
;
Alter table temp.TempTableName add partition (p_dt='20141101',p_hours='00') location '/ods/TempTableName/20141101/00';
- 在ODS层创建ORC存储格式相应的表,将临时外部表数据插入到ODS表
create table ods.TableName(
col1 string comment 'col1'
,col2 string comment 'col2'
) partitioned by (p_dt string, p_hours string)
stored as orc
;
insert overwrite table TableName partition(p_dt='20141101',p_hours='00')
select * from TempTableName where p_dt='20141101' and p_hours='00'
- 数据导入完闭,后续基本ODS进行操作即可
ss
- 方案优点
- 数据可分割
- 数据压缩率90%左右
- 方案缺点
- 性能比以前慢(如是ODS只操作一次建议不采用此方案)
- 维护成本提高
- 文章参考 https://cwiki.apache.org/confluence/display/Hive/CompressedStorage
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/188948.html原文链接:https://javaforall.cn