Apache Sparkの玹介

芪愛なる読者の皆さん、こんにちは



私たちは぀いにSparkフレヌムワヌクに関する本を翻蚳し始めたした







本日、Sparkの機胜に関するレビュヌ蚘事の翻蚳に泚目したした。







Sparkに぀いお最初に聞いたのは2013幎埌半、Scalaに興味を持぀ようになったずきです-Sparkが曞かれおいるのはこの蚀語です。 少し埌に、興味のために、タむタニックの乗客の生存を予枬するこずに専念するデヌタサむ゚ンスの分野からプロゞェクトの開発に着手したした。 Sparkプログラミングずその抂念を理解するのに最適な方法であるこずがわかりたした。 すべおの初心者Spark開発者に圌を知っおもらうこずを匷くお勧めしたす。



今日、SparkはAmazon、eBay、Yahooなどの倚くの䞻芁䌁業で䜿甚されおいたす。 倚くの組織は、数千のノヌドのクラスタヌでSparkを運甚しおいたす。 Spark FAQによるず、これらのクラスタヌの最倧のものには8,000以䞊のノヌドがありたす。 実際、Sparkは泚目に倀し、探玢する䟡倀のある技術です。







この蚘事では、Sparkの抂芁ず、䜿甚䟋ずコヌドサンプルを玹介したす。



Apache Sparkずは䜕ですか はじめに



Sparkは、「超高速クラスタヌコンピュヌティング」のツヌルずしお䜍眮付けられおいるApacheプロゞェクトです。 掻発な無料コミュニティによっお開発されたこのプロゞェクトは、珟圚、Apacheプロゞェクトの䞭で最も掻発です。



Sparkは、高速で汎甚性の高いデヌタ凊理プラットフォヌムを提䟛したす。 Hadoopず比范しお、Sparkはメモリ内のプログラムを100倍以䞊、ディスク䞊のプログラムを10倍以䞊高速化したす。



さらに、Sparkコヌドはより高速に蚘述されたす。これは、80を超える高レベルの挔算子を自由に䜿甚できるためです。 これを理解するために、BigDataの䞖界の「Hello World」アナログを芋おみたしょう。単語カりントの䟋です。 MapReduce甚にJavaで蚘述されたプログラムには玄50行のコヌドが含たれ、SparkScalaでは次のもののみが必芁です。



sparkContext.textFile("hdfs://...") .flatMap(line => line.split(" ")) .map(word => (word, 1)).reduceByKey(_ + _) .saveAsTextFile("hdfs://...")
      
      







Apache Sparkを孊習するずき、もう1぀の重芁な偎面は泚目に倀したす。既補の察話型シェルREPLを提䟛したす。 REPLを䜿甚するず、最初にタスク党䜓をプログラミングしお完了しなくおも、コヌドの各行の結果をテストできたす。 したがっお、既補のコヌドをはるかに高速に蚘述するこずができ、さらに、状況デヌタ分析が提䟛されたす。



さらに、Sparkには次の䞻芁な機胜がありたす。







Sparkコアは、同じアプリケヌション内でシヌムレスにドッキングする匷力な高レベルラむブラリのセットによっお補完されたす。 珟圚、このようなラむブラリには、SparkSQL、Spark Streaming、MLlib機械孊習甚、GraphXが含たれおいたす。これらのすべおに぀いおは、この蚘事で詳しく説明したす。 他のSparkラむブラリず拡匵機胜も開発されおいたす。







スパヌクカヌネル

Sparkコアは、倧芏暡な䞊列および分散デヌタ凊理のコア゚ンゞンです。 カヌネルは以䞋を担圓したす。







SparkはRDD 堅牢な分散デヌタセットの抂念を導入したす。これは、䞊行しお凊理できるオブゞェクトの䞍倉でフォヌルトトレラントな分散コレクションです。 RDDには、あらゆるタむプのオブゞェクトを含めるこずができたす。 RDDは、倖郚デヌタセットをロヌドするか、メむンプログラムドラむバヌプログラムからコレクションを配垃するこずによっお䜜成されたす。 RDDは2皮類の操䜜をサポヌトしおいたす。





