記事ディレクトリ
インタビュー指向のブログは、Q / Aスタイルで提示されます。
質問1:Hadoopを簡単に紹介しますか?
回答1:
Hadoopはビッグデータソリューションであり、分散システムインフラストラクチャを提供します。そのコアコンテンツにはhdfsとmapreduceが含まれます(添付ファイル:hadoop2.0がyarnに導入され、安定して利用可能なバージョンはHadoop3.0です)
hdfsはデータストレージを提供するために使用され、mapreduceはデータ計算を容易にするために使用されます。
- hdfsはnamenodeとdatanodeにも対応します。namenodeはメタデータの基本情報を保存し、datanodeはデータ自体を直接格納します。
- mapreduceは、jobtrackerおよびtasktrackerに対応します。ここで、jobtrackerはタスクの配布を担当し、tasktrackerは特定のタスクの実行を担当します。
- マスター/スレーブアーキテクチャに対応して、namenodeとjobtrackerはマスターに対応し、datanodeとtasktrackerはスレーブに対応する必要があります。それがhdfsであるかmapreduceであるかに関係なく、マスターノードとスレーブノードの間はハートビートによって存続することが確認されています。
質問2:HDFSの簡単な紹介?
回答2:
以下に示すHDFSアーキテクチャ図:
HDFSでは、NameNodeとセカンダリNameNodeがマスターで、すべてのデータノードがスレーブです。
1、クライアント
クライアント(ユーザーを表す)は、NameNodeおよびDataNodeと対話することにより、HDFS内のファイルにアクセスします。クライアントは、ユーザーが呼び出すPOSIXのようなファイルシステムインターフェイスを提供します。
2、NameNode
機能:HDFSディレクトリツリーと関連ファイルのメタデータ情報を管理します。
Hadoopクラスター全体でNameNodeは1つだけです。これはシステム全体の「マスター」であり、HDFSディレクトリツリーと関連ファイルのメタデータ情報の管理を担当します。この情報は、「fsimage」(HDFSメタデータイメージファイル)および「editlog」(HDFSファイル変更ログ)の形式でローカルディスクに保存され、HDFSの再起動時に再構築されます。さらに、NameNodeは各DataNodeのヘルスステータスを監視する役割も果たします。DataNodeが停止していることが検出されると、DataNodeはHDFSから移動され、その上のデータが再度バックアップされます。
3、セカンダリNameNode
機能:fsimageを定期的にマージしてログを編集し、NameNodeに転送します。
セカンダリNameNodeの最も重要なタスクは、NameNodeメタデータのホットバックアップを実行することではなく、定期的にfsimageをマージしてログを編集し、NameNodeに転送することです。ここで、NameNodeへの圧力を軽減するために、NameNodeはfsimageをマージせず、ファイルを編集してディスクに格納しませんが、セカンダリNameNodeによって行われることに注意してください。
4、データノード
機能:実際のデータストレージを担当し、データ情報を定期的にNameNodeに報告します。
通常、各スレーブノードにはDataNodeがインストールされています。DataNodeは、実際のデータストレージを担当し、データ情報を定期的にNameNodeに報告します。DataNodeは、固定サイズのブロックを基本単位としてファイルコンテンツを整理します。デフォルトでは、ブロックサイズは64MBです。ユーザーが大きなファイルをHDFSにアップロードすると、ファイルは複数のブロックに分割され、異なるDataNodeに保存されます。同時に、信頼性の高いデータを確保するために、同じブロックがパイプライン方式で複数のブロックに書き込まれます(デフォルトはい、3。このパラメーターは異なるDataNodeで構成できます。カット後にファイルを保存するこのプロセスは、ユーザーに対して透過的です。
質問3:MapReduceを簡単に紹介しますか?
Answer3:
図に示すように、Hadoop MapReduceはマスター/スレーブ(M / S)アーキテクチャーを使用します。
Map Reduceでは、JobTrackerがマスターで、すべてのTaskTrackerがスレーブです。
MapReduceは主に次のコンポーネントで構成されています:クライアント、ジョブトラッカー、タスクトラッカー、タスク。次に、これらのコンポーネントについて個別に説明します。
1、クライアント
ユーザーが作成したMapReduceプログラムは、クライアントを介してJobTrackerに送信されます。同時に、ユーザーは、クライアントが提供するいくつかのインターフェースを介してジョブの実行ステータスを表示できます。
Hadoopでは、「ジョブ」(ジョブ)を使用してMapReduceプログラムを表します。MapReduceプログラムは複数のジョブに対応でき、各ジョブ(ジョブ)は複数のMap / Reduceタスク(タスク)に分解されます。
2、JobTracker
JobTrackerは主にリソースの監視とジョブのスケジューリングを担当します。JobTrackerは、すべてのTaskTrackerとジョブのヘルスステータスを監視します。障害が検出されると、対応するタスクを他のノードに転送します。同時に、JobTrackerは、タスク実行の進捗状況、リソースの使用状況などの情報を追跡し、タスクスケジューラに通知します、そしてスケジューラは、リソースがアイドル状態になったときに、これらのリソースを使用する適切なタスクを選択します。
Hadoopでは、タスクスケジューラはプラグ可能なモジュールであり、ユーザーは必要に応じて対応するスケジューラを設計できます。
3、TaskTracker
TaskTrackerは定期的にノードのリソースの使用状況とタスクの進行状況をHeartbeatを介してJobTrackerに報告し、同時にJobTrackerから送信されたコマンドを受信して対応する操作(新しいタスクの開始、タスクの強制終了など)を実行します。
TaskTrackerは「スロット」を使用して、このノードのリソースの量を分割します。「スロット」は、コンピューティングリソース(CPU、メモリなど)を表します。タスクは、スロットを取得した後に実行される可能性があり、Hadoopスケジューラの役割は、各TaskTrackerのアイドルスロットをタスクに割り当てることです。スロットは2つのタイプに分けられます:MapスロットとReduceスロットで、それぞれMapTaskとReduceタスクで使用されます。
このように、TaskTrackerはスロットの数(構成可能なパラメーター)によってタスクの同時実行性を制限します。
4、タスク
タスクは2つのタイプに分けられます:どちらもTaskTrackerによって開始されるMap TaskとReduce Taskです。
データを固定サイズのブロックに格納するHDFSと比較すると、MapReduceの処理ユニットは分割されています。分割は論理的な概念であり、データの開始位置、データの長さ、データが配置されているノードなど、一部のメタデータ情報のみが含まれます。分割方法は完全にユーザーが決定します。
ただし、各分割はマップタスクによって処理されるため、分割の数によってマップタスクの数が決まることに注意してください。
5.マップタスクの実行プロセス
マップタスクの実行プロセスを図に示します。
図からわかるように、マップタスクは最初に対応する分割反復をキー/値のペアに解析し、次にユーザー定義のmap()関数を呼び出して処理します。次に、一時データがいくつかのパーティションに分割されます(各パーティションはタスク処理を減らして)、最後に一時的な結果をローカルディスクに保存します。
6.タスク実行プロセスを減らす
上記のマップタスク実行フローチャートの中央のステップは、一時データが複数のパーティションに分割されることです。実際、各パーティションはリデュースタスクによって処理されるので、リデュースタスクはどのように処理しますか?
タスクの削減の実装プロセスは、3つの段階に分かれています。
- リモートノード( "シャッフルステージ"と呼ばれます)からMapTaskの中間結果を読み取ります。
- キーでキー/値のペアをソートします(「ソート段階」と呼ばれます)。
- 次に<key、value list>を読み取り、ユーザー定義のreduce()関数を呼び出して処理し、最終結果をHDFSに保存します(「Reduceステージ」と呼ばれます)。
質問4:Hadoop MapReduceジョブのライフサイクルについて話してください。
Answer4:
ステップ1:ジョブの送信と初期化
ジョブの送信:ユーザーがジョブ(つまりJob)を送信した後、JobClientインスタンスは最初に、プログラムjarパッケージ、ジョブ構成ファイル、シャーディングメタ情報ファイルなどのジョブ関連情報を分散ファイルシステム(通常はHDFS)にアップロードします。このうち、フラグメントメタ情報ファイルには、各入力フラグメントの論理的な位置情報が記録されています。次に、JobClientはRPC(つまり、リモートプロシージャコール、リモートプロシージャコール)を介してJobTrackerに通知します。
ジョブの初期化:JobTrackerが新しいジョブ送信要求を受け取った後、ジョブスケジューリングモジュールがジョブを初期化します。ジョブのJobInProgressオブジェクトを作成してジョブのステータスを追跡し、JobInProgressが各タスクのTaskInProgressオブジェクトを作成して各タスクを追跡します。 TaskInProgressは、複数の「タスク実行試行」(「タスク試行」と呼ばれる)を管理する必要がある場合があります。
ステップ2:タスクのスケジュールと監視
タスクのスケジュールと監視機能はJobTrackerによって実行されるため、TaskTrackerは定期的にこのノードのリソース使用状況をHeartbeatを介してJobTrackerに報告します。アイドルリソースが表示されると、JobTrackerは特定の戦略に従ってアイドルリソースを使用する適切なタスクを選択します。タスクスケジューラによって完了します。タスクスケジューラは、プラグイン可能な独立したモジュールであり、2層アーキテクチャを備えています。つまり、最初にジョブ(つまり、ジョブ)が選択され、次にジョブ(つまり、タスク)がジョブ(ジョブ)から選択されます。これらの中で、タスクの選択を検討する必要があります。データの局所性。
さらに、JobTrackerはジョブの実行プロセス全体を追跡し、ジョブが正常に動作することを包括的に保証します。1つは、TaskTrackerまたはTaskが失敗した場合、計算タスクが転送されます。2つ目は、タスクの実行進捗が同じジョブの他のタスクよりも大幅に遅れている場合、同じタスクがそのタスクに対して開始され、計算が速いタスク結果が最終結果として選択されます。
ステップ3:タスク実行環境を準備する
動作環境の準備には、JVMの起動とリソースの分離が含まれ、すべてTaskTrackerによって実装されます。
JVMの起動:TaskTrackerはタスクごとに独立したJVMを起動して、操作中に異なるタスクが互いに影響し合うのを防ぎます。
リソースの分離:TaskTrackerはオペレーティングシステムプロセスを使用してリソースの分離を実現し、タスクがリソースを悪用するのを防ぎます。
ステップ4:タスクの実行
TaskTrackerがTaskの実行環境を準備した後、Taskを開始します。動作中、各タスクの最新の進捗状況は、最初にRPC経由でタスクによってTaskTrackerに報告され、次にTaskTrackerによってJobTrackerに報告されます。
ステップ5:宿題が完了
すべてのタスクが実行された後、ジョブ全体(つまり、ジョブ)が正常に実行されます。
質問5:糸の簡単な紹介?
回答5:
YARNは、リソース管理とタスクスケジューリングのフレームワークであり、主にResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)の3つのモジュールで構成されています。その中で、ResourceManagerはすべてのリソースの監視、割り当て、管理を担当し、NodeManagerは各ノードのメンテナンスを担当し、ApplicationMasterは特定の各アプリケーションのスケジューリングと調整を担当します。
すべてのアプリケーションで、RMはリソースを完全に制御および割り当てます。各AMはRMとリソースをネゴシエートし、NodeManagerと通信してタスクを実行および監視します。
複数のモジュール間の関係を図に示します。
上の図の説明:
左側の2つのクライアントクライアントインスタンスリクエスト(1つは赤、1つは青)。
1行目のMapReduceステータスは、現在のMapReduceのステータスを示します。各アプリケーションにはマスターノードAMが含まれています。この図は2つのアプリケーションが処理されていることを示しているため、3つの赤いコンテナコンテナはすべてMapReduceを処理しています。状態は赤いAMアプリケーションマスターノードに渡され、青いコンテナーコンテナーは現在のMapReduce状態も青いAMアプリケーションマスターノードに渡します。
2行目のジョブ送信はジョブの送信を示します。つまり、左側の2つのクライアントがジョブをRMに送信します。
3行目のノードステータスはノードステータスを表します。NodeManagerは各ノードのメンテナンスを担当します。3つのNodeManagerはノードステータス情報をRMグローバルリソースマネージャーに送信します。
4行目のリソースリクエストは、リソースリクエストアクションを実行することを意味します。図では、2つのAMが独自のアプリケーションのRMにリソースリクエストを作成しています。
質問1:AMとNMの間に包含、並置、またはその他の関係はありますか?
回答1:AMとNMの間に関係はありません。AMはアプリケーションに対応します。アプリケーションにはAMが含まれます。NMはYarnの内部ノードに対応します。内部ノードはそれを維持するためにNMを必要とします。
質問2:AMとRMの関係は何ですか?NMとRMの関係は何ですか?
回答2:AMはアプリケーションに対応するため、RMにリソースリクエストリソースリクエストを送信してアプリケーションのリソースをリクエストします。NMは内部ノードに対応するため、ノードステータスノードステータス情報をRMにレポートします。
ResourceManagerモジュール
- RMの意味:ResourceManagerは、クラスター全体のリソース管理と割り当てを担当し、グローバルなリソース管理システムです。
- RMおよびNM:NodeManagerは、リソースの使用状況をハートビート(現在は主にCPUとメモリの使用状況)の形式でResourceManagerに報告します。RMはNMのリソース戻り情報のみを受け入れ、特定のリソース処理はNMが処理することに任されています。
- RMおよびAM:YARNスケジューラは、アプリケーションの要求に応じてリソースを割り当てます。アプリケーションジョブの監視、追跡、実行ステータスのフィードバック、起動などは行いません。
NodeManagerモジュール
- NMの意味:NodeManagerは各ノードのリソースおよびタスクマネージャーであり、このマシンを管理するエージェントであり、ノードプログラムの操作、およびノードリソースの管理と監視を担当します。YARNクラスターの各ノードはNodeManagerを実行します。
- NMとRM:NodeManagerは、ノードのリソース(CPU、メモリ)の使用状況とコンテナの実行ステータスをResourceManagerに定期的に報告します。ResourceManagerがダウンすると、NodeManagerは自動的にRMスタンバイノードに接続します。
- NMおよびAM:NodeManagerは、ApplicationMasterからのコンテナーの開始や停止などのさまざまな要求を受信して処理します。
ApplicationMasterモジュール
- AMの意味:ユーザーが送信した各アプリケーションには、ResourceManager以外のマシンで実行できるApplicationMasterが含まれています。
- AMおよびRM:RMスケジューラーと交渉してリソースを取得します(コンテナーによって示されます)。
- AMおよびNM:NMと通信してタスクを開始/停止します。
- AMおよびタスクタスク:タスクはさらに内部タスクに割り当てられます(セカンダリリソース割り当て)。
- AMおよびタスクタスク:すべてのタスクの実行ステータスを監視し、タスクのリソースを再適用して、タスクが失敗したときにタスクを再開します。
注:RMは、AMをモニターし、AMが失敗したときにそれを開始することのみを担当します。RMはAM内部タスクのフォールトトレランスの責任を負いません。タスクのフォールトトレランスはAMによって実行されます。
質問6:YARNの運用プロセスは何ですか?
回答6:
- クライアントは、ApplicationMasterプログラム、ApplicationMasterを開始するコマンド、ユーザープログラムなど、アプリケーションを開始するApplicationMasterの必要な情報を含めて、アプリケーションプログラムをRMに送信します。
- ResourceManagerは、ApplicationMasterを実行するためのコンテナーを開始します。
- 起動するApplicationMasterは自身をResourceManagerに登録し、起動が成功した後、RMにハートビートを保持します。
- ApplicationMasterは、ResourceManagerにリクエストを送信して、対応する数のコンテナーを申請します。
- ResourceManagerは、ApplicationMasterアプリケーションのコンテナ情報を返します。正常に適用された
コンテナは、ApplicationMasterによって初期化されます。コンテナの起動情報が初期化された後、AMは対応するNodeManagerと通信し、NMにコンテナの起動を要求します。AMとNMはハートビートを維持し、NMで実行されているタスクを監視および管理します。 - コンテナの実行中、ApplicationMasterはコンテナを監視します。コンテナは、RPCプロトコルを介して、対応するAMに進行状況とステータスを報告します。
- アプリケーションの実行中、クライアントはAMと直接通信して、アプリケーションのステータスや進行状況の更新などの情報を取得します。
- アプリケーションの実行後、ApplicationMasterは自身をResourceManagerからログオフし、それに属しているコンテナーを取り戻すことができます。
質問7:Hadoop2とHadoop3の違いを簡単に説明してください。
回答7:
hadoop2.Xとhadoop3.Xの22の違いは次のとおりです。
1.ライセンス
adoop 2.x-Apache 2.0、オープンソース
Hadoop 3.x-Apache 2.0、オープンソース
2.サポートされる最小のJavaバージョン
Hadoop 2.x-サポートされるJavaの最小バージョンはjava 7です
。Hadoop 3.x-サポートされるJavaの最小バージョンはjava 8です。
3.フォールトトレランス
Hadoop 2.x-(スペースを無駄にする)コピーすることでフォールトトレランスを処理できます。
Hadoop 3.x-Erasureコーディングは、フォールトトレランスを処理できます。
4.データバランス
Hadoop 2.x-データの場合、HDFSバランサーを使用してバランスを取ります。
Hadoop 3.x-データの場合、バランシングはデータ内ノードバランサーを使用します。これは、HDFSディスクバランサーCLIから呼び出されます。
5.ストアスキーム
Hadoop 2.x-3Xコピー方式を使用
Hadoop 3.x-HDFSでの消去符号化をサポートします。
6.ストレージのオーバーヘッド
Hadoop 2.x-HDFSのストレージスペースには200%のオーバーヘッドがあります。
Hadoop 3.x-Storageのオーバーヘッドはわずか50%です。
7.ストレージのオーバーヘッドの例
Hadoop 2.x-ブロックが6つある場合、コピースキーム(スキーム)により18ブロックが領域を占有します。
Hadoop 3.x-6つのブロックがある場合、パリティ用に9つのブロックスペース、6つのブロック、3つのブロックがあります。
8. YARNタイムラインサービス
Hadoop 2.x-スケーラビリティの問題がある古いタイムラインサービスを使用します。
Hadoop 3.x-タイムラインサービスv2を改善し、タイムラインサービスのスケーラビリティと信頼性を向上させます。
9.デフォルトのポート範囲
Hadoop 2.x-Hadoop 2.0では、一部のデフォルトポートはLinuxの一時的なポート範囲です。したがって、起動時に、バインドできなくなります。
Hadoop 3.x-Hadoop 3.0では、これらのポートは短期的な範囲から外れました。
10.ツール
Hadoop 2.x-Hive、pig、Tez、Hama、Giraphおよびその他のHadoopツールを使用します。
Hadoop 3.x-Hive、pig、Tez、Hama、Giraphおよびその他のHadoopツールを使用できます。
11.互換性のあるファイルシステム
Hadoop 2.x-HDFS(デフォルトFS)、FTPファイルシステム:すべてのデータをリモートアクセス可能なFTPサーバーに保存します。Amazon S3(Simple Storage Service)ファイルシステムWindows Azure Storage Blob(WASB)ファイルシステム。
Hadoop 3.x-Itは、すべてのフロントおよびMicrosoft Azure Data Lakeファイルシステムをサポートします。
12.データノードリソース
Hadoop 2.x-DatanodeリソースはMapReduce専用ではなく、他のアプリケーションで使用できます。
Hadoop 3.x-ここのデータノードリソースは、他のアプリケーションにも使用できます。
13.MR APIの互換性
Hadoop 2.x-MR APIはHadoop 1.xプログラム
と互換性があり、Hadoop 2.x上でHadoop 3.x を実行できます-ここで、MR APIはHadoop 3.xのHadoop 1.xプログラムの実行と互換性があります実行する
14.支持Microsoft Windows
Hadoop 2.x-ItはWindowsにデプロイできます。
Hadoop 3.x-ItはMicrosoft Windowsもサポートしています。
15.スロット/コンテナ
Hadoop 2.x-Hadoop 1はスロットの概念に適用されますが、Hadoop 2.Xはコンテナーの概念に適用されます。コンテナを通じて、一般的なタスクを実行できます。
Hadoop 3.x-コンテナーの概念にも適用されます。
16.単一障害点
Hadoop 2.xにはSPOF機能があるため、Namenodeに障害が発生する限り、自動的に回復します。
Hadoop 3.xにはSPOF機能があり、Namenodeに障害が発生する限り、それは自動的に回復し、人間の介入なしに克服できます。
17. HDFSアライアンス
Hadoop 2.x-Hadoop 1.0では、すべての名前空間を管理するNameNodeは1つだけですが、Hadoop 2.0では、複数の名前空間に対して複数のNameNodeが使用されます。
Hadoop 3.x-Hadoop 3.xには、複数の名前空間用の複数の名前空間もあります。
18.スケーラビリティ
Hadoop 2.x-クラスタあたり10,000ノードまで拡張できます。
Hadoop 3.x-より優れたスケーラビリティ。クラスタごとに10,000を超えるノードをスケーリングできます。
19.より速くデータにアクセスする
Hadoop 2.x-データノードキャッシュにより、データにすばやくアクセスできます。
Hadoop 3.x-ここでは、Datanodeキャッシュを介してデータにすばやくアクセスすることもできます。
20. HDFSスナップショット
Hadoop 2.x-Hadoop 2は、スナップショットのサポートを追加します。障害回復とユーザーエラーの保護を提供します。
Hadoop 3.x-Hadoop 2は、スナップショット機能もサポートしています。
21.プラットフォーム
Hadoop 2.x-さまざまなデータ分析のプラットフォームとして使用でき、イベント処理、ストリーミングメディア、リアルタイム操作を実行できます。
Hadoop 3.x-ここでは、YARNの上でイベント処理、ストリーミングメディア、リアルタイム操作を実行することもできます。
22.クラスターリソース管理
Hadoop 2.x-クラスターリソース管理では、YARNを使用します。スケーラビリティ、高可用性、マルチテナンシーが向上します。
Hadoop 3.x-クラスターの場合、リソース管理はすべての機能でYARNを使用します。