HadoopのHDFSの一般的な面接の質問

大規模なデータプレーンの質問+
:HDFS面の質問
1。HDFSの書き込み処理

1)名前ノードに分散ファイルシステムアップロードファイルによって、クライアントモジュールの要求は、ターゲットファイルが既に存在する名前ノードチェックするかどうか、親ディレクトリが存在します。
それはアップロードすることができる場合2)名前ノード・リターン。
3)いくつかのデータノード上の最初のブロックのクライアント要求は、サーバーにアップロードします。
4)名前ノードは、三個のデータノードノード、それぞれ、DN1、DN2、DN3を返します。
5)FSDataOutputStreamモジュールを介してアップロードデータDN1クライアントの要求は、要求のDN1領収書は、通信パイプラインが完成されて確立されます、そしてDN2コールDN3、DN2呼び出ししていきます。
6)DN1、DN2、ステップ応答クライアントによってDN3段階。
7)クライアントはDN1パケットが通過DN2、DN3 DN2通過を受信する、パケット単位にDN1最初のブロック(ディスクで開始するローカルメモリキャッシュにデータを読み込み)をアップロードし始める。DN1各応答キューは、応答を待っているパケットの場所を渡します。
ブロック転送が完了した後に8)、クライアントの要求は再び名前ノードブロック第二のサーバにアップロードしました。(繰り返しは3-7ステップ)。
2.HDFSは、データフローを読みます

1)分散ファイルシステム名前ノード要求を介してクライアントは、メタデータを照会することによって、ファイル、名前ノードをダウンロードするには、ファイルデータノードアドレスブロックが配置されている見つけること。
DataNodes 2)選択(近接の原理は、ランダムに)、サーバ、データを読み出すための要求。
3)データノードは、較正ユニットパケット)を行うために、入力ストリーム内のディスクからデータを読み出す(クライアントへの送信データに始まります。
4)パケットにクライアントがユニット、ローカルキャッシュに最初に受信し、宛先ファイルに書き込みます。
状況がバックアップされていない3.datenode何の下
の設定をバックアップ数が1である、バックアップされません。
フィールド?拡張アプリケーション-Hadoop、中にバックアップの数を設定
でDfs.replication変数HDFS-site.xmlの。
小さなファイルの4.HDFSの多数によって引き起こされる問題などの解決
の問題:
Hadoopのディレクトリ、ファイルは各オブジェクトに関する名前ノードのメモリにブロックやオブジェクトの形で保存されますが、小さなファイルの150bytesの数が多くなります以上占有することになります。名前ノードは、メモリを占有し、名前ノードは遅く、長時間の立ち上げので、メタデータを読み出し、さらに用メモリは大きすぎるので、増加GC時間になります。

解決策:
二つの角度、一つは根本的な原因は、小さなファイルを生成対処するために、そして第二に、合併の選択に解決することはできません。

抽出など、データソースから始まっ代わりに、このようなデータの量を蓄積するために一日一回として、時間あたりの抽出方法に一度。
避けられない小さなファイルならば、一般的に解決するには、連結ベースで。MRは、すべてのカタログを読むためにタスクを書くことができます小さなファイルは、と。一つの大きなファイルのように書き換える
5.HDFSとき、3つのコアコンポーネントがどのような役割は何ですか
。1名前ノードは、コアクラスタ管理ノードは、ファイルシステム全体で維持
)ファイルシステムのファイルのディレクトリ構造をそして、メタデータ情報
、データブロックのb)の対応関係ファイルリスト
2データノード、ノード固有のデータブロックが格納され、定期的にハートビート名前ノードを送信するために、データを読み書きする責任がある
。3 SecondaryNameNode。セカンダリノード、同期名前ノード内のメタデータ情報、 fsimageとeditsLog合併を支援する。名前ノード
6 fsimageとeditlogsは何?やっている
名前ノードの障害、最近fsimageファイルはのためにメモリにロードされる場合fsimageファイルは、Hadoopのメタデータファイルに保存されています最近の状態メタデータの再構築した後、前方の関連する時点から記録された各トランザクション編集ログファイルを開始します。

クライアント・ファイル・システムが書き込み操作を行うと、これらの取引は、最初のログファイルに記録されています。

