Apache Spark の2GBの壁問題

備忘のため。
3
Takuya UESHIN @ueshin

Sparkあるある キャッシュがメモリに乗らないからディスクキャッシュに変更したら読めなくなるよね〜。 java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE

2016-03-04 16:33:51
Takuya UESHIN @ueshin

@ueshin at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:127)

2016-03-04 16:43:22
Kousuke Saruta/猿田 浩輔 @raspberry1123

@ueshin これはひどい。。。メモリから退避したしたブロックも読めなくなりそうです。

2016-03-04 17:24:53
Takuya UESHIN @ueshin

@ueshin よく考えたらserモードのメモリキャッシュも落ちちゃうんじゃないか?

2016-03-04 17:27:33
Takeshi Yamamuro @maropu

@ueshin どこかでjiraのチケット見たような?もうfileされてましたっけ?

2016-03-05 18:36:38
Takuya UESHIN @ueshin

@maropu あ、そうなんですか?僕の方ではまだ何もアクションしてないです。

2016-03-05 18:42:54
Takeshi Yamamuro @maropu

@ueshin なるほどー、うろ覚えなのでなんとも。

2016-03-05 18:44:43
Kousuke Saruta/猿田 浩輔 @raspberry1123

@maropu @ueshin これですかね。issues.apache.org/jira/browse/SP… 関連チケットも芋づる式にたどれます。

2016-03-06 22:10:50
Takuya UESHIN @ueshin

@raspberry1123 @maropu おぉ、随分古くから既知だったんですね。そしてついさっきPR来てる!

2016-03-06 22:15:01
Takeshi Yamamuro @maropu

@raspberry1123 @ueshin おおこれだ、これだ、coreの周り人少ないですからねぇ

2016-03-06 22:16:42
Takeshi Yamamuro @maropu

@raspberry1123 @ueshin intの壁か、実質1partitoinがそんなにでかくしないので放置されてるんすかね

2016-03-06 22:20:05
Takuya UESHIN @ueshin

@maropu @raspberry1123 Javaの配列やByteBufferとかはInteger.MAX_VALUEまでしか想定されてなくてそれをうっかり使ってるとこういうことに・・・。

2016-03-06 22:21:45
Kousuke Saruta/猿田 浩輔 @raspberry1123

@maropu @ueshin そうですね。パーティションサイズが2GBを超えるようなケースだとそもそもアプリの作りが良くない可能性も多い気がするので、今の所後回しになってる感はありますね。

2016-03-06 22:22:44
Takeshi Yamamuro @maropu

@ueshin @raspberry1123 そうするとDataFrameのcacheとかも同じ問題抱えていそう、入出力がByteBufferなので

2016-03-06 22:26:13
Takuya UESHIN @ueshin

@maropu @raspberry1123 僕の元々のツイート理由がまさにそれなのでした。w

2016-03-06 22:27:02
Takuya UESHIN @ueshin

@maropu @raspberry1123 あ、違うかも。そっちもそうか。いろいろあるなぁ。

2016-03-06 22:28:35
Takuya UESHIN @ueshin

@maropu @raspberry1123 ここはやはり @taroleo さんの LArray の出番。

2016-03-06 22:31:20
Takeshi Yamamuro @maropu

@ueshin @raspberry1123 @taroleo たしかにoff-heapにしてUnsafeのlong offsetアドレスで参照するという点では方向性が一緒ですね

2016-03-06 22:36:59
K. Ishizaki @kiszk

@raspberry1123 @maropu @ueshin 最近、RDDのキャッシュ周りはかなり書き直しが入ってますが、2GBの壁はそのままの感じですね

2016-03-06 22:49:01
Masaru Dobashi @masaru_dobashi

@maropu @ueshin @raspberry1123 @taroleo ShuffleExternalSorterあたりでもデータサイズ(ないしはオフセット)をIntで持っている箇所なかったかな、と。色々ありそうですね。

2016-03-06 23:46:40
Takuya UESHIN @ueshin

@masaru_dobashi @maropu @raspberry1123 @taroleo LargeByteBuffer が入っただか入るだかなのでそれ入ったら一斉書き換えですかねぇ。入らないならLArrayをブッ込む方向で?w

2016-03-06 23:49:59
Masaru Dobashi @masaru_dobashi

@ueshin @maropu @raspberry1123 @taroleo 今のSparkはオンヒープとオンヒープを両方対応しているため、互いの辻褄(オフセット管理など)を合わせながら実装する感じですかね。

2016-03-06 23:51:31