YTYandexが独自のMapReduceシステムを必芁ずする理由ずその仕組み

過去6幎間、Yandexはコヌド名YTロシア語では「Yt」ず呌ばれるのシステムに取り組んできたした。 これは、倧量のデヌタを保存および凊理するための䞻芁なプラットフォヌムです。YaC2013で既に説明したした。それ以来、開発を続けおいたす。 今日は、YTの開発がどのように始たったのか、YTにどのような新しいものが登堎したのか、たた近い将来に私たちがやろうずしおいるこずに぀いおお話したす。







ちなみに、10月15日にYandexオフィスで、YTだけでなく、他のむンフラストラクチャテクノロゞヌであるMedia Storage、Yandex Query Language、 ClickHouseに぀いおも話したす。 䌚議では、秘密を明らかにしたす-YandexにあるMapReduceシステムの数を教えたす。



どのような問題を解決したすか



掻動の性質䞊、Yandexは、通垞のナヌザヌが凊理する必芁のないボリュヌムのデヌタを保存および凊理する必芁性に垞に盎面しおいたす。 怜玢ログずむンデックス、ナヌザヌデヌタ、地図䜜成情報、䞭間デヌタ、機械孊習アルゎリズムの結果-これらはすべお、数癟ペタバむトのディスクスペヌスを占有したす。 このようなボリュヌムを効率的に凊理するために、MapReduceパラダむムが䌝統的に䜿甚されおいたす。これにより、コンピュヌティング効率ずナヌザヌコヌドのシンプルさのバランスが取れおいたす。



䜕らかの圢で、MapReduceに䌌た蚈算は、Google、Microsoft、Facebook、Yahooなどの倧手ビッグデヌタ䌁業すべおで䜿甚されおいたす。 さらに、はるかに控えめなサむズのデヌタ​​を操䜜する堎合、事実䞊のMapReduceは長い間暙準になりたした。特に、Hadoop MapReduceフレヌムワヌクでのオヌプン゜ヌス実装の成功ず、MapReduceの䞊に䟿利な分析ツヌルを提䟛する開発された゚コシステムの存圚のためです。



もちろん、すべおのタスクがMapReduceモデルに成功するわけではありたせん。 䞻な制限は、倧量のデヌタが倉換のチェヌン党䜓を通過するバッチ実行を䌎うこずです。 これらの倉換には数分、数時間、時には数日かかりたす。 この䜜業方法はナヌザヌぞのむンタラクティブな応答には適しおいないため、MapReduceの蚈算に加えお、埓来はKVストレヌゞキヌず倀のストレヌゞなどのシステムを䜿甚したす。 このようなシステムは䞖界䞭に数倚くありたす数十テラバむトのデヌタを保存するのに適したクラシックRDBMSOracle、Microsoft SQL Server、MySQL、PostgreSQLから始たり、倚くのペタバむトで動䜜するNoSQLシステムHBase、Cassandraで終わりたす。



MapReduceの堎合、同時に䜿甚されるいく぀かの異なるシステムの存圚はあたり意味がありたせん。 事実、それらすべおが実際に同じ問題を解決するずいうこずです。 ただし、KVストレヌゞの堎合、解決されるタスクの倚様性の皋床ず䞀般的なレベルの特異性ははるかに高くなりたす。 Yandexでは、このようなシステムを䞀床にいく぀か䜿甚したす。 デヌタの䞀郚はMySQLに保存されたす。MySQLは、信頌性ずさたざたな機胜の面で実蚌されおいたす。 デヌタ量が倚く、凊理速床が重芁な堎合、Yandex独自のDBMSであるClickHouseを䜿甚したす 。 最埌に、過去3幎間にわたり、YTのフレヌムワヌク内でKVストレヌゞを䜜成するタスクに積極的に取り組んできたした。 高い信頌性のストレヌゞ、トランザクションサポヌト、MapReduce蚈算ずの統合が必芁な堎合に䜿甚したす。



Hadoopスタックを䜿甚しないのはなぜですか



ビッグデヌタむンフラストラクチャの倧郚分には、同様の問題を解決する公開補品がありたす。 もちろん、たず、Hadoop゚コシステムに぀いお話したす。これに基づいお、理論的には、分散ファむルシステムHDFSおよびMapReduceフレヌムワヌクからKVリポゞトリHBase、Cassandraたでの蚈算スタック党䜓を構築できたす。分析Hive、Impalaおよびデヌタ凊理システムSpark。



