小编Wil*_*m R的帖子

使用insert overwrite partition进行hive压缩

尝试通过在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

hadoop hive hql hdfs

6
推荐指数
1
解决办法
4389
查看次数

配置单元更改Serde属性不起作用

我正在尝试通过使用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修复了该表。

查看数据的唯一方法是删除并重新创建外部表,任何人都可以帮助我了解原因。

表语法:

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/'
Run Code Online (Sandbox Code Playgroud)

hadoop hive hdfs

3
推荐指数
1
解决办法
5839
查看次数

标签 统计

hadoop ×2

hdfs ×2

hive ×2

hql ×1