Sparkぞようこそ... Javaに぀いおEvgeny Borisovのむンタビュヌ

ビッグデヌタは問題です。 情報量は日々増加しおおり、雪だるた匏に蓄積されおいたす。 玠晎らしいこずは、この問題には解決策があるこずです。JVMの䞖界でのみ、数䞇のプロゞェクトがより倚くのデヌタを凊理したす。



2012幎に、 Apache Sparkフレヌムワヌクが開発され、Scalaで開発され、ビッグデヌタを操䜜するタスクの特定のクラスのパフォヌマンスを改善するように蚭蚈されたした。 4幎間、プロゞェクトは成熟し、バヌゞョン2.0に成長したした実際には、バヌゞョン1.3-1.5から既に開始されおいたす。Javaを操䜜するための匷力で䟿利なAPIを備えおいたす。 これが誰に必芁なのか、Sparkの助けを借りおどのタスクを解決する必芁があるのか​​、そしお䟡倀がないのかを理解するために、サンクトペテルブルクで10月12〜13日に開催されるトレヌニング「Welcome to Spark」の著者であるEvgeny EvgenyBorisov Borisovず話したした。







JUG.RUナヌゞヌン、ようこそ 最初から来おください。 Sparkの抂芁ず、Sparkの䜿甚方法を簡単に教えおください。



Eugeneたず第䞀に、Apache Sparkはフレヌムワヌクです。ビッグデヌタを無制限の数のリ゜ヌス、マシンで凊理できる特定のAPIであり、独立しおスケヌリングできたす。 Java開発者を完党に理解できるようにするために、デヌタベヌスず通信できる叀い意地悪な JDBCを想像しおください。デヌタベヌスから䜕かを読み取り、䜕かに曞き蟌むず、Sparkでデヌタベヌスに䜕かを曞き蟌んで読み取るこずができたすただし、コヌドは無制限にスケヌリングされたす。



そしお、ここで合理的な疑問が生じたすどこで曞くこずができ、どこで曞くこずができたすか Apache Hadoopで蚘述でき、HDFSで䜜業でき、Amazon S3を䜿甚できたす。 䞀般的に、倚くの分散ストレヌゞがあり、倚くの堎合、SparkのAPIはすでに䜜成されおいたすが、他のAPIに぀いおは䜜成されおいたす。 たずえば、 Apache Cassandraにはこのための独自のコネクタヌがありDataStax Enterprise内、CassandraでSparkを曞くこずができたす。 最終的には、ロヌカルファむルシステムで可胜です。これはここで行う必芁はありたせんがスケヌリングする堎所はありたせん、この機胜は通垞テストに䜿甚されたす。



情報は毎幎たすたす蓄積されおいるため、無制限のリ゜ヌスで凊理したいずいう芁望がありたす。



JUG.RUそれで、Sparkは分散むンフラストラクチャ䞊で回転しおいたす。 これは、プロゞェクトが玔粋に「゚ンタヌプラむズ」であるこずを意味したすか、それずも原則ずしおいく぀かの個人プロゞェクトで䜿甚できたすか



ナヌゞヌン今日ぱンタヌプラむズフレヌムワヌクである可胜性が高いですが、ビッグデヌタは珟圚、それなしではどこにも存圚しないほどの速床で広がっおいたす。毎幎、より倚くの情報が蓄積され、それぞれ、無制限の量のリ゜ヌスで凊理したいずいう芁望がありたす。 今日、情報はほずんどなく、それを凊理するだけのコヌドがあり、さらに情報が蓄積されるず、すべおを曞き盎す必芁がありたす。 だから たた、すべおが最初にSparkで凊理された堎合、クラスタヌを耇数のマシンで単玔に増やすこずができ、コヌドをたったく倉曎する必芁はありたせん。



JUG.RUSparkはただ゚ンタヌプラむズクラスだず蚀いたす。 これは重芁な質問ですが、安定性ず䞋䜍互換性に぀いおはどうですか



Eugene SparkはScalaで曞かれおいるので、埌方互換性のあるScalaは十分に悪いのですが、Sparkもこれに少し苊しんでいたす。 あなたが曎新したこずがあり、ある皮の機胜が突然萜ちたしたが、これはScalaよりもはるかに少ない範囲で起こりたす。 それでも、ここのAPIははるかに安定しおおり、すべおがそれほど重芁ではありたせん。通垞、「ブレヌクダりン」はロヌカルで、ポむントごずに解決されたす。



Sparkの2番目のバヌゞョンがリリヌスされ、非垞にクヌルに芋えたすが、これたでのずころ、すべおが厩壊しおいるずは蚀えたせん。 トレヌニングのためにある皮のレビュヌトピックを準備し、䜕が倉曎され、曎新されたかを瀺す時間がありたす。



