我正在寫書面處理二進制格式的大的時間序列數據文件看起來像這樣(新線這裏可讀性M/R工作,實際數據是連續的,很明顯):Hadoop中的MapReduce創建自定義InputFormat和RecordReader對於二進制文件
TIMESTAMP_1---------------------TIMESTAMP_1
TIMESTAMP_2**********TIMESTAMP_2
TIMESTAMP_3%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%TIMESTAMP_3
.. etc
哪裏時間戳是一個簡單的8字節結構,識別爲例如由前2個字節。如上所示,實際數據被限制在重複值時間戳之間,並且包含一個或多個預定義的結構。我想編寫一個自定義InputFormat將發射鍵/值對映射器:
< TIMESTAMP_1, --------------------- >
< TIMESTAMP_2, ********** >
< TIMESTAMP_3, %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% >
從邏輯上講,我想保持目前的TIMESTAMP
的軌道,並聚集所有的數據,直到TIMESTAMP
是再次檢測,然後發送我的<TIMESTAMP, DATA>
對作爲記錄。我的問題是分裂之間同步的RecordReader
裏面,所以如果某個讀者收到以下分裂
# a split occurs inside my data
reader X: TIMESTAMP_1--------------
reader Y: -------TIMESTAMP_1 TIMESTAMP_2****..
# or inside the timestamp
or even: @@@@@@@TIMES
TAMP_1-------------- ..
什麼是解決這個的好辦法?我有一個簡單的方法來訪問文件偏移,使得我CustomRecordReader
可以拆分之間同步和不丟失數據?我覺得我在處理分裂方面存在一些概念上的空白,所以也許對這些解釋有所幫助。謝謝。
如何保持跟蹤你的文件的大小,而寫它HDFS?當文件的大小接近閾值時,關閉它並打開一個新文件進行寫入。正如大衛所說,爲了不失去地方性。 –