我创建了一个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/';
答案 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>
请注意,您将牺牲组合部分的功能,因此如果您有许多小文件,他们每人在处理时都会使用一个映射器....但这应该有效,它确实有效为我们工作。