我有hdfs集羣,它以最終用戶選擇的壓縮/加密格式存儲大型csv文件。 對於壓縮,加密,我創建了一個包裝輸入流,以壓縮/加密的形式將數據提供給HDFS。壓縮格式使用GZ,加密格式爲AES256。 在HDFS上將4.4GB csv文件壓縮爲40MB。帶壓縮/加密文件的Hadoop Mapreduce(大尺寸文件)
現在我有一起處理多個壓縮文件的mapreduce作業(java)。 MR作業使用FileInputFormat。 當通過映射器計算分割時,4.4GB壓縮文件(40MB)僅被分配一個分割開始的映射器爲0,分割長度相當於40MB。
如何處理大尺寸的壓縮文件?我發現的一個選擇是實現自定義RecordReader並使用包裝器輸入流來讀取未壓縮的數據並對其進行處理。 由於我沒有文件的實際長度,所以我不知道要從輸入流中讀取多少數據。
如果我從InputStream中讀到最後,那麼當2個映射器被分配到相同的文件時如何處理,如下所述。 如果壓縮文件大小大於64MB,則將爲同一個文件分配2個映射器。 如何處理這種情況。
的Hadoop版本 - 2.7.1