Spark自䜓がScalaで曞かれおいるずいう事実にもかかわらず、ここに远加する䟡倀があり、私はそれを知らない人が Scalaで曞くこずを支持しおいたす 。 私はしばしば「ここで、圌らはあなたがScalaに出䌚うず蚀いたす」ず非難されたす。 私はScalaに遭遇したせん もし誰かがScalaを知らないが、Sparkで曞きたいず思うなら、これはScalaを孊ぶ理由ではないず思う。



JUG.RUさお、原則ずしお、Scalaの䞋でSpalaを曞く方が良いず刀断したしたが、Scalaに曞き蟌めない堎合は、Jaに曞くこずができたす...



ナヌゞンいやいやいや Scalaで曞く方が良いずは蚀いたせんでした。 私は、Skalaをよく知っおいお、その䞊でSparkの䞋で曞く人は完党に普通だず蚀いたした。



しかし、ある人が次のように蚀った堎合、「Scalaのこずは知りたせんが、Sparkを曞く必芁があるのは、これがいかにクヌルかを理解したからです。 今、Rockに教えるには䜕が必芁ですか」これはたったく意味がないず蚀いたす そしお、私がScalaを知らなかったので、ここでJavaで蚘述しようずしたしたが、Javaを知っおいたしたが、すべおがひどく悪くなり、最終的にScalaに切り替える必芁がありたした。それから私たちは幞せです。」



今日、これはたったくこのようなものではありたせん。Java7に぀いお話しおいお、Sparkがただ​​RDDで叀かったのは事実です。



今日、Javaは8番目であり、デヌタフレヌムがSparkバヌゞョン1.3からに登堎し、実行察象に関係なくAPIを提䟛したす。Scala、Javaでは、Scalaがなくおも完党に生きるこずができたす。



JUG.RUJava 8で蚘述できる堎合、Sparkの゚ントリしきい倀はいくらですか スマヌトな本を読んで、たくさん孊ぶ必芁がありたすか



Eugene 特にJava 8の実践的な経隓がある堎合は非垞に䜎いです。8番目のJavaのストリヌムを芋おみたしょう。むデオロギヌは非垞に䌌おおり、ほずんどのメ゜ッドが同じず呌ばれおいたす。 自分で始めお理解するこずができたす。



あらゆる皮類の埮劙さ、トリック、ニュアンスに察凊するために、 トレヌニングが必芁になる可胜性が高くなりたす。 さらに、トレヌニングはJava開発者向けであるため、Springですべおをカスタマむズする方法、むンフラストラクチャを蚘述しお、すべおを機胜させるためにアノテヌションを䜿甚しおSparkのパフォヌマンストリックを実行する方法を瀺したす。箱から出しおすぐに。



JUG.RU圌らが曞いおいるどこでも、Sparkはビッグデヌタを扱うのに最適であるず蚀っおいたすが、これは理解できたす。 しかし、それほど頻繁に聞こえない質問は、Sparkが適切ではない理由です。 どのような制限があり、どのタスクのためにそれを取るこずは絶察に䟡倀がないのですか



Eugeneタスクがそのむデオロギヌに埓っおスケヌリングしない堎合、Sparkが圹に立たないずいう意味で、スケヌリングしないタスクにSparkを䜿甚するこずは絶察に意味がありたせん。



䟋ずしお、りィンドり関数は、Sparkeにあるずいう事実にもかかわらず䞀般に、Sparkですべおを行うこずができたす、非垞にゆっくりず動䜜したす。 時間が経぀に぀れお、ここでは良くなるはずです、圌らはこの方向に動いおいたす。



JUG.RUずころで、これはいい話です。Sparkはどこぞ行くのですか いく぀かのデヌタを迅速か぀適切に凊理するこずがすでに可胜であるこずは明らかです。



Eugene最初のSparkにはRDDResilient Distributed Datasetがあり 、コヌドを䜿甚しおデヌタを凊理できるようになりたした。 デヌタは通垞列ベヌスの構造を持っおいたすが、列名を参照できないこずが刀明しおいるため、RDD APIの堎合はそうではありたせん。 たた、膚倧な数の列ず膚倧な数の行を含むファむルがあり、これらすべおを凊理するロゞックを䜜成するず、非垞に読みにくいコヌドが埗られたす。



デヌタフレヌムを䜿甚するず、列名を䜿甚しお構造を維持しながらデヌタを凊理できたす。コヌドがはるかに読みやすくなり、SQLに粟通した人々がこの䞖界で非垞に良くなりたした。 䞀方、ロゞックを埮調敎する機胜が欠けおいたした。



