Spark Release 2.0.0

Apache Spark 2.0.0 は 2.x ラインの最初のリリースです。主な変更点は、APIの使いやすさ、SQL 2003のサポート、パフォーマンスの向上、構造化ストリーミング、R UDFのサポート、および運用上の改善です。さらに、このリリースには300人以上のコントリビューターからの2500以上のパッチが含まれています。

Apache Spark 2.0.0 をダウンロードするには、ダウンロードページをご覧ください。JIRAで変更点の詳細を確認できます。ここでは、主要モジュールごとにグループ化された、ハイレベルな変更点のリストをまとめました。

APIの安定性

Apache Spark 2.0.0 は、2.Xメジャーラインの最初のリリースです。Sparkは、すべての2.Xリリースで非実験的なAPIの安定性を保証します。APIは1.Xとほぼ同様ですが、Spark 2.0.0 にはAPIの破壊的変更が含まれています。これらは、削除、動作変更、および非推奨セクションに記載されています。

Core および Spark SQL

プログラミングAPI

Spark 2.0における最も大きな変更の1つは、新しく更新されたAPIです

  • DataFrameとDatasetの統合:ScalaとJavaでは、DataFrameとDatasetが統合されました。つまり、DataFrameはDataset of Rowの型エイリアスにすぎません。PythonとRでは、型安全性の欠如を考慮し、DataFrameが主要なプログラミングインターフェースとなります。
  • SparkSession:DataFrameおよびDataset APIの従来のSQLContextとHiveContextを置き換える新しいエントリーポイントです。SQLContextとHiveContextは下位互換性のために維持されます。
  • SparkSessionの新しい、合理化された設定API
  • よりシンプルで、よりパフォーマンスの高いアキュムレータAPI
  • Datasetでの型指定された集計のための、新しく改善されたAggregator API

SQL

Spark 2.0は、SQL2003のサポートにより、SQL機能を大幅に向上させました。Spark SQLは、現在すべての99のTPC-DSクエリを実行できます。さらに、以下を改善しました。

  • ANSI-SQLとHive QLの両方をサポートするネイティブSQLパーサー
  • ネイティブDDLコマンド実装
  • サブクエリのサポート、以下を含む
    • 相関しないスカラサブクエリ
    • 相関するスカラサブクエリ
    • NOT IN述語サブクエリ(WHERE/HAVING句内)
    • IN述語サブクエリ(WHERE/HAVING句内)
    • (NOT) EXISTS述語サブクエリ(WHERE/HAVING句内)
  • ビューの正規化サポート

さらに、Hiveサポートなしでビルドする場合、Spark SQLはHive接続、Hive UDF、およびスクリプト変換を除いて、Hiveサポートありでビルドした場合とほぼ同等の機能を持つはずです。

新機能

  • Databricksのspark-csvモジュールに基づいたネイティブCSVデータソース
  • キャッシングとランタイム実行の両方に対するオフヒープメモリ管理
  • Hiveスタイルのバケットサポート
  • スキッチを使った近似集計統計、近似分位数、ブルームフィルター、カウントミニスケッチなど。

パフォーマンスとランタイム

  • ホールステージコード生成と呼ばれる新しい手法により、SQLとDataFrameの一般的な演算子で大幅な(2~10倍)パフォーマンス向上を実現。
  • ベクトル化によるParquetスキャンスループットの向上
  • ORCパフォーマンスの向上
  • 一般的なワークロードに対するCatalystクエリオプティマイザーの多くの改善
  • すべてのウィンドウ関数に対するネイティブ実装によるウィンドウ関数パフォーマンスの向上
  • ネイティブデータソースの自動ファイル統合

MLlib

DataFrameベースのAPIが主要なAPIになりました。RDDベースのAPIはメンテナンスモードに入ります。詳細はMLlibガイドを参照してください。