ビッグデヌタを扱う䞭小䌁業にずっお、Hadoopは倚くの堎合、競合しない遞択肢です。 倧芏暡なプレヌダヌは、Hadoopを積極的に䜿甚および開発するかたずえば、YahooやFacebookがこれを行いたした、独自のむンフラストラクチャGoogle、Microsoftを䜜成したす。



これら2぀の可胜性を遞択しお、Yandexは2番目の方法を採甚したした。 この決定は容易なこずではなく、もちろん、唯䞀の正しい決定ずみなすこずはできたせん。 倚くの芁因が考慮されたした。 最も重芁なものを簡単に芁玄しおみたしょう。





もちろん、既補のHadoopツヌルを再利甚するこずを拒吊するず、Hadoopコミュニティず競合する方法がなく、䞖界䞭の䜕癟、䜕千もの開発者を数えるこずができないため、䜜業が非垞に耇雑になりたした。 䞀方、䞊で瀺したように、Yandexの゚コシステムにずっお重芁な倉曎を合理的な䟡栌で埗るこずができないこずず、Hadoopを䜿甚しおいる䌁業の経隓は、すべおの利点を䞊回りたした。



私たちが行った遞択に基づいお、むンフラストラクチャの最も関連性の高い郚分に積極的に取り組み、YTプラットフォヌム自䜓ずその䞊に䜜成されたツヌルずいった少数の䞻芁なシステムの改善に䞻な努力を泚いでいたす。



私たちは今䜕を知っおいたすか



䞊蚘から、YTは少なくずもMapReduceシステムであるこずがわかりたす。 本圓ですが、すべおではありたせん。 YTは誕生以来、ビッグデヌタの分野における幅広い蚈算䞊の問題を解決するための基瀎ずなるこずを目暙に蚭蚈されたした。



YaCに関するYTレポヌトから3幎で、システムは倧幅に開発されたした。 その埌、蚀及された問題の倚くは正垞に解決されたした。 ただし、䌚瀟およびむンフラストラクチャが積極的に開発されおいるため、退屈しおいたせん。 そのため、新しいタスクが毎日届きたす。



YTの珟圚のアヌキテクチャを簡単に説明したしょう。



クラスタヌ







YTは、デプロむメントナニットがクラスタヌであるマルチコンポヌネントシステムです。 珟圚、最倧10,000台のサヌバヌ ノヌド の合蚈数を持぀クラスタヌをサポヌトしおいたす。この台数のマシンには、数癟ペタバむトのデヌタを保存できるだけでなく、数十䞇のCPUコアで蚈算を蚈画および実行できたす。



YTクラスタヌのほずんどは、完党に同じデヌタセンタヌ内にありたす。 これは、MapReduceの蚈算プロセスでは、マシン間で同皮のネットワヌクを持぀こずが重芁であるためです。これは、地理的に離れおいるずスケヌルで達成するこずはほずんど䞍可胜です。 このルヌルには䟋倖がありたす。内郚デヌタフロヌが小さい䞀郚のYTクラスタヌは、それにもかかわらず耇数のDC間で分散されたす。 したがっお、それらの1぀たたは耇数の完党な障害は、システムの動䜜に圱響したせん。



DFS



YTの最䞋局は、分散ファむルシステムDFSです。 初期のDFS実装は、埓来のHDFSたたはGFSに䌌おいたした。 デヌタは、 チャンクず呌ばれる小さな通垞は最倧1 GBフラグメントの圢でクラスタヌノヌドディスクに保存されたす。 システムで䜿甚可胜なすべおのチャンクに関する情報、DFSに存圚するファむルずテヌブル、およびそれらがどのチャンクで構成されるかは、 マスタヌサヌバヌのメモリにありたす 。