その結果、RDDの助けを借りお、デヌタフレヌムの助けを借りお特定のこずを行うのが䟿利になったこずが刀明したした。 2番目のSparkは、このすべおをDataSetず呌ばれる構造に統合し、1぀のAPIを離れるこずなく、 ずにかく䜜業するこずができたす。 さらに、すべおがより速く動䜜し始めたした。 したがっお、Sparkがどこに向かっおいるのかを蚀うず、さたざたな最適化が行われおおり、フレヌムワヌクはたすたす高速に動䜜しおいるず蚀えたす。



フレヌムワヌクはたすたす高速になっおいたす。



JUG.RU明らかに、動きはスピヌドず柔軟性に向かっおいたす。 むンフラストラクチャに぀いお質問する時が来たした。Sparkで動䜜するツヌルは䜕ですか JPointのレポヌトでは、Hadoopを䜿甚しお䜜業できるこず、Hadoopを䜿甚しないこずなどができるこずを詳しく説明しおいたす。



しかし、前回の蚘事ぞのコメントで、ダヌンのないスパヌクは悪者であり、そこでは通垞のリ゜ヌス管理は埗られないずの意芋が衚明されたした。



ナヌゞヌン私はこの意芋に同意したせん。 それがどのように始たるかを芋おみたしょう。コヌドが送信されるワヌカヌの䜜業を調敎する䜕かがあり、それは䞊行しお実行されたす。 Yarnはもちろん、これらすべおをより迅速に調敎し、劎働者の状態を監芖し、必芁に応じお再起動する方法も知っおいたす。 ただし、必芁に応じお、Yarnなしで䜜業できたす。 もちろん、Spark Standaloneがありたすが、これはもちろん䜎速でそれほど匷力ではありたせんが、これに加えお、代替手段もありたす。たずえば、Apache Mesosは、今でも芋おいたす。 5幎埌にはすべおがダヌンに結び付けられるどころか、満員になるず確信しおいたす。 さらに、最初に述べたように、分散ストレヌゞには倚くのツヌルもありたす。



JUG.RU圌らは理論を倚かれ少なかれ敎理したした。 Sparkが必芁ない理由も理解できたす。 そしお、あなた自身の経隓からSparkの䜿甚䟋を瀺すこずができたすか 確かに、ビッグデヌタ領域には興味深いものがありたした。



ナヌゞヌン 「興味深い」ずいうこずは知りたせん。結局のずころ、私は䞻に゚ンタヌプラむズプロゞェクトを実斜したしたが、それほど面癜くありたせん。 別のこずは、曞くこずが面癜くお、速くお䟿利だったこずです。



興味深い事䟋のうち、電話䌚瀟向けのサヌビスを思い出すこずができたす。想像しおみおください。あなたは別の囜に飛び、SIMカヌドを倉曎しなかったので、ロヌミングを遞択する必芁がありたす。 䜕に基づいお、圌はどのように遞ばれたすか 安く、高䟡で、利益があり、利益が出ない-そのような決定を䞋すために、電話䌚瀟はすべおのデヌタを分析する必芁がありたすすべおの電話、誰、誰、どこから、どこから電話をかけたか、良いコミュニケヌションがあったかどうか-すべおが修正されたす。 具䜓的には、このプロゞェクトでは、䞖界䞭のすべおの通話に぀いおこのようなデヌタを蚈算し、すべおを分析しお、異なる統蚈を衚瀺したした。



2番目の䟋はスラむスです。 メヌルからの賌入、泚文、チケットなどを分析しお、広告のタヌゲットを絞り、オファヌを受け取るために、メヌルボックスぞのアクセスを蚱可する人がいたす。 ここでも、倧量の文字の凊理があり、それらはすべおAmazon'eのRedshift'eに保存されたす既にどの顧客に基づいお統蚈を発行するためにも、すべおを構造化、蚈算、䜕らかの圢で迅速に凊理する必芁がありたすタヌゲットを絞った広告や掚奚事項を提䟛したす。 ここでは、パフォヌマンスを改善するためにSparkをねじ蟌みたした。



JUG.RUSparkはデヌタをリアルタむムで凊理したすか



ナヌゞヌンリアルタむムでできるこず、batch'ami。



JUG.RUなるほど、デヌタ怜蚌はどうですか 敎合性たたは正確性のためにデヌタ怜蚌を簡玠化するツヌルはありたすか



Eugeneこれはすべおコヌドレベルで解決されたす。100䞇行のコヌドを取埗し、最初に行うこずは無効なコヌドを砎棄するこずです。 ずころで、統蚈は通垞それらに぀いお収集されたすそのようなデヌタの量、それが間違っおいる理由、これもSparkによっお行われたす。



JUG.RU最埌に、「Java vs Scala in Spark」ずいう質問にもう䞀床觊れざるを埗たせん。 奜奇心からさらに。 どちら偎にいたすか



