Apache Spark defined
Apache Sparkは、非常に大きなデータセットに対して処理タスクを迅速に実行できるデータ処理フレームワークであり、単独で、または他の分散コンピューティングツールと並行して、複数のコンピュータにデータ処理タスクを分散することもできます。 これら二つの資質は、大規模なデータストアをクランチするために大規模なコンピューティングパワーのマーシャリングを必要とするビッグデータと機械学習, Sparkはまた、分散コンピューティングとビッグデータ処理の厄介な作業の多くを抽象化する使いやすいAPIを備えているため、これらのタスクのプログラミングの負担を開発者の肩から取り除くこともできます。
2009年のU.C.BerkeleyのAMPLabでの謙虚な始まりから、Apache Sparkは世界の重要なビッグデータ分散処理フレームワークの一つとなっています。 Sparkはさまざまな方法でデプロイでき、Java、Scala、Python、およびRプログラミング言語のネイティブバインディングを提供し、SQL、ストリーミングデータ、機械学習、およびグラフ処理をサポートします。, 銀行、電気通信会社、ゲーム会社、政府、そしてApple、Facebook、IBM、Microsoftなどの主要なハイテク大手のすべてで使用されています。
Apache Sparkアーキテクチャ
基本的なレベルでは、Apache Sparkアプリケーションは、ユーザーのコードをワーカーノードに分散できる複数のタスクに変換するドライバと、それらのノードで実行され、それらに割り当てられたタスクを実行するエグゼキュータの二つの主要なコンポーネントで構成されています。 両者の間を仲介するには、何らかの形式のクラスタマネージャが必要です。,このモードでは、クラスター内の各マシンにApache SparkフレームワークとJVMを必要とするだけです。 ただし、より堅牢なリソースまたはクラスタ管理システムを利用して、必要に応じてワーカーを割り当てることができる可能性が高くなります。 企業では、これは通常、Hadoop YARNで実行することを意味します(これはClouderaおよびHortonworksディストリビューションがSparkジョブを実行する方法です)が、Apache SparkはApache Mesos、Kubernetes、およびDocker Swarm,マネージドソリューションを求める場合、Apache SparkはAmazon EMR、Google Cloud Dataproc、およびMicrosoft Azure HDInsightの一部として見つけることができます。 これは、Apache Sparkクラスター、ストリーミングサポート、統合されたwebベースのノートブック開発、および標準のApache Sparkディストリビューション上で最適化されたクラウドI/Oパフォーマンスを提供する包括的なマネージドサービスです。
Apache Sparkは、ユーザーのデータ処理コマンドを有向非循環グラフまたはDAGにビルドします。, DAGはApache Sparkのスケジューリング層であり、どのノードでどのタスクが実行されるか、どの順序で実行されるかを決定します。
Spark vs.Hadoop:なぜApache Sparkを使用するのですか?
Apache SparkとApache Hadoopはちょっと誤った名称であることを指摘する価値があります。 い火花を含むほとんどHadoopの分布。 しかし、二つの大きな利点のために、Sparkはビッグデータを処理するときの選択の枠組みとなり、Hadoopを顕著にした古いMapReduceパラダイムを追い越しました。
最初の利点はスピードです。, Sparkのインメモリデータエンジンは、特定の状況において、特にステージ間で状態をディスクに書き込む必要があるマルチステージジョブと比較して、MapReduceより 本質的に、MapReduceはデータマッピングと削減からなる二段階実行グラフを作成しますが、Apache SparkのDAGには複数のステージがあり、より効率的に分散できます。 データをメモリ内に完全に含めることができないApache Sparkジョブでさえ、MapReduceの対応するジョブよりも約10倍高速になる傾向があります。,
第二の利点は、開発者に優しいSpark APIです。 Sparkの高速化と同じくらい重要ですが、Spark APIの使いやすさがさらに重要であると主張することができます。
Spark Core
MapReduceやその他のApache Hadoopコンポーネントと比較して、Apache Spark APIは開発者にとって非常に友好的であり、単純なメソッド呼び出しの背後に分散処理エンジンの複雑さの多くを隠しています。, この標準的な例は、ドキュメント内の単語を数えるためのMapReduceコードのほぼ50行をわずか数行のApache Sparkに減らすことができる方法です(ここではScalaに示します):
PythonやRのようなデータ分析のための一般的な言語へのバインディングを提供することにより、Apache Sparkはアプリケーション開発者からデータ科学者まですべての人がアクセス可能な方法でそのスケーラビリティとスピードを活用できるようになります。,
Spark RDD
Apache Sparkの中心にあるのは、Resilient Distributed Dataset(RDD)という概念です。 Rdd上の操作は、クラスター全体で分割して並列バッチプロセスで実行することもでき、高速でスケーラブルな並列処理につながります。
Rddは、単純なテキストファイル、SQLデータベース、NoSQLストア(CassandraやMongoDBなど)、Amazon S3バケットなどから作成できます。, Spark Core APIの多くはこのRDD概念に基づいて構築されており、従来のmapおよびreduce機能を有効にするだけでなく、データセットの結合、フィルタリング、サンプリ
Sparkは、Sparkアプリケーションをタスクに分割し、それらを作業を行う多くのexecutorプロセスに分散するdriver coreプロセスを組み合わせることによって、分散 これらのevにスケールで上下してアプリケーションに必要なのです。,
Spark SQL
もともとSharkとして知られていたSpark SQLは、Apache Sparkプロジェクトにとってますます重要になってきました。 その最も一般的に使用日時に、開発者向けのアプリケーションを作成す. Spark SQLは、RとPython(Pandas)から借用したdataframeアプローチを使用して、構造化データの処理に焦点を当てています。 しかし、名前が示すように、Spark SQLはデータを照会するためのSQL2003準拠のインターフェイスも提供しており、Apache Sparkのパワーをアナリストだけでなく開発者にも,
標準SQLサポートと並んで、Spark SQLはJSON、HDFS、Apache Hive、JDBC、Apache ORC、Apache Parquetなどの他のデータストアとの読み書きのための標準インターフェイスを提供します。 Apache Cassandra、MongoDB、Apache HBase、その他多くの人気ストアは、Sparkパッケージエコシステムから別のコネクタを引き込むことによって使用できます。,
データフレームからいくつかの列を選択することは、次の行と同じくらい簡単です。
citiesDF.select("name”, "pop”)
SQLインターフェイスを使用して、データフレームを一時テーブルとして登録し、その後、SQLクエリを発行することができます。
citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)
舞台裏では、Apache SparkはCatalystと呼ばれるクエリオプティマイザを使用して、データとクエリを調べます。クラスター全体で必要な計算を実行する、データの局所性と計算のための効率的なクエリプランを作成します。 Apache Spark2では。,x時代、dataframesとdatasetsのSpark SQLインターフェイス(本質的には、コンパイル時に正しさをチェックし、実行時にさらなるメモリと計算最optimを利用できる型付きdataframe)は、開発に推奨されるアプローチです。 RDDインターフェイスは引き続き使用可能ですが、Spark SQLパラダイム内でニーズに対処できない場合にのみ推奨されます。
Spark2.4では、配列やその他の高次データ型を直接操作するための組み込み高次関数のセットが導入されました。,
Spark MLlib
Apache Sparkは、機械学習とグラフ解析手法を大規模なデータに適用するためのライブラリもバンドルしています。 Spark MLlibには、機械学習パイプラインを作成するためのフレームワークが含まれており、構造化データセットに対して特徴抽出、選択、変換を簡単に実装できます。 MLlibには、k-meansクラスタリングやランダムフォレストなどのクラスタリングおよび分類アルゴリズムの分散実装が付属しており、カスタムパイプライン, モデルは、RまたはPythonを使用してApache Sparkのデータサイエンティストによって訓練され、MLlibを使用して保存され、本番用にJavaベースまたはScalaベースのパイプラインにインポートされます。
Spark MLlibは、分類、回帰、クラスタリング、フィルタリングなどの基本的な機械学習をカバーしていますが、ディープニューラルネットワークのモデリングおよびトレーニングのための機能は含まれていません(詳細については、InfoWorldのSpark MLlibレビューを参照してください)。 しかし、深い学習パイプラインが進行中です。,
Spark GraphX
Spark GraphXには、GoogleのPageRankの実装を含むグラフ構造を処理するための分散アルゴリズムの選択が付属しています。 これらのアルゴリズムは、Spark CoreのRDDアプローチを使用してデータをモデリングします。GraphFramesパッケージを使用すると、グラフクエリにCatalystオプティマイザを利用
Spark Streaming
Spark Streamingは、リアルタイムまたはほぼリアルタイムの処理を必要とする環境で牽引力を得るのに役立ったApache Sparkの初期の追加でした。, 以前は、Apache Hadoopの世界でのバッチ処理とストリーム処理は別々のものでした。 バッチ処理のニーズに合わせてMapReduceコードを記述し、リアルタイムストリーミングの要件にはApache Stormのようなものを使用します。 これは明らかに、全く異なるフレームワークに基づいており、異なるリソースを必要とし、それらを実行するために異なる運用上の懸念を伴うにもかかわらず、,
Spark Streamingは、apache Sparkのバッチ処理の概念をストリーミングに拡張し、ストリームを一連のマイクロバッチに分割し、Apache Spark APIを使用して操作できるようにしました。 このように、バッチ操作とストリーミング操作のコードは(ほとんど)同じコードを共有し、同じフレームワーク上で実行することができるため、開発者とオペレータ 誰もが勝つ。,
Spark Streamingアプローチに対する批判は、受信データに対する低レイテンシ応答が必要なシナリオでは、マイクロバッチは、Apache Storm、Apache Flink、Apache Apexなどの他のストリーミング可能なフレームワークのパフォーマンスと一致できない可能性があるということです。
構造化ストリーミング
構造化ストリーミング(Spark2で追加されました。x)は、Spark SQLがSparkコアApiに対してどのようなものであったかをSpark Streamingすることです。, の構造はストリーミングは、高いレベルAPIでは基本的に可能な開発者を無限のストリーミングdataframes、データセット また、ユーザーが以前のフレームワークで苦労したいくつかの非常に現実的な痛みのポイント、特にイベント時の集計とメッセージの遅い配信を扱うことに関 構造化ストリーム上のすべてのクエリは、Catalystクエリオプティマイザを介して実行され、対話型の方法でも実行できるため、ユーザーはライブストリーミングデー,
構造化ストリーミングにも依存スパークストリーミングのmicrobatchingスキームの取扱いをストリーミングデータです。 しかし、Spark2.3では、Apache Sparkチームは構造化ストリーミングに低レイテンシの連続処理モードを追加し、1msのレイテンシで応答を処理できるようにしました。 Spark2.4以降では、連続処理はまだ実験的であると考えられています。 を構造化ストリーミングするためのスパークSQLエンジンは、継続的なストリーミングのみをサポートの限定セットのクエリ.,
構造化ストリーミングは、プラットフォームを使用したストリーミングアプリケーションの将来であるため、新しいストリーミングアプリケーションを構築 従来のSpark Streaming Apiは引き続きサポートされますが、新しい方法によりストリーミングコードの記述と維持がより耐えられるようになるため、プロジェクトはStructured Streaming
深層学習パイプライン
Apache Sparkは深層学習パイプラインを介した深層学習をサポートしています。, MLlibの既存のパイプライン構造を使用すると、低レベルの深層学習ライブラリを呼び出してわずか数行のコードで分類子を構築したり、カスタムTensorFlowグラフやKerasモデルを受信データに適用したりすることができます。 これらのグラフとモデルは、カスタムSpark SQL Udf(ユーザー定義関数)として登録することもできるため、深層学習モデルをSQL文の一部としてデータに適用できます。
Apache Sparkチュートリアル
Apache Sparkに飛び込んで学ぶ準備はできましたか?, Evan Heitman’S A Neanderthal’S Guide to Apache Spark in Pythonを強くお勧めします。これはApache Sparkが比較的簡単な言葉でどのように機能するかの基本を説明するだけでなく、フレームワークを利用したシンプルなPythonアプリケーションを作成するプロセスをガイドします。 この記事は、データサイエンスがビッグデータと機械学習がますます重要になっている世界であるため、データサイエンティストの視点から書かれてい,
プラットフォームが何ができるのか、そしてどのようにそれを行うのかを知るためにApache Sparkの例を探しているなら、Spark By{Examples}をチェックしてください。 ここには、Sparkプログラミングのビルディングブロックを構成するいくつかの基本的なタスクのためのサンプルコードがたくさんあるので、Apache Sparkが作ら
もっと深く行く必要がありますか? DZoneには、多くのApache Sparkトピックに関する有用なチュートリアルのスルーで構成されている完全なApache Sparkコレクションとして控えめに参照するものがあります。 幸せな学習!