名前ノードの動作中に、クライアントHDFSへの書き込みがファイルを編集するために保存され、編集ファイルが非常に大きくなる原因となり、時間の経過が、これは操作名前ノードには影響しませんが、名前ノードの再起動すれば、それはfsimageの内容を転送しますメモリにマップされ、その後、オペレーション編集ファイルを実行するために一つ一つ、とても遅い再起動するファイルが大きすぎリードをログに記録します。私たちは名前ノードの実行時に定期的に編集・ログとfsimageでなければなりませんので。
Linuxでの7ブロックサイズ4キロバイトに、なぜHDFSのブロックサイズが64MB以上128メガバイトのですか?
ブロックは、ファイルシステムに格納されたデータの最小単位である。Hadoopの中に格納されたデータに保存されている4キロバイトのブロックサイズは、それがブロックの多くを必要とする場合は、大幅に増加時間ブロックシーク、書き込み効率が低下する。
また、マップまたはに低減するブロックが小さい場合には、タスクの数ははるかにMapReduceのになり、タスクの切り替えのオーバーヘッドが大きく、効率となり、ブロック単位で処理されます削減
?可能8.同時書き込みHDFSファイルを
いいえ、クライアントが後で名前ノードでデータ・ブロックに書かれたライセンスを受けているので、ブロックをまっすぐにロックされます、書き込み動作が完了すると、それが同じブロックに書かれていません。
9.HDFS配置ポリシーのコピー
ここに画像を挿入説明
10名前ノードとSecondaryNameNode違いとの関係を?
相違点:
(1)名前ノード全体のファイルシステムのメタデータの管理を担当し、対応する各ブロックのデータパス情報(ファイル)です。
合わせ(2)SecondaryNameNodeは、主に対数周期名前空間名前空間と鏡画像を編集するために使用されます。
お問い合わせ:
(1)SecondaryNameNodeは一貫して名前ノードのイメージファイル(fsimage)に保存され、編集ログ
(編集)。
(NOタイムリーなバックアップデータと仮定して)メイン名前ノード(2)障害が、データがSecondaryNameNodeから回収することができます。
11.namenode作業メカニズム

  1. 第一段階:名前ノードが起動し
    、(1)の後にあなたが名前ノード形式を最初に起動したときにFsimageと編集ファイルを作成します。これが初めてではない場合は、起動しログインして編集した画像を直接メモリにファイルをロードします。
    (2)クライアントは、追加および削除のメタデータを要求します。
    (3)名前ノードレコード操作ログは、更新ログをローリング。
    メモリ内のメタデータに(4)名前ノードの付加および欠失。
  2. 第二段階:セカンダリ名前ノードの作業
    (1)セカンダリ名前ノードは名前ノードがチェックポイントが必要かどうかを尋ねました。名前ノードは、直接戻るかどうかの結果を確認します。
    (2)二次名前ノード要求の実行チェックポイント。
    (3)名前ノードのスクロールは、編集ログを書き込まれています。
    (4)ミラーファイルとセカンダリ名前ノードにコピースクロールする前に、編集ログ。
    (5)二次名前ノード負荷と画像メモリにログファイルを編集し、そしてプールしました。
    新たな画像ファイルfsimage.chkpointを生成する(6)。
    (7)fsimage.chkpoint名前ノードをコピーします。
    (8)名前ノードはfsimageに改名さfsimage.chkpointます。
    12.datenode作業メカニズム

1)2つのファイルのデータ自体のための1つを含む、ディスク上のファイルとして格納されているデータノードにデータブロックを、メタデータは、データブロックの長さを含み、チェックサムデータ・ブロック、およびタイムスタンプ。
2)データノードは、定期的(1時間により、登録を開始した後、名前ノード)は、情報ブロック名前ノードの全てを報告します。
3)データノード名前ノードへハートビートリターン結果にハートビート3秒ごとには、別のマシンにコピーデータブロックとしてコマンド、またはデータ・ブロックを削除します。10分以上の心拍データノードを受信しなかった場合は、ノードが使用できないと考えられています。
4)クラスタ操作が安全に参加し、いくつかのマシンを残すことができます。
13.あなたはHadoopのデザイン不合理どう思いますか

  1. これは、同時書き込みランダムなファイルをサポートし、文書の内容は変更されません。
  2. 低レイテンシ、高スループットのデータアクセスをサポートしていません。
  3. 小さな多数のファイルへのアクセスは、名前ノードは、時間をかけて小さなファイルの読み込み時に対処、大量のメモリを占有します。
  4. より複雑な構築するためのHadoop環境。
  5. データはリアルタイムで処理することはできません。

