Hive MapReduce作业拆分文件

时间:2015-12-15 18:15:19

标签: hadoop hive

我创建了一个hive外部表,它读取自定义文件输入格式。当文件很小时,这工作正常。但是当文件很大时,工作就是分割文件而我的工作失败了。

我在IsSplittable方法的自定义输入格式类中返回false。我也尝试将mapreduce.input.fileinputformat.split.minsize和mapred.min.split.size设置为较大的值。我创建了一个Custom InputFormat,OutputFormat和一个SerDe类,并在创建此表时使用它们。

在我的工作日志中,我仍然看到分裂正在发生。

Processing split: Paths:/user/test/testfile1:0+134217728,/user/test/testfile1:134217728+95198924,/user/test/testfile2:0+134217728,/user/test/testfile2:134217728+96092244...

134217728是128 MB,必须是我的HDFS块大小。有没有办法阻止这种分裂的发生?它与此问题有关https://issues.apache.org/jira/browse/HIVE-8630吗?

我的Create table语句是:

CREATE EXTERNAL TABLE test_data(
  key STRING, 
  body map<string, string>  
  )
PARTITIONED BY (year int, month int, day int)  
ROW FORMAT SERDE 'com.hiveio.io.CustomHiveSerde' 
STORED AS INPUTFORMAT 'com.hiveio.io.CustomHiveInputFormat' 
OUTPUTFORMAT 'com.hiveio.io.CustomHiveOutputFormat' 
LOCATION '/user/test/';

1 个答案:

答案 0 :(得分:0)

好吧......实际上,你提到http://api.highcharts.com/highcharts#plotOptions.column.states.hover敲了一下钟声。不久前我们处理了一个非常类似的问题。 该错误提到了CombineHiveInputFormat如何仍然分割不可分割的格式。 CombineHiveInputFormat是默认的HiveInputFormat,其目的是组合多个小文件以减少开销。 你可以禁用它,设置

set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat
在查询之前

,或者如果您希望将其设置为默认值,则将其设置为hive-site.xml中的xml:

<property>
   <name>hive.input.format</name>
   <value>org.apache.hadoop.hive.ql.io.HiveInputFormat</value>
</property>

请注意,您将牺牲组合部分的功能,因此如果您有许多小文件,他们每人在处理时都会使用一个映射器....但这应该有效,它确实有效为我们工作。