新機能

  • ML永続化:DataFrameベースのAPIは、Scala、Java、Python、およびRでのMLモデルとパイプラインの保存と読み込みに対してほぼ完全なサポートを提供します。詳細は、このブログ記事と以下のJIRAを参照してください:SPARK-6725、SPARK-11939、SPARK-14311。
  • RにおけるMLlib:SparkRは現在、一般化線形モデル、ナイーブベイズ、k-meansクラスタリング、および生存回帰のためのMLlib APIを提供しています。詳細については、このトークをご覧ください。
  • Python:PySparkは現在、LDA、ガウス混合モデル、一般化線形回帰など、さらに多くのMLlibアルゴリズムを提供しています。
  • DataFrameベースのAPIに追加されたアルゴリズム:二分法K-meansクラスタリング、ガウス混合モデル、MaxAbsScaler特徴変換。

このトークには、これらの新機能の多くがリストされています。

速度/スケーリング

DataFrameに格納されるベクトルと行列は、はるかに効率的なシリアライゼーションを使用するようになり、MLlibアルゴリズムの呼び出しにおけるオーバーヘッドが削減されました。(SPARK-14850)

SparkR

Spark 2.0におけるSparkRの最大の改善点は、ユーザー定義関数です。ユーザー定義関数は3つあります:dapply、gapply、lapply。最初の2つは、dapplyとgapplyを使用してパーティションベースのUDF(例:パーティション化されたモデル学習)を実行するために使用できます。後者はハイパーパラメータチューニングに使用できます。

さらに、多数の新機能があります

  • Rにおける機械学習のアルゴリズムカバレッジの向上、ナイーブベイズ、k-meansクラスタリング、生存回帰など。
  • 一般化線形モデルは、より多くのファミリーとリンク関数をサポートします。
  • すべてのMLモデルの保存と読み込み。
  • DataFrameの機能強化:ウィンドウ関数API、JDBC、CSV、SparkSessionのリーダー、ライターサポート

ストリーミング

Spark 2.0は、Spark SQLとCatalystオプティマイザーの上に構築された高レベルストリーミングAPIであるStructured Streamingの初期実験リリースをシップします。Structured Streamingにより、ユーザーは静的データソースと同じDataFrame/Dataset APIを使用してストリーミングソースとシンクに対してプログラムでき、Catalystオプティマイザーを活用してクエリプランを自動的に増分化します。

DStream APIの最も顕著な更新は、Kafka 0.10の新しい実験的サポートです。

依存関係、パッケージ、および運用

Sparkの運用およびパッケージングプロセスにさまざまな変更があります。

  • Spark 2.0は、本番環境のデプロイメントでファットアセンブリJARを必要としなくなりました。
  • Akkaの依存関係が削除されたため、ユーザーアプリケーションは任意のバージョンのAkkaに対してプログラムできます。
  • Coarse grained Mesosモードで複数のMesos executorを起動するサポート。
  • Kryoのバージョンが3.0に引き上げられました。
  • デフォルトのビルドでは、Scala 2.10ではなくScala 2.11が使用されるようになりました。

削除、動作変更、および非推奨

削除

Spark 2.0で以下の機能が削除されました。

  • Bagel
  • Hadoop 2.1以前のサポート
  • クロージャシリアライザーを設定する機能
  • HTTPBroadcast
  • TTLベースのメタデータクリーンアップ
  • セミプライベートクラスorg.apache.spark.Logging。slf4jを直接使用することをお勧めします。
  • SparkContext.metricsSystem
  • Tachyonとのブロック指向統合(ファイルシステム統合に包含)
  • Spark 1.xで非推奨になったメソッド
  • RDDを返したPython DataFrameのメソッド(map、flatMap、mapPartitionsなど)。これらは引き続きdataframe.rddフィールド(例:dataframe.rdd.map)で利用可能です。
  • あまり使用されなかったストリーミングコネクタ、Twitter、Akka、MQTT、ZeroMQなど。
  • ハッシュベースのシャッフルマネージャー
  • スタンドアロンマスターからの履歴サーバー機能
  • JavaおよびScalaでは、DataFrameはクラスとして存在しなくなりました。このため、データソースの更新が必要になります。
  • Spark EC2スクリプトは、UC Berkeley AMPLabがホストする外部リポジトリに完全に移行されました。

動作変更