Sparkの倉換は「遅延」モヌドで実行されたす。぀たり、結果は倉換埌すぐには蚈算されたせん。 代わりに、実行される操䜜ず、操䜜を実行するデヌタセットファむルなどを単に「蚘憶」したす。 倉換は、アクションが呌び出されたずきにのみ蚈算され、その結果がメむンプログラムに返されたす。 この蚭蚈のおかげで、Sparkのパフォヌマンスが向䞊しおいたす。 たずえば、倧きなファむルがさたざたな方法で倉換されお最初のアクションに転送された堎合、Sparkは最初の行のみを凊理しお結果を返し、この方法ではファむル党䜓を凊理したせん。



デフォルトでは、倉換された各RDDは、新しいアクションを実行するたびに再評䟡できたす。 ただし、RDDは、ストレヌゞたたはキャッシング方匏を䜿甚しおメモリに長時間保存するこずもできたす。 この堎合、Sparkは必芁な芁玠をクラスタヌ䞊に保持し、より高速に芁求できるようになりたす。



きらめき



SparkSQLは、SQLたたはHive Query Languageを䜿甚したデヌタのク゚リをサポヌトするSparkコンポヌネントです。 ラむブラリは、MapReduceの代わりにSparkの䞊で䜜業するためのApache Hiveポヌトずしお登堎し、珟圚はすでにSparkスタックず統合されおいたす。 さたざたなデヌタ゜ヌスをサポヌトするだけでなく、SQLク゚リをコヌド倉換にバむンドするこずもできたす。 非垞に匷力なツヌルであるこずがわかりたした。 以䞋は、Hive互換リク゚ストの䟋です。

 // sc –   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") //    HiveQL sqlContext.sql("FROM src SELECT key, value").collect().foreach(println)
      
      







スパヌクストリヌミング



Spark Streamingはリアルタむムのストリヌミング凊理をサポヌトしおいたす。 そのようなデヌタは、皌働䞭のWebサヌバヌのログファむルApache FlumeやHDFS / S3など、゜ヌシャルネットワヌクTwitterなどの情報、およびKafkaなどのさたざたなメッセヌゞキュヌです。 「内郚」Spark Streamingは入力デヌタストリヌムを受信し、デヌタをパケットに分割したす。 次に、これらはSpark゚ンゞンによっお凊理され、その埌、最終的なデヌタストリヌムが以䞋のようにバッチ圢匏で生成されたす。







Spark Streaming APIはSpark Core APIず完党に䞀臎するため、プログラマはバッチデヌタずストリヌミングデヌタの䞡方を簡単に操䜜できたす。



MLlib



MLlibは、分類、回垰、クラスタリング、コフィルタリングなどのためにクラスタヌ䞊で氎平にスケヌリングするように蚭蚈されたさたざたなアルゎリズムを提䟛する機械孊習ラむブラリです。 これらのアルゎリズムの䞀郚は、ストリヌミングデヌタでも機胜したす。たずえば、通垞の最小二乗法を䜿甚した線圢回垰やk-means法を䜿甚したクラスタリングリストは間もなく拡倧したす。 Apache Mahout Hadoopの機械孊習ラむブラリは既にMapReduceを離れおおり、珟圚はSpark MLlibず連携しお開発されおいたす。



Graphx



GraphXは、グラフを操䜜し、グラフで䞊列操䜜を実行するためのラむブラリです。 このラむブラリは、ETL、研究分析、グラフベヌスの反埩蚈算のための汎甚ツヌルを提䟛したす。 グラフを操䜜するための組み蟌み操䜜に加えお、PageRankなどのグラフを操䜜するための埓来のアルゎリズムのラむブラリも提䟛したす。



Apache Sparkの䜿甚方法むベント怜出の䟋



Apache Sparkが䜕であるかがわかったので、どのタスクず問題が最も効果的に解決されるかを考えおみたしょう。



最近、Twitterのフロヌを分析するこずで、地震の登録実隓に関する蚘事を芋぀けたした 。 ちなみに、この蚘事では、この方法を䜿甚するず、気象庁のレポヌトよりも迅速に地震に぀いお孊ぶこずができるこずが瀺されたした。 この蚘事で説明されおいるテクノロゞヌはSparkずは䌌おいたせんが、この䟋はSparkのコンテキストで正確に興味深いように芋えたす。぀たり、グルヌコヌドなしで単玔化されたコヌドフラグメントを操䜜する方法を瀺しおいたす。



たず、私たちに関係があるず思われるツむヌトを陀倖する必芁がありたす。たずえば、「地震」や「衝撃」に蚀及する堎合です。 これは、次のようにSpark Streamingで簡単に実行できたす。



 TwitterUtils.createStream(...) .filter(_.getText.contains("earthquake") || _.getText.contains("shaking"))
      
      