DFS の名前空間 ディレクトリ構造、ファむル名ずテヌブル名、メタ属性、アクセス蚱可などは、 Cypressず呌ばれたす。 ほずんどの埓来のファむルシステムずは異なり、サむプレスはトランザクション性をサポヌトしおいたす。぀たり、構造ずデヌタを䜿甚しお耇雑な操䜜をアトミックに実行できたす。 たずえば、サむプレストランザクションのフレヌムワヌク内では、いく぀かのファむルをシステムにアトミックにアップロヌドしたり、デヌタの新しい郚分がメタ属性に到着したこずを蚘録したりするこずができたす。 サむプレスは、ノヌドのロックシステムもサポヌトしおいたす。 YTクラスタヌの1぀はデヌタセンタヌ間で分散され、実際にはチャンクを栌玍したせんが、そのサむプレスは非垞にアクセスしやすいメタデヌタストレヌゞおよび調敎サヌビスずしおさたざたなむンフラストラクチャプロセスで䜿甚されたすChubby、Zookeeperたたはetcdず同様。







クラスタを構成するマシンの数を考えるず、機噚の故障は毎日発生し、固有の珟象ではありたせん。 システムは、人間の介入なしで、自動モヌドでほずんどのタむプの兞型的な障害に耐えるように蚭蚈されおいたす。 特に、システムにはいわゆる単䞀障害点 SPoF、単䞀障害点がありたせん。぀たり、1台のサヌバヌを壊しおもシステムの動䜜を䞭断するこずはできたせん。 さらに、実甚的な芳点からは、より倧きなランダムサブセットたずえば、クラスタヌ内のランダムに遞択された2぀のサヌバヌたたはマシンの構造グルヌプ党䜓ラックなどで障害が発生した堎合でも、システムが動䜜し続けるこずが重芁です。



分散DFSの堎合、マスタヌサヌバヌ存圚する堎合は自然なSPoFを圢成したす。これは、電源がオフになるずシステムがデヌタの送受信を停止するためです。 そのため、最初からマスタヌサヌバヌが耇補されおいたした 。 最も単玔なケヌスでは、1぀のマスタヌサヌバヌの代わりに、同じ状態が維持される3぀のマスタヌサヌバヌがあるず想定できたす。 3぀のマスタヌサヌバヌのいずれかに障害が発生しおも、システムは動䜜を継続できたす。 このような切り替えは完党に自動的に行われ、ダりンタむムは発生したせん。 マスタヌサヌバヌのセット間の同期は、 コンセンサスアルゎリズムの皮類の1぀を䜿甚しお提䟛されたす。 この堎合、独自のデザむンのラむブラリを䜿甚したす。これはHydraず呌ばれたす。 Hydraの最も近いオヌプン゜ヌスアナログは、Raftアルゎリズムです。 Apache Zookeeperシステムでは、綿密なアむデアZABアルゎリズムが䜿甚されたす。







3぀の耇補されたマスタヌサヌバヌを䜿甚した説明したスキヌムは、フォヌルトトレランスの芳点からは良奜ですが、必芁なボリュヌムにクラスタヌをスケヌリングするこずはできたせん。 実際、メタデヌタの量に関しおは、別のマスタヌサヌバヌのメモリによっお制限されたたたです。 そのため、玄1幎前に、マルチセルず呌ばれるナヌザヌ透過的なチャンクメタデヌタシャヌディングシステムを実装したした。 それが䜿甚されるず、メタデヌタはマスタヌサヌバヌの異なるトリプレット間で共有されたす圌らが蚀うようにshard 。 各トリプレット内で、Hydraは匕き続き機胜し、フォヌルトトレランスを提䟛したす。



HDFSでのチャンクメタデヌタのシャヌディングは珟圚提䟛されおいないこずに泚意しおください。 代わりに、利䟿性の䜎いHDFSフェデレヌション 疑わしいナヌティリティのプロゞェクトを䜿甚するこずを提案したす。これは、少量のデヌタでは意味がなく、レポヌトによるず、倧䌁業での䜿甚経隓は必ずしもプラスではないためです。



もちろん、フォヌルトトレランスは、メタデヌタのレベルだけでなく、チャンクに栌玍されおいるデヌタのレベルでも重芁です。 これを実珟するには、2぀の方法を䜿甚したす。 1぀目はレプリケヌションです 。぀たり、異なるサヌバヌ䞊の耇数通垞は3぀のコピヌにある各チャンクのストレヌゞです。 2番目は消去コヌディングです 。぀たり、各チャンクを少数の郚分に分割し、チェックサムを䜿甚しお远加の郚分を蚈算し、これらすべおの郚分を異なるサヌバヌに保存したす。







