Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

過去のメモリビッグデータ過去のメモリビッグデータは
当初2019年末にリリースされる予定でした。ApacheSpark3.0.0は、来週火曜日に開催されるSpark Summit AIカンファレンスの前に、ついに本日リリースされました。ApacheSpark3.0.0は10月に開発されました。 2018年2月これまで21ヶ月近くになりました!このバージョンのリリースは、2つのプレビューと3つの投票を経ています。

•2019年11月6日の最初のプレビューバージョンについては、Spark 3.0 [1]のプレビューリリースを参照してください
。•2019年12月23日の2番目のプレビューバージョンについては、Spark 3.0 [2]のプレビューリリースを参照してください
。•2020年3月21日[投票] Apache Spark 3.0.0 RC1 [3]
•2020年5月18日[投票] Apache Spark 3.0 RC2 [4]
•2020年6月6日[投票] Apache Spark 3.0 RC3 [5]
Apache Spark3.0多くのエキサイティングな新機能が追加されました。動的パーティションプルーニング、アダプティブクエリ実行、アクセラレーター対応スケジューリング、カタログをサポートするカタログをサポートするデータソースAPI)、SparkRでのベクトル化(SparkRでのベクトル化)、Hadoop 3 / JDK 11 / Scala2.12のサポートなどが含まれます。このバージョンは、合計3400を超える問題を解決しました。
Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。
Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントiteblog_hadoopに注意してください。

Sparkの各コンポーネントにおけるこれらの3400を超える問題の分布は次のとおりです。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。
Apache Spark3.0.0の主な機能は次のとおりです。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。
Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントiteblog_hadoopに注意してください。

私はすでにこのカテゴリーでこれらのより重要な機能を紹介しました、そして興味のある学生はそれをチェックすることができます。Spark3.0のより重要な新機能を簡単に見てみましょう。より包括的なものについては、ここでSparkリリース3.0.0をチェックしてください。

動的パーティションプルーニング

いわゆる動的パーティション切断は、実行時(実行時)に推測された情報に基づいて、さらにパーティションを切断します。たとえば、次のクエリがあります。


SELECT * FROM dim_iteblog 
JOIN fact_iteblog 
ON (dim_iteblog.partcol = fact_iteblog.partcol) 
WHERE dim_iteblog.othercol > 10

dim_iteblogテーブルのdim_iteblog.othercol> 10が除外するデータが少ないと仮定しますが、以前のバージョンのSparkはコストを動的に計算できないため、fact_iteblogテーブルが大量の無効なデータをスキャンする可能性があります。動的パーティション削減により、fact_iteblogテーブル内の不要なデータを実行時にフィルターで除外できます。この最適化の後、クエリとスキャンのデータが大幅に削減され、パフォーマンスが33倍向上します。

TPC-DSベンチマークテストでは、102個のクエリのうち60個で、2〜18倍のスピードアップが得られました。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントに従ってください:iteblog_hadoop

この機能に対応する問題は、SPARK-11150およびSPARK-28888にあります。過去のメモリビッグデータの公式アカウントでも、この機能の詳細が少し前に紹介されました。詳細については、「Apache Spark3.0動的パーティションプルーニングの概要」および「ApacheSpark3.0動的パーティションプルーニングの使用」を参照してください。

アダプティブクエリ実行

アダプティブクエリ実行(アダプティブクエリ最適化またはアダプティブオプティマイゼーションとも呼ばれます)は、クエリ実行プランの最適化であり、Spark Plannerが実行時にオプションの実行プランを実行できるようにします。これらのプランは、ランタイム統計に基づいて最適化されます。

早くも2015年に、Sparkコミュニティは適応実行の基本的なアイデアを提案しました.SparkのDAGSchedulerでは、単一のマップステージを送信するためのインターフェイスが追加され、実行時にシャッフルパーティションの数を調整する試みが行われました。ただし、現在の実装には一定の制限があります。シナリオによっては、より多くのシャッフル、つまりより多くのステージが導入され、3つのテーブルが同じステージで結合される状況などを処理できず、現在のItを使用します。フレームワークが、実行プランの変更や実行時の傾斜結合の処理など、適応実行で他の機能を柔軟に実装することは困難です。したがって、この機能は実験段階にあり、構成パラメーターは公式ドキュメントには記載されていません。このアイデアは主にIntelとBaiduの大物から来ています。詳細については、SPARK-9850を参照してください。対応する記事は、「Apache SparkSQL適応実行プラクティス」にあります。