14. Hadoopのが必要で、どのプロファイル、彼らの役割は何ですか?
。1、site.xmlのコア-
fs.defaultFS:HDFS:デフォルト値はHDFSパスを指すクラスタ1 //(ドメイン名)。
hadoop.tmp.dir:/エクスポート/データ/ hadoop_tmp 、 デフォルトのパスは、パブリックディレクトリの名前ノード、データノード、データ等のsecondaryNamenodeストレージです。ユーザーは、これら3つのノードだけで自分自身のディレクトリを指定することができます。
ha.zookeeper.quorum:hadoop101:2181、hadoop102: 2181、hadoop103:2181は、 ここでのZooKeeperクラスタアドレスとポートです。数が奇数であると、以下の3つのノードよりなければならないことに注意してください。
2、hadoop-env.sh
など単にセットJDKのインストールパス:輸出JAVA_HOME =は/ usr / local /のJDK。

。3、site.xmlのHDFS-
dfs.replication:彼は、デフォルトは3であるバックアップファイルシステムのデータブロックの数を決定します。
dfs.data.dir:ファイルシステムに保存されたデータノードのノード・ディレクトリー。
dfs.name.dir:名前ノードのローカルノードストレージシステムのパスのHadoopファイルシステム情報。
4、mapred-のsite.xml
mapreduce.framework.name:糸の糸指定されたMRラン。

図5に示すように、糸site.xmlのは、
そのようなロギング・アグリゲーションとしてyarn.nodemanager.aux・サービスおよび機能を配置しました

図6に示すように、スレーブは、マスタ
ノードのリストから、構成、マスタノード
15.Hadoop特性の利点
(1)容量拡張
(2)低コスト
、(3)高効率
(4)の信頼
されているクラスタ内のメインキャラクタ16糸リソーススケジューリングシステム?
、ノードマネージャのResourceManager
方法17. Hadoopの展開はあるのですか?
1スタンドアロンモード
2疑似分散モード
3クラスタモード
18.下さいリストのプロセスを開始するためのすべての必要性クラスタのHadoop Hadoopの作業、その役割が何でありますか?
-Namenode => HDFSデーモンは、ファイルシステム全体を格納するファイルシステム全体のメタデータ情報の維持管理を担当して、そこにこれらのデータの画像+編集ログ名前ノードの永続ストレージであってもよいが、データは、起動時に再構築されません。
-Datanode =>ノードの特定のファイルシステムには、我々は特定のデータを必要とするとき、働いている場合、それを見つけるために私たちに教え名前ノードと背景は、データノードに対応するサーバーを処理してデータノードからデータを取得するために、直接通信し、その後、具体的な読み取り/書き込み操作
-secondarynamenode =>冗長デーモン、バックアップメカニズム同等の名前ノードのメタデータを、定期的な更新、および通信名前ノードは、あなたが名前ノードとして画像、および名前ノードをマージし、編集しますバックアップ使用
-resourcemanager =>は、それによって、ノードマネージャの監視を担当クライアントを要求し、すべてのリソースの割り当てとスケジューリングを担当する糸デーモンプラットフォームであり、
-Nodemanager =>リソース管理は、単一のノードでのこのResourceManagerから特定のタスクとコマンドを実行
しますが、Hadoopのスケジューラを知っている19.下さいリスト、及びその作業方法の簡単な説明
schedular FIFO:デフォルトでは、FIFO原則
容量schedular :電源スケジューラを計算し、最小のフットプリントを選択し、高い優先順位が上となるよう、最初に実行されます。
フェアschedular:公平なスケジューリング、ジョブのすべてが同じリソースを持っています。
20.(二重鍵と値は、ソート)ソート2つのHadoopを達成する方法を説明してください
その後、減速中にソートそれらを行う、第1の方法は、すべてのキーの値がキャッシュされた減速を与えられているということです。しかし、与えられたキーのすべての値についてリデューサーを保存する必要性のために、それはメモリ不足にエラーが発生することがあります。

第二の方法は、一部または組み合わせ鍵を生成するために、元のキーの付加価値の全体です。両方の方法は、書き込み簡単に第一の方法の下で、それらの利点を有するが、(メモリ不足の危険に)同時実行、データボリューム状況低速の小さな度、

第二の方法は、より多くのデザインのアイデアのHadoop / ISの削減に沿って、のMapReduceフレームワークshuffleに並べ替えタスクの吸いました。この記事では、2番目の選択肢です。我々は、また、コンパレータを用意しております、すべてのデータが同じ減速に送信され、同じキー(オリジナルキー、追加が含まれていない)を持っていることを確認し、パーティション分割を書きますので、すぐにデータが到着するようリデューサーは、元のキーごとにグループ化されています。
21. MapReduceのパーティションを記述しての役割を兼ね備えてください
コンバイナは、マップの最後の段階で発生し、原則的には小さな減速もあり、主な役割は、減速の増加を削減し、ネットワーク伝送のボトルネックを軽減するために、データ出力の量を低減することです効率。

