DataflowJavaSDK Weekly

DataflowJavaSDK の更新を解説します。このブログは Google 社とは一切関係ありません。

Runtime.totalMemory() vs. Runtime.maxMemory(), MapFn and FlatMapFn

引き続き5月中旬のコミットを読んでいます。

Runtime.totalMemory() vs. Runtime.maxMemory()

Fix wrongly set buffer size for GoogleCloudStorageWriteChannel. · GoogleCloudPlatform/DataflowJavaSDK@6c99876 · GitHub

これ1行の変更で JVM のメモリに関する値をチェックして GCS への書き込み時のバッファサイズを調整しているところなのですが、1行だけの変更なのにコミットログが非常に詳細で、元のコードの意図の推測と、 -Xms オプションの有無の考慮と、あと -Xmx の設定について(worker では物理メモリの 1/4 が設定されているらしいということがここからわかる)などが書かれていて、非常に丁寧ですね。 JVM の Runtime.totalMemory() (現在の使用量)と Runtime.maxMemory() (最大の割り当て可能メモリ)の違いというのがわかりました。

MapFn and FlatMapFn

Add MapFn and FlatMapFn · GoogleCloudPlatform/DataflowJavaSDK@431b317 · GitHub

ParDo の DoFn が入力の値を単に変換するだけの Map や FlatMap の挙動をする時に実装を簡易にするためのサブクラス MapFn や FlatMapFn を導入して、ParDo にも ParDo.map, Pardo.flatMap メソッドを追加しています。DoFn は processElement() を上書きしますが、こっちは fn に変換する関数を渡すか、apply を再定義するだけで良いようです。 また fn は SerializableFunction という型で定義されています。いいですね SerializableFunction。まあ、クラス定義は jar を共有してるんでしょうけど。