Introduction to Apache Spark with Examples and Use Cases
Sparkを初めて聞いたのは、Sparkが書かれている言語であるScalaに興味を持つようになった2013年後半のことでした。 いくつかの時間後、私はタイタニック号の生存を予測しようとしている楽しいデータサイエンスプロジェク これは、Sparkの概念とプログラミングをさらに導入するための素晴らしい方法であることが判明しました。 私は非常に始めるための場所を探している任意の意欲的なSpark開発者のためにそれをお勧めします。
今日、SparkはAmazon、eBay、Yahoo! 多くの組織では、数千のノードを持つクラスターでSparkを実行しています。 Spark FAQによると、既知の最大のクラスターには8000以上のノードがあります。 確かに、Sparkは注意を払い、学ぶ価値のある技術です。
この記事では、使用例と例を含むSparkの紹介を提供します。 これには、Apache Spark webサイトの情報と、Learning Spark-Lightning-Fast Big Data Analysisという本が含まれています。Apache Sparkとは何ですか? はじめに
Sparkは”lightning fast cluster computing”として宣伝されているApacheプロジェクトです。 これは、盛んなオープンソースコミュニティを持っており、現時点で最も活発なApacheプロジェクトです。
Sparkは、より速く、より一般的なデータ処理プラットフォームを提供します。 Sparkを使用すると、Hadoopよりもメモリ内で最大100倍高速、またはディスク上で最大10倍高速のプログラムを実行できます。 昨年、Sparkはhadoopを引き継ぎ、100TBのDaytona GraySort contestを10分の1のマシンで3倍速く完了し、ペタバイトをソートするための最速のオープンソースエンジンとなりました。Sparkはまた、80を超える高レベルの演算子を自由に使用できるため、コードをより迅速に記述することも可能にします。 この点を明らかにするため、そういうものが”こんにちは。”BigDataの:単語数の例。 MapReduce用にJavaで書かれたコードは約50行ありますが、Spark(およびScala)では次のように簡単に実行できます。
sparkContext.textFile("hdfs://...") .flatMap(line => line.split(" ")) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile("hdfs://...")
Apache Sparkの使用方法を学ぶときのもう一つの重要な側面は、それがすぐに提供する対話型シェル(REPL)です。 REPLを使用すると、最初にジョブ全体をコード化して実行することなく、コードの各行の結果をテストできます。 したがって、作業コードへのパスははるかに短く、アドホックなデータ分析が可能になります。現在、Scala、Java、PythonのApiを提供しており、途中で他の言語(Rなど)をサポートしています。
Sparkコアは、同じアプリケーションでシームレスに使 これらのライブラリには現在、SparkSQL、Spark Streaming、MLlib(機械学習用)、およびGraphXが含まれています。 追加のSparkライブラリと拡張機能も現在開発中です。Sparkコア
Sparkコアは、大規模な並列および分散データ処理のためのベースエンジンです。 それは責任があります:
- メモリ管理と障害回復
- クラスター上のスケジュール、配布、監視ジョブ
- ストレージシステムとの対話
Sparkは、RDD(Resilient Distributed Dataset)の概念を導入しています。 RDDには任意のタイプのオブジェクトを含めることができ、外部データセットをロードするか、ドライバプログラムからコレクションを配布することによ
RDDsは次の2種類の操作をサポートしています。
:
- 変換は、RDDに対して実行され、結果を含む新しいRDDを生成する操作(map、filter、join、unionなど)です。
- アクションは、RDDで計算を実行した後に値を返す操作(reduce、count、firstなど)です。Sparkの変換は「遅延」であり、結果をすぐに計算しないことを意味します。 代わりに、実行される操作と、操作が実行されるデータセット(ファイルなど)を”記憶”するだけです。 変換は、アクションが呼び出され、結果がドライバプログラムに返されたときにのみ実際に計算されます。 この設計は火花がより効率的に動くことを可能にする。 たとえば、大きなファイルがさまざまな方法で変換され、最初のアクションに渡された場合、Sparkはファイル全体で作業を行うのではなく、最初の行のデフォルトでは、変換された各RDDは、アクションを実行するたびに再計算される可能性があります。 ただし、persistまたはcacheメソッドを使用してRDDをメモリに永続化することもできます。SparkSQLは、SQLまたはHiveクエリ言語を介してデータをクエリすることをサポートするSparkコンポーネントです。 これは、(MapReduceの代わりに)Sparkの上で実行するためのApache Hiveポートとして始まり、現在はSparkスタックと統合されています。 さまざまなデータソースのサポートを提供することに加えて、それは非常に強力なツールになり、コード変換とSQLクエリを織ることが可能になります。 以下は、Hive互換クエリの例です。
// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)sqlContext.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING)")sqlContext.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")// Queries are expressed in HiveQLsqlContext.sql("FROM src SELECT key, value").collect().foreach(println)
Spark Streaming
Spark Streamingは、本番webサーバーのログファイル(Apache FlumeやHDFS/S3など)、Twitterなどのソーシャルメデ 内部では、Spark Streamingは入力データストリームを受信し、データをバッチに分割します。 次に、それらはSparkエンジンによって処理され、以下に示すように、結果の最終ストリームをバッチで生成します。Spark Streaming APIはSparkコアのAPIと密接に一致しているため、プログラマはバッチデータとストリーミングデータの両方の世界で作業することが容易になります。
MLlib
MLlibは、分類、回帰、クラスタリング、協調フィルタリングなどのためにクラスター上でスケールアウトするように設計されたさまざまなアルゴリズ これらのアルゴリズムの中には、通常の最小二乗法を使用した線形回帰やk-meansクラスタリング(および途中での詳細)など、ストリーミングデータでも機能 Apache Mahout(Hadoop用の機械学習ライブラリ)はすでにMapReduceから離れており、Spark MLlibに力を合わせています。h2>
GraphXは、グラフを操作し、グラフ並列操作を実行するためのライブラリです。 それはETL、探索的な分析および反復的なグラフ計算に均一用具を提供する。 グラフ操作のための組み込み操作とは別に、PageRankなどの一般的なグラフアルゴリズムのライブラリを提供します。
Apache Sparkの使用方法:イベント検出ユースケース
「Apache Sparkとは何か」という質問に答えました。「どのような問題や課題を最も効果的に使用できるかを考えてみましょう。私は最近、Twitterのストリームを分析して地震を検出する実験についての記事に出くわしました。 興味深いことに、この技術は、気象庁よりも早く日本の地震を知らせる可能性が高いことが示されました。 彼らの記事では異なる技術を使用していましたが、Sparkを単純化されたコードスニペットで、そしてglueコードなしでどのように使用できるかを見るのは素晴らまず、「地震」や「揺れ」のように関連性があると思われるツイートをフィルタリングする必要があります。
まず、「地震」や「揺れ」のように関連性があると 次のように、その目的のためにSpark Streamingを簡単に使用できます。
TwitterUtils.createStream(...) .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))
次に、現在の地震発生を参照しているように見えるかどうかを判断するために、ツイートに対していくつかの意味分析を実行する必要があります。 “地震!”のようなつぶやき”や”今揺れている”などは肯定的な一致を考慮するのに対し、”地震会議に出席する”や”昨日の地震は怖かった”などのツイートはそうではありません。 著者らはこの目的のためにサポートベクターマシン(SVM)を使用した。 私たちはここで同じことをしますが、ストリーミングバージョンを試すこともできます。 MLlibの結果のコード例は次のようになります。
// We would prepare some earthquake tweet data and load it in LIBSVM format.val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt")// Split data into training (60%) and test (40%).val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L)val training = splits(0).cache()val test = splits(1)// Run training algorithm to build the modelval numIterations = 100val model = SVMWithSGD.train(training, numIterations)// Clear the default threshold.model.clearThreshold()// Compute raw scores on the test set. val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label)}// Get evaluation metrics.val metrics = new BinaryClassificationMetrics(scoreAndLabels)val auROC = metrics.areaUnderROC()println("Area under ROC = " + auROC)
モデルの予測率に満足すれば、次の段階に進み、地震を発見するたびに反応することがで 1つを検出するには、定義された時間枠内で特定の数(つまり密度)の肯定的なツイートが必要です(記事で説明されているように)。 なお、Twitter位置情報サービスを有効にしたツイートについては、地震の位置情報も抽出します。 この知識を活用して、SparkSQLを使用して、既存のHiveテーブル(地震通知の受信に関心のあるユーザーを格納する)を照会して、電子メールアドレスを取得し、パーソナライズされた警告メールを送信することができます。
// sc is an existing SparkContext.val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc)// sendEmail is a custom functionsqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail)
その他のApache Sparkユースケース
Sparkの潜在的なユースケースは、もちろん地震の検出をはるかに超えています。
ここでは簡単です(しかし、確かにどこにも網羅的な近くにありません! ゲーム業界では、リアルタイムのゲーム内イベントの潜在的な火災からパターンを処理して発見し、すぐに対応できることは、プレイヤーの保持、ターゲット広告、複雑さレベルの自動調整などの目的のために、有利なビジネスをもたらす可能性のある機能です。
電子商取引業界では、リアルタイムの取引情報をk-meansのようなストリーミングクラスタリングアルゴリズムやALSのような協調フィルタリングに渡すことができます。 結果は、顧客のコメントや製品レビューなどの他の非構造化データソースと組み合わせて、新しい傾向に合わせて常に改善し、推奨事項を適応させるために
金融業界やセキュリティ業界では、Spark stackは詐欺や侵入検知システムやリスクベースの認証に適用される可能性があります。 膨大な量のアーカイブログを収集し、データ侵害や侵害されたアカウントに関する情報(たとえば、https://haveibeenpwned.com/を参照)やip地理位置情報や時間などの接
結論
要約すると、Sparkは、機械学習やグラフアルゴリズムなどの関連する複雑な機能をシームレスに統合し、構造化されたデータと非構造化されたデータの両方を大量のリアルタイムまたはアーカイブされたデータを処理するという困難で計算集約的なタスクを簡素化するのに役立ちます。 Sparkはビッグデータ処理を大衆にもたらします。 それをチェックアウト!
Leave a Reply