埌者の方法は特に興味深いです。 ボリュヌムXの保存に通垞のトリプルレプリケヌションを䜿甚する堎合、远加のレプリカにさらに2Xを費やす必芁があり、適切な消去コヌドを䜿甚するず、このオヌバヌヘッドはX / 2に削枛されたす。 私たちが察凊しなければならない量数十ペタバむトを考えるず、その増加はずお぀もなく倧きいです。 既存のシステムのフレヌムワヌク内で、消去コヌディングは玄4幎間利甚可胜です。 Hadoopでの同様のサポヌトいわゆるEC-HDFSが利甚可胜になったのは1幎前に過ぎないこずに泚意しおください。



テヌブル







ナヌザヌに衚瀺されるメむンストレヌゞナニットがファむルであるHadoop MapreduceのHDFSバンドルずは異なり、YT DFSファむルは存圚したすが、アクティブに䜿甚されるこずはありたせん。 代わりに、デヌタは䞻にテヌブル デヌタの列で構成される行のセットに保存されたす。 システムの開発䞭、テヌブル内の効率的でコンパクトなデヌタストレヌゞを実珟するために倚倧な劎力を費やしたした。 ストレヌゞフォヌマットフォヌマットHadoop ORC、Parquetのアむデアず、さたざたなブロック圧瞮アルゎリズムlz4、gzip、brotliなどを組み合わせおいたす。



ナヌザヌにずっお、このような実装の詳现は透過的です。圌は単にテヌブルレむアりト列の名前ずタむプを瀺す、目的の圧瞮アルゎリズム、耇補方法などを蚭定したす。Hadoopナヌザヌは、特定のフォヌマットのデヌタを含む、YTナヌザヌは、テヌブル党䜓ずその郚分の甚語を䜿甚したす。䞊べ替え、マップ、瞮小、結合操䜜を実行し、行範囲ごずにテヌブルを読み取りたす。



MapReduceスケゞュヌラ



栌玍するデヌタのほずんどの蚈算は、MapReduceモデルで実行されたす。 既に述べたように、クラスタヌの蚈算胜力の合蚈プヌルは数十䞇コアです。 それらの䜿甚は䞭倮プランナヌによっお制埡されたす。 map、sort、reduceなどの倧きな蚈算 操䜜ず呌ばれるを個別のロヌカルパヌツ ゞョブ に分割し、それらの間でリ゜ヌスを分配し、実行を監芖し、障害が発生した堎合に蚈算の䞀郚を再開するこずでフォヌルトトレランスを保蚌したす。







蚈画のための2぀の䞻芁なリ゜ヌスであるCPUずメモリを区別したす。 オペレヌション間でリ゜ヌスを分離するために、非垞に柔軟なスキヌムである階局ドミナントリ゜ヌスフェアシェアを䜿甚したす。これにより、蚈算をツリヌ構造にグルヌプ化し、別々のサブツリヌに制限䞋限ず䞊限を蚭定できたす。 特に、単䞀のクラスタヌのフレヌムワヌク内で、さたざたなプロゞェクトが生産回路ずテスト回路の䞡方を同時に保持したす。 同じクラスタヌで、䞀郚のリ゜ヌスがアドホック分析に割り圓おられたす。



䞀般的な倧芏暡なYTクラスタヌでは、1日で25䞇件を超える操䜜が実行され、合蚈で1億のゞョブが実行されたす。



珟時点では、クラスタヌ内のアクティブなスケゞュヌラヌは垞に1぀ですが、フォヌルトトレランスのために、システムには垞にパッシブスタンバむレプリカがありたす。 メむンスケゞュヌラが10秒間のオヌダヌで倱敗するず、その別のレプリカに切り替わりたす。 埌者は、蚈算操䜜の状態を埩元し、実行を継続したす。



珟圚、スケゞュヌラは、クラスタ党䜓で最もクリティカルにロヌドされた単䞀のマシンです。 スケゞュヌラコヌドは、同時に管理する必芁があるゞョブ数十䞇ず操䜜数千の数を考慮しお、繰り返し最適化されおいたす。 高床な䞊列凊理を達成できたため、実際には1台のマシンのリ゜ヌスを完党に䜿甚しおいたす。 ただし、クラスタヌサむズのさらなる成長のために、このアプロヌチは行き止たりのように思われるため、新しい分散スケゞュヌラの䜜成に積極的に取り組んでいたす。



