巧妙利用sql方式对hive表小文件合并
第一种方法:在hive对应的hdfs文件夹下做小文件合并。 第二种方法:直接通过ETL sql, 可以完成hdfs底层合并. 非常方便
例如:ods_page_log 表。 (刚刚完成抽取、追加,等操作。在ETL完成最后,可追加一个步骤。 )
合并操作:
# 建一张结构一样的临时表、插入数据到临时表、 # 删除原始表、把临时表再命名为原始表的名字 create table tmp_ods_page_log like ods_page_log; insert into tmp_ods_page_log select * FROM ods_page_log; drop table ods_page_log; ALTER TABLE tmp_ods_page_log RENAME TO ods_page_log;
此时再到hdfs中查看,ods_page_log对应的hdfs文件夹下、发现小文件数量变少了。
(目前该方法还没有做分区表的测试。分区文件夹的小文件应该也是会被合并的,文章待续~)
该功能可在该表ETL完成最后,对表进行合并操作。 如果所有hive表最后都可以这样。 小文件数量会大大降低。 当然并不是所有表ETL最后都需要合并,也可做成随机功能模块,根据“资源盈余、表本身大小、是否正在使用等”参数来判断是否能启动合并sql。
上一篇:
JS实现多线程数据分片下载
下一篇:
大数据时代下的Scrapy爬虫框架