Apache Spark3.0のAdaptiveQuery Execution(AQE)は、SPARK-9850のアイデアに基づいて実装されています。詳細については、SPARK-23128を参照してください。SPARK-23128の目標は、Spark SQLで適応実行を実行し、実行時のレデューサー数の変更をサポートするための柔軟なフレームワークを実装することです。新しい実装は、前述のすべての制限を解決し、他の関数(結合戦略の変更や傾斜結合の処理など)は個別の関数として実装され、後のバージョンではプラグインとして提供されます。

AQEフレームワークは現在、次の3つの機能を提供しています。

•シャッフルパーティションを動的にマージします。
•結合戦略を動的に調整します。
•スキュー結合(スキュー結合)を動的に最適化します。
統計データのない1TBTPC-DSベンチマークに基づくと、Spark 3.0はq77の速度を8倍、q5の速度を2倍、他の26のクエリの速度を1.1倍以上向上させることができます。AQEは、SQL構成spark.sql.adaptive = trueを設定することで有効にできます。このパラメーターのデフォルト値はfalseです。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントに従ってください:iteblog_hadoop

アクセラレータ対応のスケジューリング

今日、ビッグデータと機械学習は大きく組み合わされています。機械学習では、計算の反復時間が非常に長くなる可能性があるため、開発者は通常、GPU、FPGA、またはTPUを使用して計算を高速化することを選択します。Apache Hadoop 3.1バージョンでは、GPUとFPGAのネイティブサポートが開始されました。汎用コンピューティングエンジンとして、Sparkは確かにそれほど遅れをとっていません。Databricks、NVIDIA、Google、AlibabaのエンジニアがApache SparkにネイティブGPUスケジューリングサポートを追加しています。このソリューションは、SparkのGPUリソ​​ースのタスクスケジューリングのギャップを有機的に埋めます。ビッグデータ処理とAIアプリケーションを統合し、Sparkのアプリケーションシナリオを深層学習、信号処理、およびさまざまなビッグデータアプリケーションに拡張します。この作業の問題はSPARK-24615で確認でき、関連するSPIP(Spark Project Improvement Proposals)ドキュメントはSPIP:アクセラレーター対応スケジューリング[6]にあります。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントに従ってください:iteblog_hadoop

現在、ApacheSparkでサポートされているリソースマネージャーYARNとKubernetesはすでにGPUをサポートしています。SparkがGPUもサポートするためには、技術レベルで2つの主要な変更を行う必要があります。

•クラスターマネージャーレベルでは、GPUをサポートするためにクラスターマネージャーをアップグレードする必要があります。また、ユーザーに関連するAPIを提供して、ユーザーがGPUリソ​​ースの使用と割り当てを制御できるようにします。
•Spark内では、スケジューラーがユーザータスク要求でGPUの需要を識別し、エグゼキューターのGPU供給に基づいて割り当てを完了することができるように、スケジューラーレベルで変更を行う必要があります。
Apache SparkがGPUをサポートできるようにするのは比較的大きな機能であるため、プロジェクトはいくつかのフェーズに分かれています。Apache Spark 3.0バージョンでは、スタンドアロン、YARN、KubernetesリソースマネージャーでのGPUサポートをサポートし、基本的に既存の通常の操作に影響を与えません。TPUのサポート、Mesos ExplorerでのGPUサポート、およびWindowsプラットフォームでのGPUサポートは、このバージョンの目標ではありません。さらに、GPUカード内のきめ細かいスケジューリングはこのバージョンではサポートされません。ApacheSpark3.0バージョンは、GPUカードとそのメモリを分離できないユニットとして扱います。詳細については、過去のメモリビッグデータ公式アカウントの記事「ApacheSpark 3.0 Will Built-in Support forGPUScheduling」を参照してください。

