記事のディレクトリ
Hadoopの基本的な知識の組み合わせ
1つは、Hadoopコアフレームワークです。
1.ビッグデータとは何ですか?特徴は何ですか?
大量のデータ、従来のツールでは収集および管理できず、高い計算能力を必要とするデータ。
機能:4V
ボリューム:大規模なトラフィック
多様性:多様化
速度:高速
値:低値
理論はGoogleのビッグテーブルペーパーに基づいています
2.Hadoopビッグデータオープンソースフレームワーク
ビッグデータ分散ストレージとビッグデータ分散コンピューティングの問題を解決するために、Apacheのトップレベルのオープンソースプロジェクトは、オープンソースフレームワークを作成します。
ビッグデータ分散と従来の分散の違いは、
従来の分散です。従来の分散の比較各ノードのパフォーマンスに依存します。実行速度は、どのノードが遅いかによって、どのノードのパフォーマンスを促します。
ビッグデータは、パフォーマンスを向上させるために時間のスペースを使用するために分散されます。
コアコンポーネント:
分散ストレージフレームワーク:hdfs
分散コンピューティングフレームワーク:MapReduce
分散管理フレームワーク:ヤーン(hadoop 2. x start)
2、hdfs
1.hdfsとは
本質的にはファイルシステムですが、分散ファイルシステムです。保存されている大きなファイルは複数のブロックブロックに分割され、異なるノードに保存されます。同時に、他のノードには複数のバックアップデータがあります。セキュリティは高く、大きなものの処理に適しています。ファイル(GB〜PB)
2.ファイルを書き込むプロセス:
クライアントはnamenodeに書き込み要求を送信し、namenodeはfsimageの情報を読み取り、書き込み可能かどうかを確認するために編集します。
書き込み可能である場合は、書き込まれたファイルのブロック情報を計算し、メタデータ情報を生成し、書き込む必要があります。 ;編集に、そして同期バッククライアント側にそれを送信し
、他のdatanodesに広がるリクエストをメタデータに最も近いデータノードへのクライアント側の最初の書き込みをし、このデータノード、
すべての書き込みが完了した後、すべてのdatanodesは名前ノードに完了した情報を報告;
namenodeは書き込み編集を確認します(保存します)。そうでない場合、編集は削除されます。
編集とfsimageは、secondaryNamenodeによってコピーおよびマージされます(空き時間に処理されます)。
3.ファイルを読み取るプロセス:
クライアントはnamenodeにリクエストを送信し、namenodeはfsimageの情報を読み取って編集し、クライアントから送信されたアドレスに従ってメタデータ情報をクライアントに返します。クライアントはメタデータ情報に従って最も近いデータノードからデータを読み取ります。 、およびデータノードはリクエストを拡散します。
4.一般的に使用されるコマンド:
(1) 客户端命令:hdfs dfs
hdfs dfs -mkdir -p 递归创建目录
hdfs dfs -rmr 删除目录
hdfs dfs -lsr 递归查看目录
hdfs dfs -put 从本地目录hdfs的目录
hdfs dfs -copyToLocal hdfs的目录下载到本地目录
hdfs dfs -appendToFile 追加文件
(2) 管理命令:hdfsadmin
(3) oev和oiv: 分别查看edits 和fsimage
5. Namenode、datanode、secondaryNamenodeのジョブ機能
Namenode:メタデータの管理、クライアントとの対話、datanodeとsecondaryNamenodeの管理Datanode
:データの読み取りと書き込み、namenodeへのハートビートの定期的な送信を担当します
。SecondaryNamenode:セカンダリnamenodeはfsimageとeditslogをマージし、データバックアップの管理を担当します。
6、Java API
Configuration conf; 对象获取对应的配置信息
FileSystem fs; 由conf对象创建对象的文件系统
由文件系统执行各种增删改查等操作
三、毛糸
1.糸の役割
hadoop2.0から導入された主な目的は、MapReduceの管理圧力を共有することであり、他のコンピューティングフレームワークコードMapReduceを使用できます。
2、ResourceManager和NodeManager
すべてのジョブリクエストは、NodeManagerも管理するResourceManagerによって管理されます
。NodeManagerは主にResourceManagerのタスクに対応し、コンテナのライフサイクルを管理し、resourceManagerにハートビートを送信し、データノードのリソース消費を管理します。
3.糸の操作機構
(1)クライアントがコンピューティングタスクを送信すると、ResourceManagerは要求を受け入れ、Appmanagerを作成し、APPmanagerはjobidディレクトリとhdfsディレクトリをクライアントにフィードバックし、クライアントは特定のjarパッケージと一時データおよびターゲットデータ情報をアップロードします。
(2)ResourceManagerは、namenodeからメタデータ情報を取得した後にResourceSchedularを作成し、メタデータ情報に基づいて大まかなシェドゥルファイル(プロジェクト計画)を生成して、複数のデータノードを必要とするリソースと、各データノードに含まれるデータブロックの数を取得します。
(3)リソース消費量の少ないnodeManagerは、sheduleの操作を具体的に複製するAppMasterを作成します。
AppMasterは最初にhdfsディレクトリに移動して、特定のjarパッケージ、一時ファイル、およびその他の情報を取得し、各データノードに必要な特定のリソースを計算し、ResourceSchedularにレポートし、sheduleファイルを更新し、同時にAppManagerからリソース権限を申請します。
(4)AppMasterは権限を取得した後、sheduleファイルに従って対応するNodeManagerにコンテナを作成するタスクを送信します。各コンテナはそれに応じてtaskTrakerを作成し、hdfsからjarパッケージと一時ファイルをダウンロードし、MapTaskなどの特定のタスクを作成します。 ReduceTaskを実行し、jarパッケージの実行を開始します。実行プロセス中に、コンテナは各ステージの進行状況をリアルタイムでAppMasterにフィードバックし、そのハートビートをNodeManagerにフィードバックします。実行が完了すると、結果は徐々にクライアント側にフィードバックされます。NameNodeは対応する編集を書き込みます。
四、MapReduce
1. MapReduceのバージョンは何ですか?
hadoop 1.0では、ビッグデータの計算とジョブタスク管理が複製され、ジョブタスク管理はjobTrakerとtaskTrakerによって処理されました
。hadoop2.0では、ビッグデータ分散コンピューティングの機能に重点が置かれていました。
2. MapReduceのメカニズムは
、実行される関数をjarパッケージの形式で各ノードに分散し、各ノードはjarパッケージの機能を実行します。
従来の分散コンピューティングは、ノードのデータをコンピューティングノードに集中させることです。コンピューティングノードはそれを均一に実行します。
3. MapReduceワークフローの
マップフェーズ:タスク、対応するテキストフラグメントの受け入れ、行への分割、キーと値のペアの形成<オフセット、行のコンテンツ>、マップフェーズに入り、セットアップでキャッシュファイルをロードし、マップを読み込みますビジネス処理用のコンテンツ行を取得し、キーと値のペアを介して書き出し、80%を超えてオーバーフローし始めるまで、リングバッファーに入ります。
シャッフルステージ:オーバーフロー書き込みの開始からシャッフルステージ、パーティション(つまり、マップによって出力されたキーをハッシュした後にノード数の残りを取得した結果)、およびパーティションの結果の並べ替え(高速並べ替え) )小さなファイルパーティションが順序付けられてマージされるようにするには大きなファイルに、パーティションが整然としていることを確認します。パーティションの結果に応じて、パーティションの内容が対応するノードに配布され、ノードが大きなファイルにマージされて、パーティション内の順序が確保されます。キーのグループ化に従って、各キーに対応するグループがリデュースフェーズに入ります。
リデュースフェーズ:ビジネスプロセスが完了すると、各ノードに1つのファイルがあり、各レデューサーが順番にデータを書き込みます。
4、Java API
TestMapper extends Mapper<LongWritable,Text,...,...>{
Map(LongWritable key,Text value,Context context){
对value做处理
context.write(...,...);
}
}
TestReducer extends Reducer<...,...,...,...>{
Map(... key,Iterable<...> value,Context context){
...
}
}
TestDriver{
Main{
Configuration conf; //模拟一个hadoop配置实例
Job job=Job.getInstance(conf); //模拟向这个hadoop发送job请求
对driver、mapper和reducer等的配置
对输出格式的映射
对输入输出文件地址的映射
运行
}
}