処理に割り当てられた異なる段階減速タスクに対して生成されたすべてのパーティションKVマップの主な効果は、処理負荷を軽減段階配分することができる
22のMapReduceスケジューリングモード(曖昧さの問題、糸は、スケジューリングモードとして理解することができるが、であってもよいが)内部ワークフローMRと理解
スケジューリング、管理及びreducetaskのmaptaskのディレクターとしてappmaster

開始、監視およびreducetaskのmaptaskためAppmaster責任

プロセスはMaptaskを完了した後、appmasterが監視され、その出力はReduceTaskに通知され、その後、地図ReduceTask端からファイルを引き出し、処理;

削減相は、appmasterだけでなく、自身のResourceManagerの取り消しを完了したとき
23.MapReduceワークフロー

上記プロセスは、以下の、特に詳細な処理をシャッフル、ステップ16の端部にステップ7から最も包括的なMapReduceの全体のワークフロープロセスでのみ開始シャッフル
へ出力するKV方法)MapTaskは(我々のマップを収集し、1)。メモリバッファ
複数のファイルがオーバーフローすることができ、メモリバッファオーバーフローローカルディスクファイルから連続的に)2を
複数の予備ファイルが大きい予備ファイルにマージする)3を
オーバーフロープロセスの統合の過程で)4と、呼び出す必要パーティショナパーティションとキーをソートする
。5)それらReduceTaskパーティション数に応じて、それぞれのパーティションに対応するデータを取得するMapTaskマシン結果
6)ReduceTaskは、これらのファイルはReduceTaskあろう、異なるMapTaskからの結果ファイルの同一のパーティションに移動します次いで、(マージソート)マージ
結合ファイルより大きい7の後)に、シャッフル処理(キーグループ、ユーザー定義ファイルからの呼び出しを(低減するために、1つずつ除去バックプロセスReduceTask論理演算に、上で)方法)
3。注意
シャッフルでのバッファサイズはMapReduceのプログラムの実施の効率に影響を与えますが、原則的には、バッファが大きいほど、ディスクIOの数が少ない、より速く行います。
バッファ・サイズ・パラメータは、パラメータを調整することができます:デフォルトの100Mをio.sort.mb。
24.Yarn作業メカニズム

2。詳細な作業メカニズム
(1)クライアントノードに提出MRプログラムが配置されています。
ResourceManagerアプリケーションを適用する(2)YarnRunner。
リソース・パスアプリケーションYarnRunner〜(3)RM戻ります。
(4)プログラムは、必要なリソースを提出するHDFS上で実行されます。
mrAppMasterを実行するために完了した申請書を提出すること(5)プログラムのリソース。
(6)RMは、ユーザの要求タスクに初期化されます。
(7)ノードマネージャタスクのタスクのいずれかを受信します。
(8)容器は、ノードマネージャコンテナを作成し、MRAppmasterを生成します。
(9)コンテナは、HDFSからローカルリソースにコピー。
RMにMapTaskリソースを実行している(10)MRAppmasterアプリケーション。
(11)RMは、2つの他のノードマネージャに割り当てMapTaskタスクを実行する他の2つのノードマネージャは、それぞれのタスクを受け取り、コンテナを作成します。
(12)MRは、二つのノードマネージャMapTask、MapTaskソートデータパーティションを開始された2つのノードマネージャ送信プログラムの起動スクリプトに委任を受けました。
全てMapTask用(13)MrAppMaster待つReduceTaskを実行容器RMへの適用後に実行が終了しました。
パーティションMapTaskに対応するデータを取得する(14)ReduceTask。
(15)は実行が終了した後、MR RMは、自分の取り消しを申請することになります。
25.Mapreduceの実行が遅くなる理由
のコンピュータのパフォーマンスを:CPU、メモリ、ディスクが健全である、ネットワーク
2最適化する/ O操作I
1)データスキュー
2)地図と無理数の削減
3)マップが長すぎる削減待機その結果、長すぎる実行
4)多数の小さなファイル
5)大きなファイルの大量ブロックできない
6)流出あまりにも多くの時間
7は)倍の過剰な数マージ
26.MapReduce最適化
データ入力、地図相、削減ステージ、IO伝送、およびデータスキューの問題共通チューニングパラメータ:6の観点から主にMapReduceの最適化方法
6.2.1データ入力
小さなファイルのマージを行う前に、MRタスク、小さなファイルが多数の多くを生成します。小さなファイルで(1)

