2017-04-09 32 views
1

我有一個蜂巢表以下屬性combineInputFormat在Hive中如何工作?

  • 文本文件格式
  • 未分區
  • Unbucketed
  • 爲3.5 MB每個

50個文件遵循從「描述的格式化表格參數「命令

表參數:

COLUMN_STATS_ACCURATE true 
    numFiles    50 
    totalSize    170774650 

我在這個表上執行COUNT(*)操作,它與運行

  • 4級映射器和AWS集羣
  • 1映射器和1減速器1個減速我的獨立集羣[僞羣集模式安裝]

的最大大小分割爲兩個蜂房會話是256MB

我想知道組合輸入格式如何工作?

在單臺機器上,由於所有文件/塊位於同一臺機器上,並且由於合併在一起的文件的總大小小於最大分割大小,所以數據會被聚合在一起,所以單個分割以及單個映射器被要求。

在另一種情況下,AWS集羣產生了4個映射器。我讀過CombineInputFormat採用機架/機器的位置,但確切地說是如何?

感謝您提前給出的所有答案。

回答

0

好的!無回覆!!!我計算了一段時間,並且今天訪問了我的Stack Overflow帳戶,發現這個不幸的問題沒有得到答覆。所以遵循細節。

拆分是從輸入路徑下的文件構建的。分割不能包含來自不同池的文件。返回的每個分組可能包含來自不同文件的塊。如果指定了maxSplitSize,則將同一節點上的塊組合起來形成一個分割。剩下的塊然後與同一機架中的其他塊結合。如果未指定maxSplitSize,則來自同一機架的塊將在一個分割中合併;沒有嘗試創建節點本地分割。如果maxSplitSize等於塊大小,則此類與Hadoop中的默認拆分行爲類似:每個塊都是本地處理的拆分。子類實現InputFormat.createRecordReader(InputSplit,TaskAttemptContext)來爲CombineFileSplit構造RecordReader。

希望它能幫助有類似問題的人!