Hadoop/ZooKeeperを初めて使用します。 ZooKeeperをHadoopで使用する目的を理解できませんが、ZooKeeperはHadoopでデータを書き込みますか?そうでない場合、ZooKeeperをHadoopで使用する理由は何ですか?
Hadoop 1.xはZookeeperを使用しません。 HBaseは、Hadoop 1.xインストールでもzookeeperを使用します。
Hadoopはバージョン2.0からZookeeperも採用しました。
Zookeeperの目的はクラスター管理です。これは、小さな専用コンポーネントを使用するという* nixの一般的な哲学に適合します。したがって、クラスタリング機能を必要とするHadoopのコンポーネントは、独自の開発ではなくZookeeperに依存しています。
Zookeeperは、次の保証を提供する分散ストレージです( Zookeeper概要ページ からコピー):
これらを使用して、ロック、リーダー選出などのクラスター管理に必要な異なる「 recipes 」を実装できます。
ZooKeeperを自分で使用する場合は、 Netflixのキュレーター をご覧になることをお勧めします。これにより、使いやすくなります(たとえば、すぐに使用できるレシピがいくつか実装されています)。
Zookeeperは信頼性の高い分散調整の問題を解決し、hadoopは分散システムですよね?
この主題について読むことができる優れた論文 Paxos Algorithm があります。
zookeeper ドキュメントページから:
ZooKeeperは、構成情報の維持、命名、分散同期の提供、およびグループサービスの提供のための集中型サービスです。これらの種類のサービスはすべて、分散アプリケーションによって何らかの形で使用されます。
それらが実装されるたびに、避けられないバグと競合状態を修正するために多くの作業があります。これらの種類のサービスを実装することは困難であるため、アプリケーションは通常、最初はそれらをスキップします。正しく行われた場合でも、これらのサービスのさまざまな実装により、アプリケーションの展開時に管理が複雑になります。
hadoop ドキュメントページから:
Apache™Hadoop®プロジェクトは、信頼性が高くスケーラブルな分散コンピューティングのためのオープンソースソフトウェアを開発しています。
Apache Hadoopソフトウェアライブラリは、単純なプログラミングモデルを使用してコンピューターのクラスター間で大規模なデータセットを分散処理できるフレームワークです。
クエリについて:
Hadoop StackでZooKeeperが必要なのはなぜですか?
バインディングファクターは、分散処理と高可用性です。
例えばHadoop Namenodeフェイルオーバープロセス。
Hadoopの高可用性は、フェールオーバープロセス用のアクティブネームノードとスタンバイネームノードを中心に設計されています。どの時点でも、2つのマスター(アクティブなNamenode)を同時に持つことはできません。
HDFSHighAvailabilityWithQJM のApacheドキュメントリンクから:
HAクラスターが正しく動作するためには、一度に1つのNameNodeのみがアクティブであることが重要です。そうしないと、名前空間の状態が2つの間で急速に分かれてしまい、データの損失やその他の誤った結果のリスクがあります。このプロパティを確保し、いわゆる「スプリットブレインシナリオ」を防ぐために、JournalNodesは一度に1つのNameNodeのみがライターになることを許可します。
フェイルオーバー中、アクティブになるNameNodeは、単にJournalNodeへの書き込みの役割を引き継ぐだけです。これにより、他のNameNodeがアクティブ状態を継続できなくなり、新しいActiveがフェイルオーバーを安全に続行できるようになります。
ZookeeperはSplit-brainシナリオを回避するために使用されています。以下の質問でZookeeperの役割を見つけることができます。