Apache Spark DataSource V2

データソースAPIは、HadoopのInputFormat / OutputFormat、HiveのSerdeなど、ストレージシステムから関連するAPIインターフェースを読み書きする方法を定義します。これらのAPIは、ユーザーがSparkでRDDプログラミングを使用するのに非常に適しています。これらのAPIを使用してプログラミングすることで問題を解決できますが、ユーザーのコストは依然として非常に高く、Sparkはそれらを最適化できません。これらの問題を解決するために、Spark1.3バージョンはデータソースAPIV1の導入を開始しました。このAPIを介して、さまざまなソースからデータを簡単に読み取ることができます。Sparkは、SQLコンポーネントの最適化エンジンを使用して、データソースの読み取りを最適化します。トリミング、プッシュダウンのフィルタリングなど。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントiteblog_hadoopに注意してください。

データソースAPIV1は、一連のインターフェイスを抽象化します。ほとんどのシナリオは、これらのインターフェイスを使用して実現できます。ただし、ユーザー数が増えると、いくつかの問題が徐々に発生しました。

•インターフェイスの一部はSQLContextとDataFrameに依存し
ます•スケーラビリティが制限され、他の演算子をプッシュダウンするのが困難
です
列型ストレージ読み取りのサポートの欠如•情報の分割と並べ替えの欠如
•書き込み操作はトランザクションを
サポートしません•ストリーム処理
サポートしません解決するにはデータソースV1Apache Spark 2.3.0以降、コミュニティはデータソースAPI V2を導入しました。元の機能を保持するだけでなく、データソースAPIV1のいくつかの問題も解決します。上位レベルのAPIと拡張機能に依存しています。機能の強化。データソースAPIV2に対応するISSUEは、SPARK-15689にあります。この機能はApacheSpark 2.xバージョンで登場しましたが、あまり安定していないため、コミュニティはSpark DataSource APIV2の安定性と新機能に関する2つの問題SPARK-25186とSPARK-22386を公開しました。Spark DataSource API V2の最終的な安定バージョンと新機能は、年末にApache Sparkバージョン3.0.0でリリースされます。これは、ApacheSparkバージョン3.0.0の主要な新機能でもあります。

Apache Spark DataSource V2の詳細な紹介については、ビッグデータのApache Spark DataSource V2の紹介と入門プログラミングガイド(パート1)およびApache Spark DataSource V2の紹介と入門プログラミングガイド(パート2)を参照してください。公式アカウント。

豊富なAPIと機能

新しいユースケースに対応し、Sparkアプリケーションの開発を簡素化するために、Apache Spark 3.0バージョンは新しい機能を提供し、既存の機能を拡張します。

強化されたパンダUDF

PandasUDFは元々Spark2.3で導入され、PySparkのUDFを拡張し、pandasAPIをPySparkアプリケーションに統合しました。ただし、UDFタイプを追加すると、既存のインターフェイスを理解するのが困難になります。この問題を解決するために、Spark3.0はPythonタイプのヒントを備えた新しいパンダUDFインターフェースを導入しました。このバージョンでは、2つの新しいパンダUDFタイプが追加されています。シリーズのイテレータからシリーズのイテレータ、複数のシリーズのイテレータからシリーズのイテレータ、および3つの新しいパンダ関数API(グループ化されたマップ、マップ、および共同グループ化されたマップ)です。詳細な紹介については、過去のビッグデータを記憶するためのApache Spark3.0の新しいPandasUDFおよびPythonType Hintsを参照してください:https//www.iteblog.com/archives/9814.html

結合ヒントの完全なセット

コミュニティはコンパイラのインテリジェンスを改善し続けていますが、コンパイラがあらゆる状況に対して常に最善の決定を下せるという保証はありません。結合アルゴリズムの選択は、統計とヒューリスティックに基づいています。コンパイラーが最適な選択を行えない場合でも、ユーザーは結合ヒントを使用して、オプティマイザーに影響を与え、より適切なプランを選択できます。Apache Spark 3.0は、新しいヒントを追加することにより、既存の結合ヒントを拡張します:SHUFFLE_MERGE、SHUFFLE_HASH、およびSHUFFLE_REPLICATE_NL