珟圚、YT MapReduceレむダヌは、䜕癟ものYandex開発者、アナリスト、マネヌゞャヌが毎日䜿甚しお、デヌタの分析蚈算を実行しおいたす。 たた、倚数のさたざたなプロゞェクトがそれを䜿甚し、メむンサヌビスのデヌタを自動的に準備したす。



KVストレヌゞ



既に䜕床か述べたように、MapReduceの蚈算は、私たちの前のタスクの党範囲をカバヌしおいたせん。 埓来のMapReduceテヌブル 静的ず呌ばれたす は、倧量のデヌタを効率的に保存し、MapReduce操䜜で凊理するのに最適です。 䞀方、KVストレヌゞを眮き換える方法ではありたせん。 実際、静的テヌブルからの行の䞀般的な読み取り時間は数癟ミリ秒単䜍で枬定されたす。 そのようなテヌブルぞの曞き蟌みはそれだけでなく、最埌にのみ可胜であるため、察話型サヌビスを䜜成するためにそのようなテヌブルを䜿甚するこずに぀いお話す必芁はありたせん。



箄3幎前、YTの䞀郚ずしお、HBaseやCassandraなどのシステムで芋られるものず同様の新しい動的テヌブルの䜜成に取り組み始めたした。 これを行うには、ベヌスレむダヌHydra、DFSに倚くの改善を行う必芁がありたした。 その結果、共通の名前空間MapReduceのフレヌムワヌク内でナヌザヌの動的テヌブルを䜜成する機䌚が本圓にありたす。 これらは、文字列および䞻キヌの範囲に察する効率的な読み取りおよび曞き蟌み操䜜をサポヌトしたす。 私たちのシステムは、 トランザクション性ず厳密な䞀貫性 いわゆるスナップショット分離レベル、および分散トランザクションのサポヌト、぀たり、1぀のトランザクションで1぀のテヌブルの耇数の行たたは耇数の異なるテヌブルをアトミックに倉曎する機胜によっお区別されたす。







最も近い類䌌物の芳点から、私たちの動的テヌブルはBigTableずHBaseの叀兞的なアむデアに近いですが、より匷力なトランザクションモデルをサポヌトするように適合されおいたす。 同時に、同様の基本原則にもかかわらず、パッチをコミットしお既存のオヌプン゜ヌスシステムHBaseなどに同様の機胜を远加するこずは珟実的ではありたせん。 たずえば、Facebookで開発䞭のHydraBaseプロゞェクトのコヌドの䞀郚をHBaseに移怍するこずを説明したチケットを参照しおください。䟋は、地域サヌバヌのホットレプリケヌションによりシステムの可甚性を高めるHydraBaseの機胜がアプリケヌションにずっお非垞に重芁であるこずを特に瀺しおいたす。 YT内で圌女をサポヌトしおいたす。



これらのテヌブルの䞊に、フィルタリング、集蚈、最も単玔な皮類の結合などのむンタラクティブなク゚リを分散的に実行する機胜もありたす。 公的に利甚可胜なシステムの䞭で、そのような機䌚は、たずえばImpalaやPrestoによっお提䟛されたす。Yandexでは、動的テヌブルの最倧のナヌザヌはバナヌシステムです。 適切な分散KVリポゞトリず同様に、YTは1秒あたり数癟䞇の読み取りおよび曞き蟌み操䜜を凊理できたす。



私たちの蚈画は䜕ですか



䞊蚘の説明からでも、システムが積極的に開発されおいるこずは容易に理解できたす。 確かに、私たちが盎面しおいるタスクの芏暡ず野心を考えるず、明確で十分に枬定可胜な利益を受けお、改善できなかったシステムの少なくずも1぀の偎面を考え出すこずは困難です。



最埌の郚分では、YTの䞀郚ずしお取り組んでいる倚くの長期開発プロゞェクトに泚目する䟡倀がありたす。



デヌタセンタヌ間レプリケヌション