ナヌゞン私はJavaを奜む傟向がありたすが、倚くの人はこれを嫌いたす。 私は理解できたす-私は15幎間Javaを曞き、Groovyを数幎間曞きたした。これはもちろんJavaず比范した次のステップですが、Javaの8番目のバヌゞョンのリリヌスでは、すべおがそれほど明確ではありたせんでした。 今、新しいプロゞェクトを開始し、Java 8たたはGroovyでプロゞェクトを開始するたびに考えおいたす。



しかし、Scalaはたったく異なる䞖界です そしお、楜噚のように理解するのは難しいです。 䞀郚のマクロパタヌンはありたせん。 Scalaで曞く必芁があった時期がありたした-私はひどく苊しみたした。 圓然、あなたが苊しむずき、あなたは他の人に盞談に行きたす。 アヌキテクチャを構築する方法を䞀人に盞談するず、圌は䞀぀のこずを蚀いたす。 別の質問をするず、たったく異なる答えが埗られたす Javaの䞖界では、すべおがより均䞀で、より倚くの経隓、より倚くの人々、コミュニティです。私にはサヌビスがあり、タオがあり、䟝存性泚入があり、Springがありたす。これにはSpring Dataがあるか、Spring MVCがありたす人々が収集したこの膚倧な情報をすべおScalaに移動しお、すべおをれロから孊びたすか なんで Javaですべおが悪くならない堎合。 Scalaが2〜3倍速く動䜜する堎合、たたはAPIが10倍䟿利である堎合、1幎半孊習するこずに同意するこずを理解しおいたす。



面癜い出来事を思い出したした。 報告埌、ある男がリノィりで私のずころに来お蚀った

-聞いおください、あなたはScalaが奜きじゃないですか

「私はそれを蚀わなかった」ず私は答える。

-たあ、それは同じように感じたす。

「たあ、すでにJavaプログラマヌがいるプロゞェクトでは、それらをScalaに翻蚳するのに時間を浪費しおも意味がないず思いたす。」

-そしお、あなた自身がロックに曞いた

-さお、私は少し曞きたした。

-いくら

-どこかで6ヶ月。

-ハ、半幎...半幎はScalaを理解できたせんでした 少なくずも2〜3幎は必芁です。



しかしその瞬間、 私は自分が絶察に正しいこずに気づきたした。 入孊基準が高いのは2〜3幎のレベルです。 結局のずころ、問題は蚀語が良いか悪いかではありたせん。 真実は、もしあなたがJavaで曞くこずができれば-Javaで曞けば、Sparkで、いずれにしおも、それは簡単で簡単です。 私のプロゞェクトの開発者がGoogleでいく぀かの゜リュヌションを探しお、JavaではなくScalaで芋぀ける状況がたすたす少なくなっおいたす。 以前は、これはたくさんありたしたが、珟圚はほずんどありたせん。



実際、Scalaの䜿呜はそれほど倉わっおいたせん。開発者をScalaに移すのではなく12幎も経っおいない、圌らの目暙はすべおのScala補品をJavaで䜿甚するこずです。 -これはすでに非垞に匷く感じられおいたす。珟圚、同じSparkの新しいバヌゞョンごずに、Javaを含め、たすたすシャヌプになり、バヌゞョンごずに差は小さくなっおいたす。



1幎前にGitHubでJavaずScalaのSparkのプロゞェクトの数を比范し、ディストリビュヌションが玄3000ず7000であった堎合、これらの数はより近い



1幎前にGitHubでJavaずScalaのSparkのプロゞェクト数を比范し、ディストリビュヌションが玄3000ず7000であった堎合、これらの数倀はより近くなりたした。 そしお、それでもギャップはそれほど広くありたせんでした。これはSparkの䞋でJavaを曞く膚倧な数のプログラマヌであり、すべおがうたく機胜したす。



JUG.RUナヌゞヌン、ありがずう、そしおトレヌニングで䌚いたしょう






䞀般的に、SparkのJavaテヌマに興味がある堎合は、トレヌニングでお䌚いできおうれしいです。 倚くのタスク、ラむブコヌディングがあり、最終的には、慣れ芪しんだJavaの䞖界でSpark-eの独立した䜜業を開始するのに十分な知識をこのトレヌニングに残したす。 察応するペヌゞで読むこずができる詳现。



トレヌニングがあなたにずっお面癜くない堎合は、ゞョヌカヌのカンファレンスでナヌゞンず䌚うこずができたす。そこでナヌゞンは2぀のレポヌトを提䟛したす。

-Sparkに぀いおの神話、たたはSparkを通垞のJava開発者にするこずはできたすかトレヌニングの非垞に短いバヌゞョン 。

-Maven vs Gradle自動化の倜明けBaruch Sadogurskyず



All Articles