以下の変更は、古い動作やAPIに依存する既存のアプリケーションを更新する必要がある場合があります。

  • デフォルトのビルドでは、Scala 2.10ではなくScala 2.11が使用されるようになりました。
  • SQLでは、浮動小数点リテラルは、以前のdouble型ではなくdecimal型として解析されるようになりました。
  • Kryoのバージョンが3.0に引き上げられました。
  • Java RDDのflatMapおよびmapPartitions関数は、以前はJava Iterableを返す関数を必要としていました。これらは、関数がすべてのデータをマテリアライズする必要がないように、Java iteratorを返す関数を必要とするように更新されました。
  • Java RDDのcountByKeyおよびcountAprroxDistinctByKeyは、java.lang.Objectではなく、Kからjava.lang.Longへのマップを返すようになりました。
  • Parquetファイルを書き込む際、サマリーファイルはデフォルトでは書き込まれません。これを再度有効にするには、ユーザーは「parquet.enable.summary-metadata」をtrueに設定する必要があります。
  • DataFrameベースのAPI(spark.ml)は、spark.mllib.linalgではなくspark.ml.linalgのローカル線形代数に依存するようになりました。これにより、spark.ml.*からspark.mllib.*への依存関係がすべて削除されました。(SPARK-13944)API変更の完全なリストについては、MLlib移行ガイドを参照してください。

より完全なリストについては、非推奨および削除についてはSPARK-11806を参照してください。

非推奨

Spark 2.0で以下の機能が非推奨となり、将来のSpark 2.xバージョンで削除される可能性があります。

  • Apache Mesosのファイングレインモード
  • Java 7のサポート
  • Python 2.6のサポート

既知の問題

  • LeadおよびLagの動作は、nullを尊重することからnullを無視することに変更されました(1.6の動作)。2.0.1では、動作変更は2.0.1で修正されます(SPARK-16721)。
  • 定数入力値を使用するLeadおよびLag関数は、オフセット行が存在しない場合にデフォルト値を返さなくなりました(SPARK-16633)。

クレジット

