2016-01-23 132 views
3

我正在嘗試用MergeContent處理器寫入磁盤上的文件,但我得到的文件大小顯着變化 - 從一行到806行的任何位置。我重複了這個過程多次,試圖找出Apache NIFi MergeContent processor - set demarcator as new line中提到的換行符分隔符,並且我得到了非常隨機大小的文件。與nifi的合併內容 - 不一致的長度

我需要設置什麼參數才能遵循以下邏輯?

  1. 建立單打
  2. 路由所有flowfiles成BIN
  3. 如果len(BIN)> X或倉的年齡比最大斌年齡越大,釋放出倉

爲了全面記錄,我公司目前有以下屬性定義: Merge Content Processor settings Merge Content Processor settings

正如你所看到的,我給自己定按照https://github.com/apache/nifi/blob/31fba6b3332978ca2f6a1d693f6053d719fb9daa/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestMergeContent.java#L219中的語法(這是我設法找到此值的唯一示例,此參數的文檔看起來不完整)中的「Max Bin Age」到「10秒」

我已將「最大條目數「爲5000,」最大條目數「爲1

根據上述邏輯我需要做什麼來聚合我的記錄?我還嘗試使用「相關屬性名稱」參數,並確保在達到此點的所有文檔上具有相同的屬性,並且看到相同

回答

4

這裏最重要的是實際上最少的條目數。正在發生的事情是,分箱算法在物品數量方面採取寬鬆的做法。

針對您的特殊邏輯,你會希望讓事情因爲他們的立場和:

  • 組條目的最小數量到5000
  • 可選,增加條目的最大數量。把它當作被配置將產生正好除了其中年齡間隔已被蝕

下面這些時期5000個條目的上方,其中最小和最大塊大小均爲5000和僅1 bin中的配置的圖像倉一次處理。在這種情況下,你會看到究竟20000文件已合併爲4

Sample execution for a min and max bin size of 5000

+0

有趣的是,當我建立與GenerateFlowFile測試流程,我可以讓你表示動作,但是當我運行與我的測試數據,我仍然得到一個非常隨機的分佈,這些應該有1000文件的最小文件大小和超時30秒: 541 99583 3566100 1453404639289.output.json 16 2920 107583 1453404678859.output.json 493 97853 3122398 1453404758883.output.json 16 3144 102679 1453404809634.output.json 9 1916 66075 1453404859568.output.json 33 6612 213507 1453404869690.output.json –

+0

該變化源於沒有最小和最大等於並指定最大年齡。在我的例子中,沒有最大年齡,1 bin,min = max = 5000。max bin age的作用是避免處理器中的飢餓,以便配置避免輸入被無限期地卡住等待其他內容到達。爲此,根據該處理器的輸入流量總量,始終存在變化的可能性。爲了更好地感受這些數據是如何處理的,除了這一點之外,您能否提供一些關於您的期望的附加背景?謝謝! – apiri

+0

我已經改變了處理器,使其具有1000個最小值和1000個最大值,單個bin,並且具有30秒的超時時間 - 結果是,在大約15秒內,具有例如541,16,493,16,9,和一條33線。我想知道它是否與某些關聯策略有關 - 大部分文件都是在「1453404639289.output.json」方案中命名的(這是原始輸入文件名的格式),但通常有一個或者使用 .json文件名代替兩個文件。 –