2013-06-11 78 views
0

我必須讀取在HDFS中的avro文件中序列化的Avro記錄。爲此,我使用AvroKeyInputFormat,因此我的映射器能夠將讀取的記錄作爲關鍵字使用。在Hadoop中使用Avro輸入格式控制分割大小

我的問題是,我如何控制分割大小?使用文本輸入格式,它包括以字節爲單位定義大小。在這裏,我需要定義每個分組將包含多少條記錄。

我想管理我的輸入目錄中的每個文件就像一個大文件。我有沒有使用CombineFileInputFormat?是否有可能與Avro一起使用?

回答

0

拆分兌現邏輯記錄邊界,最小和最大邊界是字節 - 文本輸入格式不會打破在一個文本文件中的行,即使分割邊界以字節爲單位定義。

要在一個分裂的每個文件,您可以設置最大分割尺寸Long.MAX_VALUE或者您可以覆蓋在你的代碼的isSplitable方法並返回false。

+0

問題si不同:在inout文件夾中,我有很多avro文件,其中每個文件都包含一些avro對象。我必須考慮所有輸入對象,並設置每個分割3-4個avro對象的限制。 –

+0

你想讓每個任務只處理3-4個avro對象嗎?一個文件包含多少個對象?對象的大小是多少? – SNeumann

+0

對不起,3-4是一個例子,說我必須控制每個分割有多少個對象。我更願意將所有輸入視爲一個fileonky yo split,並且我無法知道對象的大小,因爲它們也可以包含數組。 –