最後になりましたが、このリリースは以下のコントリビューターなしでは実現できませんでした。Aaron Tokhy, Abhinav Gupta, Abou Haydar Elias, Abraham Zhan, Adam Budde, Adam Roberts, Ahmed Kamal, Ahmed Mahran, Alex Bozarth, Alexander Ulanov, Allen, Anatoliy Plastinin, Andrew, Andrew Ash, Andrew Or, Andrew Ray, Anthony Truchet, Anton Okolnychyi, Antonio Murgia, Arun Allamsetty, Azeem Jiva, Ben McCann, BenFradet, Bertrand Bossy, Bill Chambers, Bjorn Jonsson, Bo Meng, Brandon Bradley, Brian O’Neill, BrianLondon, Bryan Cutler, Burak Köse, Burak Yavuz, Carson Wang, Cazen, Cedar Pan, Charles Allen, Cheng Hao, Cheng Lian, Claes Redestad, CodingCat, Cody Koeninger, DB Tsai, DLucky, Daniel Jalova, Daoyuan Wang, Darek Blasiak, David Tolpin, Davies Liu, Devaraj K, Dhruve Ashar, Dilip Biswal, Dmitry Erastov, Dominik Jastrzębski, Dongjoon Hyun, Earthson Lu, Egor Pakhomov, Ehsan M.Kermani, Ergin Seyfe, Eric Liang, Ernest, Felix Cheung, Feynman Liang, Fokko Driesprong, Fonso Li, Franklyn D’souza, François Garillot, Fred Reiss, Gabriele Nizzoli, Gary King, GayathriMurali, Gio Borje, Grace, Greg Michalopoulos, Grzegorz Chilkiewicz, Guillaume Poulin, Gábor Lipták, Hemant Bhanawat, Herman van Hovell, Hiroshi Inoue, Holden Karau, Hossein, Huaxin Gao, Hyukjin Kwon, Imran Rashid, Imran Younus, Ioana Delaney, Iulian Dragos, Jacek Laskowski, Jacek Lewandowski, Jakob Odersky, James Lohse, James Thomas, Jason Lee, Jason Moore, Jason White, Jean Lyn, Jean-Baptiste Onofré, Jeff L, Jeff Zhang, Jeremy Derr, JeremyNixon, Jia Li, Jo Voordeckers, Joan, Jon Maurer, Joseph K. Bradley, Josh Howes, Josh Rosen, Joshi, Juarez Bochi, Julien Baley, Junyang, Junyang Qian, Jurriaan Pruis, Kai Jiang, KaiXinXiaoLei, Kay Ousterhout, Kazuaki Ishizaki, Kevin Yu, Koert Kuipers, Kousuke Saruta, Koyo Yoshida, Krishna Kalyan, Lewuathe, Liang-Chi Hsieh, Lianhui Wang, Lin Zhao, Lining Sun, Liu Xiang, Liwei Lin, Liye, Luc Bourlier, Luciano Resende, Lukasz, Maciej Brynski, Malte, Maciej Szymkiewicz, Marcelo Vanzin, Marcin Tustin, Mark Grover, Mark Yang, Martin Menestret, Masayoshi TSUZUKI, Matei Zaharia, Mathieu Longtin, Matthew Wise, Miao Wang, Michael Allman, Michael Armbrust, Michael Gummelt, Michel Lemay, Mike Dusenberry, Mortada Mehyar, Nakul Jindal, Nam Pham, Narine Kokhlikyan, Neelesh Srinivas Salian, Nezih Yigitbasi, Nicholas Chammas, Nicholas Tietz, Nick Pentreath, Nilanjan Raychaudhuri, Nirman Narang, Nishkam Ravi, Nong, Nong Li, Oleg Danilov, Oliver Pierson, Oscar D. Lara Yejas, Parth Brahmbhad, Patrick Wendell, Pete Robbins, Peter Ableda, Pierre Borckmans, Prajwal Tuladhar, Prashant Sharma, Pravin Gadakh, QiangCai, Qifan Pu, Raafat Akkad, Rahul Tanwani, Rajesh Balamohan, Rekha Joshi, Reynold Xin, Richard W. Eggert II, Robert Dodier, Robert Kruszewski, Robin East, Ruifeng Zheng, Ryan Blue, Sachin Aggarwal, Saisai Shao, Sameer Agarwal, Sandeep Singh, Sanket, Sasaki Toru, Sean Owen, Sean Zhong, Sebastien Rainville, Sebastián Ramírez, Sela, Sergiusz Urbaniak, Seth Hendrickson, Shally Sangal, Sheamus K. Parkes, Shi Jinkui, Shivaram Venkataraman, Shixiong Zhu, Shuai Lin, Shubhanshu Mishra, Sin Wu, Sital Kedia, Stavros Kontopoulos, Stephan Kessler, Steve Loughran, Subhobrata Dey, Subroto Sanyal, Sumedh Mungee, Sun Rui, Sunitha Kambhampati, Suresh Thalamati, Takahashi Hiroshi, Takeshi YAMAMURO, Takuya Kuwahara, Takuya UESHIN, Tathagata Das, Ted Yu, Tejas Patil, Terence Yim, Thomas Graves, Timothy Chen, Timothy Hunter, Tom Graves, Tom Magrino, Tommy YU, Travis Crawford, Tristan Reid, Victor Chima, Vijay Kiran, Villu Ruusmann, Wang Fei, Wayne Song, Wei Mao, WeichenXu, Weiqing Yang, Wenchen Fan, Wesley Tang, Wilson Wu, Wojciech Jurczyk, Xiangrui Meng, Xiao Li, Xin Ren, Xin Wu, Xinh Huynh, Xiu Guo, Xusen Yin, Yadong Qi, Yanbo Liang, Yang Bo., Yash Datta, Yin Huai, Yonathan Randolph, Yong Gang Cao, Y ong Tang, Yu ISHIKAWA, Yucai Yu, Yuhao Yang, Yury Liavitski, Zhang, Zheng RuiFeng, Zheng Tan, dding3, depend, echo2mei, fwang1, guoxu1231, huangzhaowei, hushan, jayadevanmurali, junhao, kaklakariada, mcheah, meiyoula, movelikeriver, nfraison, oraviv, peng.zhang, petermaxlee, prabs, pshearer, rotems, sandy, seddonm1, sharkd, thomastechs, wangfei, wangyang, wujian, yzhou2001, zhonghaihua, zhuol, zlpmichelle, Örjan Lundberg, Łukasz Gieroń


Spark ニュースアーカイブ