Spark リリース 1.5.0
Spark 1.5.0 は 1.x ラインの6番目のリリースです。このリリースには、230人以上の貢献者と80以上の機関からの1400以上のパッチが含まれています。Spark 1.5.0 をダウンロードするには、ダウンロードページをご覧ください。
詳細な変更については、JIRA で確認できます。ここでは、主な変更点のリストをまとめました。
API: RDD、DataFrame、および SQL
- 列名の整合性の取れた解決 (「動作の変更」セクションを参照)
- SPARK-3947: 新しい実験的なユーザー定義集計関数 (UDAF) インターフェース
- SPARK-8300: ブロードキャスト結合のための DataFrame ヒント
- SPARK-8668: SQL 式を DataFrame 列に変換するための expr 関数
- SPARK-9076: NaN 値のサポート向上
- NaN 関数: isnan、nanvl
- dropna/fillna は、NULL 値に加えて NaN 値も補完/削除するようになりました。
- NaN = NaN の等価性テストは true を返します。
- NaN は他のすべての値よりも大きいとみなされます。
- 集計では、NaN 値は1つのグループにまとめられます。
- SPARK-8828: Sum 関数は、すべての入力値が null の場合に null を返します。
- データ型
- SPARK-8159: 約100個の関数が追加されました。これには、日付/時刻、文字列、数学関数が含まれます。
- SPARK-8947: プラン分析フェーズにおける型変換とエラー報告の向上 (つまり、ほとんどのエラーは実行時間ではなく、分析時間で報告されるようになります)
- SPARK-1855: メモリとローカルディスクのみのチェックポインティングをサポート
バックエンド実行: DataFrame および SQL
- ほとんどすべての DataFrame/SQL 関数で**コード生成がデフォルトで有効**になりました。
- **DataFrame/SQL の集計実行が向上**しました。
- キャッシュフレンドリーなインメモリハッシュマップレイアウト
- メモリが不足した場合、外部ソートベースの集計にフォールバックします。
- 集計のコード生成がデフォルトで有効になりました。
- **DataFrame/SQL の結合実行が向上**しました。
- シャッフル結合 (左/右外部結合および内部結合) でハッシュ結合よりも (外部) ソートマージ結合を優先します。つまり、結合データのサイズはメモリではなくディスクによって制限されるようになります。
- 左/右外部結合で (外部) ソートマージ結合メソッドを使用できるようになりました。
- ブロードキャスト外部結合をサポートします。
- **DataFrame/SQL のソート実行が向上**しました。
- ソートのためのキャッシュフレンドリーなインメモリレイアウト
- データがメモリサイズを超える場合、外部ソートにフォールバックします。
- 高速な比較のためのコード生成されたコンパレーター
- ネイティブメモリ管理 & 表現
- メモリ使用量を削減する、コンパクトなバイナリインメモリデータ表現
- JVM GC に依存せず、実行メモリが明示的に計算されるため、GC の削減とより堅牢なメモリ管理が実現されます。
- SPARK-8638: **ウィンドウ関数のパフォーマンスとメモリ使用量の向上**
- メトリクス計測、レポート、および可視化
統合: データソース、Hive、Hadoop、Mesos、およびクラスター管理
- Mesos
- YARN
- スタンドアロンクラスターマネージャー
- SPARK-6906: **Hive およびメタストアのサポート向上**
- SPARK-8131: Hive データベースのサポート向上
- Hive 依存関係 Hive 1.2 にアップグレード
- Hive 0.13、0.14、1.0/0.14.1、1.1、1.2 メタストアへの接続をサポート
- メタストアへのパーティションプルーニングプッシュダウンをサポート (デフォルトでは無効。設定フラグ spark.sql.hive.metastorePartitionPruning)
- メタストアに Hive 互換形式でデータを永続化することをサポート
- SPARK-9381: **JSON** データソースのデータパーティショニングをサポート
- SPARK-5463: **Parquet** の改善
- Parquet 1.7 にアップグレード
- メタデータ検出とスキー merging の高速化
- 述語プッシュダウンがデフォルトで有効になりました。
- SPARK-6774: parquet-format 仕様で定義されたすべての後方互換性ルールを完全に実装することにより、さまざまなライブラリ/システムによって生成された非標準のレガシー Parquet ファイルの読み取りをサポート
- SPARK-4176: 18 を超える精度を持つ decimal 値の書き込みをサポート
- **ORC** の改善 (さまざまなバグ修正)
- SPARK-8890: より高速で堅牢な**動的パーティション挿入**
- SPARK-9486: 外部データソースが短い名前を指定するための DataSourceRegister インターフェース
R言語
機械学習および高度な分析
Spark Streaming
- SPARK-7398: **バックプレッシャー**: Spark Streaming における自動的かつ動的なレート制御により、バースト性のある入力ストリームを処理できます。これにより、ストリーミングパイプラインは取り込みレートと計算負荷の変化に動的に適応できます。これは、レシーバーと Direct Kafka アプローチの両方で機能します。
- ストリーミングソースの Python API
- SPARK-3258: **ストリーミング機械学習アルゴリズムの Python API**: K-Means、線形回帰、およびロジスティック回帰
- SPARK-9215: **Kinesis ストリームの信頼性向上**: ドライバー障害からの受信データの保存と復旧のために書き込み先ログを有効にする必要がなくなりました。
- **Direct Kafka API が一般公開**されました: もはや実験的ではありません。
- SPARK-8701: **UI での入力メタデータ**: Kafka オフセットと入力ファイルがバッチ詳細 UI で表示されます。
- SPARK-8882: クラスター全体でのレシーバーの負荷分散とスケジューリングの改善
- SPARK-4072: ストリーミングストレージを Web UI に含める
非推奨、削除、設定、および動作の変更
Spark Core
- DAGScheduler のローカルタスク実行モードが削除されました。
- デフォルトのドライバーとエグゼキュータのメモリが 512MB から 1GB に増加しました。
- JVM の MaxPermSize のデフォルト設定が 128MB から 256MB に増加しました。
- spark-shell のデフォルトログレベルが INFO から WARN に変更されました。
- NIO ベースの ConnectionManager は非推奨となり、1.6 で削除される予定です。
Spark SQL & DataFrames
- 手動管理メモリ (Tungsten) を使用した最適化された実行がデフォルトで有効になりました。これには、式評価のためのコード生成も含まれます。これらの機能は両方とも spark.sql.tungsten.enabled を false に設定することで無効にできます。
- Parquet のスキーママージは、デフォルトで無効になりました。spark.sql.parquet.mergeSchema を true に設定することで再度有効にできます。
- Python での文字列から列への解決は、ドット (.) を使用して列を修飾したり、ネストされた値にアクセスしたりできるようになりました。例: df[‘table.column.nestedField’]。ただし、列名にドットが含まれる場合、バッククォートを使用してエスケープする必要があります (例:
table.`column.with.dots`.nested)。
- インメモリ列ストレージパーティションプルーニングはデフォルトで有効になっています。spark.sql.inMemoryColumnarStorage.partitionPruning を false に設定することで無効にできます。
- 無制限精度の decimal 列はサポートされなくなり、代わりに Spark SQL は最大精度 38 を強制します。BigDecimal オブジェクトからスキーマを推測する場合、精度 (38, 18) が使用されるようになりました。DDL で精度が指定されていない場合、デフォルトは Decimal(10, 0) のままです。
- タイムスタンプは、100ns ではなく 1us の精度で処理されるようになりました。
- Sum 関数は、すべての入力値が null の場合に null を返します (1.4 より前は null、1.4 では 0)。
- sql 構文では、浮動小数点数は decimal として解析されるようになりました。HiveQL の解析は変更されません。
- SQL/DataFrame 関数の正規化された名前は小文字になりました (例: sum vs SUM)。
- speculation が有効な場合に DirectOutputCommitter を使用することは安全ではないと判断されたため、speculation がオンの場合、Parquet は設定に関係なくこの出力コメッターを使用しません。
- JSON データソースは、他のアプリケーションによって作成された新しいファイル (つまり、Spark SQL を介してデータセットに挿入されていないファイル) を自動的に読み込みません。JSON 永続テーブル (つまり、テーブルのメタデータが Hive Metastore に格納されている) の場合、ユーザーは REFRESH TABLE SQL コマンドまたは HiveContext の refreshTable メソッドを使用して、これらの新しいファイルをテーブルに含めることができます。JSON データセットを表す DataFrame の場合、ユーザーは DataFrame を再作成する必要があり、新しい DataFrame には新しいファイルが含まれます。
Spark Streaming
- 新しい実験的なバックプレッシャー機能は、設定 spark.streaming.backpressure.enabled を true に設定することで有効にできます。
- Kinesis ストリームを使用する場合、Write Ahead Log を有効にする必要はありません。更新された Kinesis レシーバーは、各バッチで受信した Kinesis シーケンス番号を追跡し、その情報を使用して障害から復旧する際に必要なデータを再読み込みします。
- レシーバーが障害で再起動される回数は、Spark タスクの最大試行回数によって制限されません。システムは、StreamingContext が停止されるまで、常にレシーバーの再起動を試みます。
- 再起動後も、エグゼキュータ全体でのレシーバーの負荷分散が向上しました。
- queueStream を使用してチェックポインティングを有効にすると例外が発生します。これは queueStream がチェックポイント化できないためです。しかし、これは既存のアプリケーションの一部を破損させることが判明したため、この変更は Spark 1.5.1 で元に戻されます。
MLlib
experimental spark.mllib パッケージには、破壊的な API 変更はありませんが、いくつかの動作変更があります。
- SPARK-9005: RegressionMetrics.explainedVariance は、平均回帰平方和を返します。
- SPARK-8600: NaiveBayesModel.labels がソートされるようになりました。
- SPARK-3382: GradientDescent はデフォルトの収束許容誤差 1e-3 を持ち、そのため 1.4 より早く反復が終了する可能性があります。
experimental spark.ml パッケージには、1 つの破壊的な API 変更と 1 つの動作変更があります。
- SPARK-9268: Scala コンパイラのバグのため、Java の varargs サポートが Params.setDefault から削除されました。
- SPARK-10097: メトリックの順序付けを示すために Evaluator.isLargerBetter が追加されました。RMSE などのメトリックは、1.4 のように符号が反転しなくなりました。
既知の問題
1.5.0 で既知の問題であり、1.5.1 リリースで修正される予定です。
SQL/DataFrame
- SPARK-10301: ネストされた構造体を持つ異なるスキーマ (スキーママージ) の parquet ファイルを読み取ると、誤った結果が返される可能性があります。
- SPARK-10466: データスピルを伴うソートベースのシャッフル中にデータをスピルすると AssertionError が発生します。
- SPARK-10441: Timestamp データ型は JSON として書き出すことができません。
- SPARK-10495: JSON に保存された Date 値は、「yyyy-mm-dd」形式の文字列ではなく、エポック (1970-01-01 00:00:00 UTC) からの日数を示す文字列として格納されます。
- SPARK-10403: Tungsten モードは tungsten-sort シャッフルマネージャー (デフォルトで無効) では動作しません。
- SPARK-10422: Dictionary Encoding を使用した文字列のインメモリキャッシュが壊れています。
- SPARK-10434 Spark 1.5.0 によって書き込まれた配列に null 要素が含まれる Parquet ファイルは、Spark の以前のバージョンでは読み取れません。
ストリーミング
- SPARK-10224 StreamingContext が正常に停止された場合、データ損失の可能性がわずかにあります。
クレジット
Mesosphere、Typesafe、Tencent、Palantir、Cloudera、Hortonworks、Huawei、Shopify、Netflix、Intel、Yahoo、Kixer、UC Berkeley、および Databricks の各組織に、リリース候補版をワークロードでテストしていただいたことに感謝いたします。
そして何よりも、以下の貢献者なしにはこのリリースは不可能でした: Aaron Davidson, Adam Roberts, Ai He, Akshat Aranya, Alex Shkurenko, Alex Slusarenko, Alexander Ulanov, Alok Singh, Amey Chaugule, Andrew Or, Andrew Ray, Animesh Baranawal, Ankur Chauhan, Ankur Dave, Ben Fradet, Bert Greevenbosch, Bimal Tandel, Brennan Ashton, Brennon York, Brian Lockwood, Bryan Cutler, Burak Yavuz, Calvin Jia, Carl Anders Duvel, Carson Wang, Chen Xu, Cheng Hao, Cheng Lian, Cheolsoo Park, Chris Freeman, Christian Kadner, Cody Koeninger, Damian Guy, Daniel Darabos, Daniel Emaasit, Daoyuan Wang, Dariusz Kobylarz, David Arroyo Cazorla, Davies Liu, DB Tsai, Dennis Huo, Deron Eriksson, Devaraj K, Dibyendu Bhattacharya, Dong Wang, Emiliano Leporati, Eric Liang, Favio Vazquez, Felix Cheung, Feynman Liang, Forest Fang, Francois Garillot, Gen Tang, George Dittmar, Guo Wei, GuoQiang Li, Han JU, Hao Zhu, Hari Shreedharan, Herman Van Hovell, Holden Karau, Hossein Falaki, Huang Zhaowei, Hyukjin Kwon, Ilya Ganelin, Imran Rashid, Iulian Dragos, Jacek Lewandowski, Jacky Li, Jan Prach, Jean Lyn, Jeff Zhang, Jiajin Zhang, Jie Huang, Jihong MA, Jonathan Alter, Jose Cambronero, Joseph Batchik, Joseph Gonzalez, Joseph K. Bradley, Josh Rosen, Judy Nash, Juhong Park, Kai Sasaki, Kai Zeng, KaiXinXiaoLei, Kan Zhang, Kashif Rasul, Kay Ousterhout, Keiji Yoshida, Kenichi Maehashi, Keuntae Park, Kevin Conor, Konstantin Shaplev, Kousuke Saruta, Kun Xu, Lars Francke, Leah McGuire, lee19, Liang-Chi Hsieh, Lianhui Wang, Luca Martinetti, Luciano Resende, Manoj Kumar, Marcelo Vanzin, Mark Smith, Martin Zapletal, Matei Zaharia, Mateusz Buskiewicz, Matt Massie, Matthew Brandyberry, Meethu Mathew, Meihua Wu, Michael Allman, Michael Armbrust, Michael Davies, Michael Sannella, Michael Vogiatzis, Michel Lemay, Mike Dusenberry, Min Zhou, Mingfei Shi, mosessky, Moussa Taifi, Mridul Muralidharan, NamelessAnalyst, Namit Katariya, Nan Zhu, Nathan Howell, Navis Ryu, Neelesh Srinivas Salian, Nicholas Chammas, Nicholas Hwang, Nilanjan Raychaudhuri, Niranjan Padmanabhan, Nishkam Ravi, Nishkam Ravi, Noel Smith, Oleksiy Dyagilev, Oleksiy Dyagilev, Paavo Parkkinen, Patrick Baier, Patrick Wendell, Pawel Kozikowski, Pedro Rodriguez, Perinkulam I. Ganesh, Piotr Migdal, Prabeesh K, Pradeep Chhetri, Prayag Chandran, Punya Biswal, Qian Huang, Radek Ostrowski, Rahul Palamuttam, Ram Sriharsha, Rekha Joshi, Rekha Joshi, Rene Treffer, Reynold Xin, Roger Menezes, Rohit Agarwal, Rosstin Murphy, Rowan Chattaway, Ryan Williams, Saisai Shao, Sameer Abhyankar, Sandy Ryza, Santiago M. Mola, Scott Taylor, Sean Owen, Sephiroth Lin, Seth Hendrickson, Sheng Li, Shilei Qian, Shivaram Venkataraman, Shixiong Zhu, Shuo Bai, Shuo Xiang, Simon Hafner, Spiro Michaylov, Stan Zhai, Stefano Parmesan, Steve Lindemann, Steve Loughran, Steven She, Su Yan, Sudhakar Thota, Sun Rui, Takeshi YAMAMURO, Takuya Ueshin, Tao Li, Tarek Auel, Tathagata Das, Ted Blackman, Ted Yu, Thomas Omans, Thomas Szymanski, Tien-Dung Le, Tijo Thomas, Tim Ellison, Timothy Chen, Tom Graves, Tom White, Tomohiko K., Vincent D. Warmerdam, Vinod K C, Vinod KC, Vladimir Vladimirov, Vyacheslav Baranov, Wang Tao, Wang Wei, Weizhong Lin, Wenchen Fan, Wisely Chen, Xiangrui Meng, Xu Tingjun, Xusen Yin, Yadong Qi, Yanbo Liang, Yash Datta, Yijie Shen, Yin Huai, Yong Tang, Yu ISHIKAWA, Yuhao Yang, Yuming Wang, Yuri Saito, Yuu ISHIKAWA, Zc He, Zhang, Liye, Zhichao Li, Zhongshuai Pei, Zoltan Zvara、そしていくつかの未知の貢献者 (ここに表示されるには、git コミットにメールアドレスと名前を記載してください)。
Spark ニュースアーカイブ