我創建了一個讀取自定義文件輸入格式的配置單元外部表。當文件很小時,這工作得很好。但是,當文件很大時,作業會分裂文件,而我的作業會失敗。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文件。 –
是運行蜂巢查詢的地圖/減少作業嗎?如果是這樣,表格還必須聲明輸入格式,否則配置單元將使用其默認值。 我們需要更多的細節來回答你的問題,特別是你正在運行什麼工作以及如何工作。 –