タスクをロードするには時間がかかりながらも遅い実行MRその結果、負荷の数を増やすためのタスク、タスクのマップをマップします。
小さなファイルのシーン数のアドレス入力端への入力として(2)CombineTextInputFormat。
6.2.2Mapステージ
1)書き込みオーバーフロー(流出)時間を短縮する:トリガ増加、io.sort.mbとsort.spill.percentパラメータ値を調整することにより、
このようにしてディスクIOを低減する、スピルの数を減らし、メモリキャップ流出を。
2)合成(マージ)倍減少させる:差し込み文書の数を増やす、パラメータを調整することによってio.sort.factorし、それによって処理時間を短縮MR、マージの数を減らします。
3)マップした後、サービスロジックの前提に影響を与えずに、I / Oを削減するために、処理されるように組み合わせます
6.2.3Reduceステージ
1)マップの合理的なセットとの数削減:両方があまりにも低く設定することができない、それはあまりにも設定することはできません。少なすぎるとつながる
原因タスク待ち、処理時間、あまりにも多くの間のマップにつながるし、タスクがタイムアウトエラーを処理し、その結果、リソースの競合減らします。
2)共存を減らす、マップ設定:slowstart.completedmaps実行ある程度マッピングする調整パラメータ
の後度も待ち時間を短縮を低減するために、実行減らします。
3)使用を避けるを削減:大量の時間消費のためのネットワーク接続データセットを削減するため。
4)バッファの妥当セットが側面を減らす:デフォルトでは、データが閾値に達すると、バッファ内のデータがディスクに書き込まれ、その後reduce'llディスクからすべてのデータを取得します。バッファ低減され、その
直接ディスク書き込みのうち、に関連していない- >ディスクはこれに欠点があるため、データバッファの部分を減少させるために直接送達することができるように、パラメータによって構成されていてもよい、プロセスを読み取ります、それによって、IOオーバヘッドを低減:mapred.job.reduce.input.buffer.percentを、デフォルト値は0.0です。値が0より大きい場合には、データを保持する直接バッファメモリ読み出しの指定された割合を減らす示しました。したがって、バッファメモリを設定する必要性は、読み出されたデータは、必要
メモリであることだけでなく、そうジョブの操作に応じて調整することが、計算メモリを減らします。
送信6.2.4IO
1)、データ圧縮モードを使用する時にIOネットワークを低減します。インストールとスナッピーLZO圧縮符号化装置。
2)使用SequenceFileのバイナリが。
6.2.5データスキュー問題
1)データスキュー現象

傾きデータ周波数-一つの領域のデータ量が他の領域よりもはるかに大きいです。傾斜データサイズ-平均値の記録部のサイズよりもはるかに大きいです。
2)どのように傾斜して収集したデータに対して
出力処理における記録機能キーマップの追加詳細を減らします。
3)データのための方法の傾きを減少させる方法:サンプル範囲と分割は
、元のサンプリングされたデータ・パーティション境界設定値に得られた結果により設定することができます。
方法2:カスタムパーティション
出力キーの背景に基づいてカスタムパーティショニング。例えば、本からのマップ出力キー・ワードの場合。

そして、ここでいくつかのより多くの語彙を専門。その後は、固定された部分を送信するために、パーティションにこれらの専門的な語彙をカスタマイズすることができます

インスタンスを減らします。他の人が残っているに送信されますが、インスタンスを減らします。方法3:結合
多量の使用は、スキューデータを結合を低減することができます。可能では、結合オブジェクトは、集約され
たデータを減少させました。
方法4:マップが参加し、回避が参加減らします。
その実行が何より一般的な問題のプログラムマップ-減らす27.
こうした仕事のほとんどのように、しかし、いくつかのreduce'veが実行されてが常に存在しているが

これらのデータ処理は、データが原因によって引き起こさ分割の主要タスクの凹凸の傾斜していてもよい減らす他よりもはるかに大きい減少させるからです

溶液は、結合マップの最後に操作を前処理する多くのキー値に均等に分割処理時間のような散乱分割することができるデータ、またはデータのための分割ルールを再定義することができます

公開された133元の記事 ウォン称賛53 ビュー20000 +

おすすめ

転載: blog.csdn.net/weixin_43599377/article/details/104591656