次に、ツむヌトのセマンティック分析を行っお、圌らが話すプッシュが関連しおいるかどうかを刀断する必芁がありたす。 「地震」や「今震えおいる」などのツむヌトは肯定的な結果ず芋なされ、「地震䌚議で私」たたは「昚日はひどく震えおいたした」-吊定的な結果ず芋なされたす。 この蚘事の著者は、この目的のためにサポヌトベクタヌメ゜ッドSVMを䜿甚したした。 同様に、 ストリヌミングバヌゞョンも実装したす 。 MLlibから生成されるサンプルコヌドは次のようになりたす。



 //    ,  ,      LIBSVM val data = MLUtils.loadLibSVMFile(sc, "sample_earthquate_tweets.txt") //     (60%)   (40%). val splits = data.randomSplit(Array(0.6, 0.4), seed = 11L) val training = splits(0).cache() val test = splits(1) //   ,    val numIterations = 100 val model = SVMWithSGD.train(training, numIterations) //   ,    model.clearThreshold() //       val scoreAndLabels = test.map { point => val score = model.predict(point.features) (score, point.label) } //    val metrics = new BinaryClassificationMetrics(scoreAndLabels) val auROC = metrics.areaUnderROC() println("Area under ROC = " + auROC)
      
      







このモデルの正しい予枬の割合が私たちに合っおいれば、次の段階に進むこずができたす怜出された地震に察応する。 これを行うには、䞀定の期間内に受信した䞀定の数密床の肯定的なツむヌトが必芁です蚘事を参照。 泚ツむヌトにゞオロケヌション情報が含たれおいる堎合、地震の座暙を特定できたす。 この知識があれば、SparkSQLを䜿甚しお既存のHiveテヌブル地震通知を受信したいナヌザヌに関するデヌタを保存にク゚リし、メヌルアドレスを抜出しお、パヌ゜ナラむズされたアラヌトを送信できたす。



 // sc –   SparkContext. val sqlContext = new org.apache.spark.sql.hive.HiveContext(sc) // sendEmail –   sqlContext.sql("FROM earthquake_warning_users SELECT firstName, lastName, city, email") .collect().foreach(sendEmail)
      
      







Apache Sparkの他の甚途



もちろん、Sparkの朜圚的な範囲は、地震孊だけにずどたりたせん。

以䞋は、ビッグデヌタの高速で倚様か぀倧量の凊理が必芁な、Sparkが非垞に適しおいる他の実甚的な状況の指暙぀たり、決しお網矅的ではないの遞択です。



ゲヌム業界リアルタむムで堅実なストリヌムに到着するゲヌムむベントを蚘述するパタヌンの凊理ず怜出。 その結果、プレヌダヌの保持、タヌゲットを絞った広告、難易床の自動修正などを䜿甚しお、すぐにそれらに察応し、十分なお金を皌ぐこずができたす。



eコマヌスでは、 ALSの堎合のように、リアルタむムのトランザクション情報をストリヌミングクラスタリングアルゎリズムに転送できたす。 その埌、結果を他の非構造化デヌタ゜ヌスからの情報たずえば、顧客レビュヌやレビュヌなどず組み合わせるこずができたす。 埐々に、この情報を䜿甚しお、新しい傟向を考慮しお、掚奚事項を改善できたす。



金融セクタヌやセキュリティの目的で、Sparkスタックを䜿甚しお、䞍正や䟵入を怜出したり、リスク分析に基づいた認蚌を行ったりできたす。 したがっお、膚倧な量のアヌカむブログを収集し、それらを倖郚デヌタ゜ヌス、たずえばデヌタリヌクやハッキングされたアカりント https://haveibeenpwned.com/を参照などの情報ず組み合わせるこずで、最高の結果を埗るこずができたす。接続/芁求に関する情報。たずえば、IPによる地理䜍眮情報や時間デヌタに焊点を合わせたす。



おわりに



そのため、Sparkは、構造化および非構造化の䞡方で、倧量のデヌタリアルタむムずアヌカむブの䞡方を凊理する倧きな蚈算負荷に関連する重芁なタスクを簡玠化するのに圹立ちたす。 Sparkは、機械孊習やグラフ䜜成アルゎリズムなどの耇雑な機胜のシヌムレスな統合を提䟛したす。 Sparkは、ビッグデヌタ凊理を倧衆に運びたす。 それを詊しおください-あなたはそれを埌悔したせん



All Articles