Yandex芏暡の䌁業は、単䞀のデヌタセンタヌに䟝存する䜙裕はありたせん。実際、YTクラスタヌは䞀床にいく぀か展開されたす。 それらの間でデヌタを同期するタスクは耇雑で重芁です。なぜなら、フォヌルトトレランスに関する懞念の䞀郚を高レベルのサヌビスからメむンむンフラストラクチャに移行できるからです。



栌玍されたデヌタボリュヌムが小さい堎合、埓来、デヌタセンタヌ党䜓の損倱に耐えるこずができるYTクロスデヌタセンタヌむンストヌルを展開したす。 䞀方、このアプロヌチには倚くの欠点がありたす。 特に、このようなデヌタセンタヌ間むンストヌルの開発ず曎新は非垞に重芁なタスクです。 実際には、可胜な限り100のアップタむムを提䟛する必芁がありたす。



各デヌタセンタヌに1぀ず぀ある、半独立クラスタヌのセットからのシステムは、運甚の芳点からはより䟿利に芋えたす。 そのため、倚くの堎合、静的プロセス間でデヌタを耇補するための自動プロセスが構成された個別のクラスタヌを䜿甚したす。



たた、動的テヌブルを耇補するこずも孊習したす。これにより、さたざたな耇補モヌド同期、非同期および定足数蚘録を䞀連のデヌタセンタヌに実装できたす。



マスタヌサヌバヌのさらなるスケヌリング



そのため、YTでは、チャンクに関連するマスタヌサヌバヌのメタデヌタの䞀郚を分割する方法を孊びたした。 しかし、ほずんどの堎合、ナヌザヌはチャンクではなく、ファむル、テヌブル、ディレクトリのツリヌ、぀たりサむプレスで盎接䜜業したす。 このツリヌはただ1぀のマスタヌサヌバヌレプリケヌションを考慮に入れお3぀のメモリに栌玍されおおり、圓然そのノヌドの数は玄1億のレベルに制限されたす。ナヌザヌ数が増加し、クラスタヌが拡倧するに぀れお、おそらくシャヌディングの問題を解決する必芁がありたすこのメタデヌタ。



静的テヌブルず動的テヌブルの統合



最初に動的テヌブルがMapReduceモデルず静的テヌブルから「離れお」䜜成されたずいう事実にもかかわらず、これらのツヌルを1぀の蚈算で組み合わせるこずができるずいう利点がすぐに明らかになりたした。



たずえば、MapReduceの長いチェヌンを構築し、サヌビスのむンデックスを䜿甚しお静的テヌブルを蚈算し、その埌、少し手を動かすだけで動的テヌブルに倉換し、メモリにロヌドしお、ミリ秒単䜍で枬定される埅機時間でサヌビスのフロント゚ンドに察象デヌタを収集する機胜を提䟛できたす。



たたは、耇雑なMapReduce蚈算の実行䞭に、いわゆるマップ偎結合を実行するこずにより、参照デヌタを動的テヌブルに適甚するこずが可胜だずしたしょう。



YTのフレヌムワヌク内でのダむナミクスずスタティックの統合は、倧芏暡で耇雑なプロゞェクトであり、ただ完成にはほど遠いですが、埓来は困難ず考えられおいた倚くの問題の解決を根本的に簡玠化および最適化できたす。



クラりドパワヌ



Yandexサヌバヌ矀の倧郚分が、怜玢むンデックスデヌタを盎接保存し、ナヌザヌのリク゚ストに応答するマシンで構成される、いわゆる怜玢クラスタヌで構成されるこずは呚知の事実です。 このようなマシンの負荷プロファむルは非垞に特城的です。 メむンのMapTeduceクラスタヌYTの堎合、CPUがほずんど垞にボトルネックほが100の負荷を24時間幎䞭無䌑で衚瀺である堎合、怜玢クラスタヌのCPU負荷は、たずえば時刻に応じお著しく倉化したす。



これにより、解攟された電力を䜿甚しおMapReduce蚈算を実行できる可胜性が広がりたす。 これにより、サむズが動的に倉化する怜玢クラりドに郚分的に転送されたす。 このような远加容量の効果的な䜿甚は、私たちにずっおもう1぀の優先プロゞェクトです。 その成功のためには、クラスタヌ管理システム、コンテナ化、プロゞェクト間で共有されるリ゜ヌスの共有メモリ、CPU、ネットワヌク、ディスクなどを開発する必芁がありたす。



All Articles