我创建了一个读取自定义文件输入格式的配置单元外部表。当文件很小时,这工作得很好。但是,当文件很大时,作业会分裂文件,而我的作业会失败。Hive MapReduce作业拆分文件
我在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/';
你能否详细说明“我的工作失败” - 是否因为你的记录分隔符不是通常的LF?顺便说一句,你是否尝试GZIP文件,使他们不可拆分? –
作业失败,因为我的输入文件不可拆分,地图缩小作业失败,因为我的输入格式开始读取文件错误,并获取无效的数据为蜂巢表值。Gzipping文件工作,因为文件被压缩到〜20MB。较小的文件也可以解压缩。当文件大小大时,作业失败。我还没有尝试使用> 128 MB的gzip文件。 –
是运行蜂巢查询的地图/减少作业吗?如果是这样,表格还必须声明输入格式,否则配置单元将使用其默认值。 我们需要更多的细节来回答你的问题,特别是你正在运行什么工作以及如何工作。 –