尝试通过在hadoop中使用Insert overwrite partition命令压缩hive分区下的文件来解决小文件问题.
查询:
SET hive.exec.compress.output=true;
SET mapred.max.split.size=256000000;
SET mapred.output.compression.type=BLOCK;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
set hive.merge.mapredfiles=true;
set hive.merge.size.per.task=256000000;
set hive.merge.smallfiles.avgsize=256000000;
INSERT OVERWRITE TABLE tbl1 PARTITION (year=2016, month=03, day=11)
SELECT col1,col2,col3 from tbl1
WHERE year=2016 and month=03 and day=11;
Run Code Online (Sandbox Code Playgroud)
输入文件:
出于测试目的,我在HDFS的hive分区(2016/03/11)下有三个文件,每个大小为40 MB.
2016/03/11/file1.csv
2016/03/11/file2.csv
2016/03/11/file3.csv
示例我的块大小是128,所以我想只创建一个输出文件.但我得到3个不同的压缩文件.
请帮助我获取配置单元配置以限制输出文件大小.如果我没有使用压缩,我将收到单个文件.
蜂巢版本:1.1
我正在尝试通过使用Hive ALTER TABLE语句将现有的Hive外部表定界符从逗号,更改为ctrl+A字符
ALTER TABLE table_name SET SERDEPROPERTIES ('field.delim' = '\u0001');
Run Code Online (Sandbox Code Playgroud)
在DDL之后,我可以看到更改
show create table table_name
Run Code Online (Sandbox Code Playgroud)
但是,当我从Hive中选择时,这些值都是NULL(HDFS中的基础文件已更改为具有ctrl + A分隔符)。
我还通过使用msck修复了该表。
查看数据的唯一方法是删除并重新创建外部表,任何人都可以帮助我了解原因。
表语法:
Run Code Online (Sandbox Code Playgroud)CREATE EXTERNAL TABLE `table_name`( col1, col2, col3) PARTITIONED BY ( `ing_year` int, `ing_month` int, `ing_day` int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 'hdfs://location/'