新しい組み込み関数

32個の新しい組み込み関数と高階関数がScalaAPIに追加されました。これらの組み込み関数の中に、MAPの特定の組み込み関数のセット[transform_key、transform_value、map_entries、map_filter、map_zip_with]が追加され、MAPデータ型の処理が簡素化されました。

強化された監視機能

Apache Sparkには、監視の多くの拡張機能も含まれています。これにより、監視がより包括的で安定したものになります。これらの強化された監視機能は、パフォーマンスに大きな影響を与えません。それは次の3つの場所に分けることができます。

構造化ストリーミングのUIを再設計しました

構造化ストリーミングは、Spark2.0で最初に導入されました。Spark 3.0は、これらのストリーミングジョブを監視するためのUIを再設計しました。この新しいUIは、次の2セットの統計を提供します。

•完了したストリームクエリジョブの集約情報•
入力レート、プロセスレート、入力行、バッチ期間、操作期間などを含む、ストリームクエリの詳細な統計情報。
Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントiteblog_hadoopに注意してください。

強化されたEXPLAINコマンド

読書計画は、クエリを理解して調整するために非常に重要です。既存のソリューションは非常に紛らわしいように見えます。各演算子の文字列表現は非常に幅が広​​く、切り捨てられることもあります。Spark 3.0バージョンは、新しいフォーマット(FORMATTED)モードを使用して拡張し、プランをファイルにダンプする機能も提供します。

観察可能な指標

データ品質の変化を継続的に監視することは、データパイプラインを管理するために非常に必要な機能です。Sparkバージョン3.0では、バッチおよびストリーム処理アプリケーションにこの機能が導入されました。監視可能なインジケーターは、クエリで定義できる任意の集計関数(データフレーム)として名前が付けられます。データフレームの実行が完了ポイントに達すると(たとえば、バッチクエリが完了すると)、最後の完了ポイント以降に処理されたデータのインジケータを含む名前付きイベントが発行されます。

ANSISQLの互換性の向上

PostgreSQLは最も高度なオープンソースデータベースの1つであり、SQL:2011の主な機能のほとんどをサポートしています。SQL:2011の要件を完全に満たす179の関数のうち、PostgreSQLは少なくとも160を満たしています。Sparkコミュニティは、機能機能やバグ修正など、Spark SQLとPostgreSQLの違いを解決するために、ISSUESPARK-27764をオープンしました。関数補完には、ANSI SQLをサポートし、SQL予約キーワードと組み込み関数を区別するいくつかの関数が含まれています。このISSUEは231のサブISSUEに対応します。ISSUEのこの部分が解決されると、SparkSQLとPostgreSQLまたはANSISQL:2011の違いはさらに小さくなります。

SparkRのベクトル化された読み取りと書き込み

Sparkはバージョン1.4以降R言語をサポートしていますが、その時点でのSparkとR間の相互作用のアーキテクチャ図は次のとおりです。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントに従ってください:iteblog_hadoop

R言語を使用してSparkクラスターと対話するときは常に、JVMを経由する必要があります。これにより、データのシリアル化と逆シリアル化を回避できません。データ量が多い場合、このパフォーマンスは非常に低くなります。

また、Apache Sparkは、列形式、Parquet / ORCベクトル化読み取り、Pandas UDFなど、多くの操作でベクトル化最適化をすでに実行しています。ベクトル化により、パフォーマンスを大幅に向上させることができます。SparkRのベクトル化により、ユーザーは既存のコードをそのまま使用できますが、Rネイティブ関数を実行したり、SparkDataFrameをRDataFrameに変換したりすると、パフォーマンスが約数千倍向上します。この作品はSPARK-26759の下で見ることができます。新しいアーキテクチャは次のとおりです。

Apache Spark 3.0.0の公式バージョンがついにリリースされ、重要な機能の包括的な分析が行われました。

