Sparkあるある キャッシュがメモリに乗らないからディスクキャッシュに変更したら読めなくなるよね〜。 java.lang.IllegalArgumentException: Size exceeds Integer.MAX_VALUE
2016-03-04 16:33:51@ueshin at org.apache.spark.storage.DiskStore$$anonfun$getBytes$2.apply(DiskStore.scala:127)
2016-03-04 16:43:22@ueshin これはひどい。。。メモリから退避したしたブロックも読めなくなりそうです。
2016-03-04 17:24:53@maropu @ueshin これですかね。issues.apache.org/jira/browse/SP… 関連チケットも芋づる式にたどれます。
2016-03-06 22:10:50@maropu @ueshin 2GBの壁はいたるところにあるようです・・・。 issues.apache.org/jira/browse/SP…
2016-03-06 22:19:08@raspberry1123 @ueshin intの壁か、実質1partitoinがそんなにでかくしないので放置されてるんすかね
2016-03-06 22:20:05@maropu @raspberry1123 Javaの配列やByteBufferとかはInteger.MAX_VALUEまでしか想定されてなくてそれをうっかり使ってるとこういうことに・・・。
2016-03-06 22:21:45@maropu @ueshin そうですね。パーティションサイズが2GBを超えるようなケースだとそもそもアプリの作りが良くない可能性も多い気がするので、今の所後回しになってる感はありますね。
2016-03-06 22:22:44@ueshin @raspberry1123 そうするとDataFrameのcacheとかも同じ問題抱えていそう、入出力がByteBufferなので
2016-03-06 22:26:13@ueshin @raspberry1123 @taroleo たしかにoff-heapにしてUnsafeのlong offsetアドレスで参照するという点では方向性が一緒ですね
2016-03-06 22:36:59@raspberry1123 @maropu @ueshin 最近、RDDのキャッシュ周りはかなり書き直しが入ってますが、2GBの壁はそのままの感じですね
2016-03-06 22:49:01@maropu @ueshin @raspberry1123 @taroleo ShuffleExternalSorterあたりでもデータサイズ(ないしはオフセット)をIntで持っている箇所なかったかな、と。色々ありそうですね。
2016-03-06 23:46:40@masaru_dobashi @maropu @raspberry1123 @taroleo LargeByteBuffer が入っただか入るだかなのでそれ入ったら一斉書き換えですかねぇ。入らないならLArrayをブッ込む方向で?w
2016-03-06 23:49:59@ueshin @maropu @raspberry1123 @taroleo 今のSparkはオンヒープとオンヒープを両方対応しているため、互いの辻褄(オフセット管理など)を合わせながら実装する感じですかね。
2016-03-06 23:51:31