Spark、Hadoop、またはHBase関連の記事について時間内に知りたい場合は、WeChatパブリックアカウントiteblog_hadoopに注意してください。

SparkRのベクトル化はApacheArrowを使用していることがわかります。これにより、システム間のデータの相互作用が非常に効率的になり、データのシリアル化と逆シリアル化の消費が回避されます。これを採用した後、SparkRとSparkの相互作用のパフォーマンスが大幅に向上しました。

Kafkaストリーミング:includeHeaders

Apache Kafkaバージョン0.11.0.0は、メッセージ内の一部のヘッダー情報の構成をサポートしています。詳細については、KIP-82-レコードヘッダーの追加を参照してください。対応する問題については、KAFKA-4208を参照してください。これらのヘッダーは、一部のシナリオで非常に役立ちます。Spark3.0.0は、ユーザーのシナリオを満たすためにこの機能をサポートする必要があります。詳細については、SPARK-23539を参照してください。具体的な用途は以下のとおりです。


val df = spark 
            .readStream 
            .format("kafka") 
            .option("kafka.bootstrap.servers", "host1:port1,host2:port2") 
            .option("subscribe", "topic1")
            .option("includeHeaders", "true")
            .load()

df.selectExpr("CAST(key AS STRING)", "CAST(value AS STRING)", "headers") .as[(String, String, Map)]

その他

•Sparkon K8S:KubernetesのSparkサポートがバージョン2.3から開始され、Spark 2.4が改善され、Spark3.0でKerberosと動的リソース割り当てのサポートが追加されます。
•リモートシャッフルサービス:現在のシャッフルには、弾力性の低さなどの多くの問題があり、NodeManagerに大きな影響を与え、クラウド環境には適していません。上記の問題を解決するために、リモートシャッフルサービスが導入されます。詳細については、SPARK-25299を参照してください。
•JDK 11のサポート:SPARK-24417を参照してください。JDK11を直接選択する理由は、JDK 8がEOLに到達しようとしているためです(終了JDK9とJDK10はすでにEOLであるため、コミュニティはJDK9とJDK10をスキップし、JDK11を直接サポートします。ただし、
Spark3.0プレビューバージョンは引き続きデフォルトでJDK1.8
使用します。•Scala2.11のサポートを削除し、デフォルトでScala2.12サポートします。詳細についてはSPARK-26132を参照してください。ApacheHadoop3.0.0-beta1が正式にリリースされ、次のバージョン(GA)オンラインで使用できるため)、Hadoop 3.0をサポートするのは当然ですが、Spark3.0プレビューバージョンはデフォルトでHadoop2.7.4を使用します。
•Python2.xサポートの削除:2019年6月には、Spark3.0でのPython2サポートの削除に関するコミュニティでの議論がありました。現在Spark3.0.0はデフォルトでPython3.xをサポートしています。SPARK-27884を参照してください。 。
•SparkGraphはCypherをサポートします:Cypherは人気のあるグラフクエリ言語です。Spark3.0でCypherを直接使用できるようになりました。
•Sparkイベントログはロールをサポートします。「Spark3.0は最終的にイベントログのローリングをサポートします」を参照してください。

参照リンク

[1] Spark 3.0のプレビューリリース:https//spark.apache.org/news/spark-3.0.0-preview.html
[2] Spark 3.0のプレビューリリース:https//spark.apache.org/news /spark-3.0.0-preview2.html
[3] [VOTE] Apache Spark 3.0.0 RC1:https//www.mail-archive.com/[email protected]/msg25781.html [
4] [ VOTE] Apacheのスパーク3.0 RC2:https://www.mail-archive.com/[email protected]/msg26040.html
[5] [投票] Apacheのスパーク3.0 RC3:HTTPS://www.mail-archive .com / dev @ spark.apache.org / msg26119.html

[6] https://spark.apache.org/releases/spark-release-3-0-0.html

[7] SPIP:アクセラレータ対応のスケジューリング:https//issues.apache.org/jira/secure/attachment/12960252/SPIP_%20Accelerator-aware%20scheduling.pdf

おすすめ

転載: blog.51cto.com/15127589/2677594