記事ディレクトリ
1.コンセプト
1.1、Hadoop 1.0およびHadoop 2.0
Hadoo 1.0とは
Hadoop1.0は、Hadoopの第1世代であり、Apache Hadoop 0.20.x、1.x、またはCDH3シリーズのHadoopバージョンを指し、カーネルは主にHDFS和MapReduce两个系统
構成されています。
オフライン処理MapReduceはフレームワーク由编程模式(新旧API)
で运行时环境(JobTracker和TaskTracker)
あり、数据处理引擎(MapTask和ReduceTask)
3つの部分があります。
Hadoo 2.0とは
Hadoop2.0は、Hadoopの第2世代であり、Apache Hadoop 0.23.x、2.x、またはCDH4シリーズのHadoopバージョンを指します。コアは主にHDFS、MapReduce和YARN三个系统组成
、クラスターリソースの管理とスケジューリングを担当するリソース管理システムであるYARN、およびMapReduceで構成されますこれは、YARNで実行されるオフライン処理フレームワークであり、プログラミングモデル(新旧API)およびデータ処理エンジン(MapTaskおよびReduceTask)の点で、Hadoop 1.0のMapReduceと同じです。
2つの違い
Hadoop全体のフレームワークの違い
Hadoop 1.0は、分散ストレージシステムHDFSと分散コンピューティングフレームワークMapReduceで構成されています。HDFSはNameNodeと複数のDateNodeで構成され、MapReduceはJobTrackerと複数のTaskTrackerで構成されています。
Hadoop2.0は、Hadoop1.0の欠点を克服するために以下の改善を行いました。
- Hadoop1.0の単一のNameNodeがHDFSのスケーラビリティを制限する問題を目指して、複数のNameNodeが異なるディレクトリを管理してアクセスの分離と水平方向の拡張を実現し、同時にNameNodeの単一障害点の問題を完全に解決できるHDFSフェデレーションを提案します。
- スケーラビリティとマルチフレームサポートの点でのHadoop 1.0のMapReduceの欠点を考慮して、ResourceManager(すべてのアプリケーションのリソース割り当てを担当)とApplicationMaster(アプリケーションの管理を担当)で構成されるJobTrackerのリソース管理とジョブ制御を分離します。プログラム)実装、つまり、リソース管理フレームワークYarnの導入。
- Yarnは、Hadoop2.0のリソース管理システムとして、さまざまなアプリケーションのリソースを管理およびスケジュールできる汎用リソース管理モジュールです。これは、MapReduceのフレームワークに限定されず、TezやSparkなどの他のフレームワークでも使用できます。 、ストームなど
MapReduceコンピューティングフレームワークの違い
MapReduce1.0コンピューティングフレームワークは主に、プログラミングモデル、データ処理エンジン、ランタイム環境の3つの部分で構成されています。その基本的なプログラミングモデルは、問題をMapとReduceの2つのステージに抽象化します。Mapステージは入力データをキー/値に解析し、map()関数を繰り返し呼び出して処理し、ローカルディレクトリにキー/値の形式で出力します。 、Reduceステージはキーを使用して同じ値を処理し、最終結果をHDFSに書き込みます。そのデータ処理エンジンは、MapステージとReduceステージのロジック処理をそれぞれ担当するMapTaskとReduceTaskで構成されています。ランタイム環境は、 JobTrackerといくつかのTaskTrackerサービスは2種類のサービスで構成されています。JobTrackerはリソース管理とすべてのジョブの制御を担当し、TaskTrackerはJobTrackerからコマンドを受信して実行します。
MapReducer2.0は、MRv1と同じプログラミングモデルとデータ処理エンジンを備えていますが、唯一の違いはランタイム環境です。MRv2は、MRv1に基づいて処理された後、リソース管理フレームワークYarnで実行されるコンピューティングフレームワークMapReduceです。そのランタイム環境は、JobTrackerやTaskTrackerなどのサービスで構成されなくなりましたが、一般的なリソース管理システムのYarnとジョブ制御プロセスApplicationMasterになります。Yarnはリソース管理のスケジューリングを担当し、ApplicationMasterはジョブ管理を担当します。
Hadoop1とHadoop2の違いは依然として非常に大きく、HDFSとMRは異なります。少なくとも構成ファイルは異なります。プロジェクトアプリケーションの場合は、できるだけ高いバージョンに移動することをお勧めします。より堅牢な場合は、最高バージョンより少し低い安定バージョンで十分です。
1.2、MapReduceおよびHDFS
MapReduceとは
MapReduceは、大規模なデータセット(1 TBを超える)での並列操作のプログラミングモデルです。「マップ」と「リデュース」の概念とその主なアイデアは、関数型プログラミング言語から借用したものであり、ベクトルプログラミング言語から借用した機能でもあります。分散並列プログラミングなしで、プログラマーが分散システムでプログラムを実行するのを非常に容易にします。現在のソフトウェアの実装では、マップ(マッピング)関数を指定して、キーと値のペアのセットを新しいキーと値のペアのセットにマップし、同時に削減する関数を指定して、マップされたすべてのキーと値のペアを確認します。それぞれが同じ鍵セットを共有します。
キーポイント:
1. MapReduceは、Googleが提案した分散コンピューティングモデルであり、主に検索フィールドで大量データの計算問題を解決するために使用されます。
2. MRはMapとReduceの2つのステージで構成されます。ユーザーは、分散コンピューティングを実現するために、map()とreduce()の2つの関数を実装するだけで済みます。
HDFSとは
DFSは分散ファイルシステムです。分散ファイルは、複数のマシンで構成されるクラスターに格納されます。分散ファイルストレージの管理に使用されるシステムは、分散ファイルシステムと呼ばれます。
HDFSはHadoop分散ファイルシステムであり、大きなファイルの保存、ストリームの読み取り、一般的な商用ハードウェアでの実行に適しています。HDFSは多数の小さなファイルを保存するのには適していません。Namenodeはメタデータをメモリに保存します。通常、各ファイル、ディレクトリ、ブロックは150バイトを占有します。また、同時書き込みシナリオ、HDFSファイル書き込み操作にも適していません。追加モードです。
1.3、NameNode和DataNode
ブロックとは
HDFSでは、ファイルは異なるブロックに分割され、クラスターのデータノードに格納され、ファイルシステムのメタデータはファイルシステムによって集中管理されます。ファイルシステムのブロックは通常512バイトですが、HDFSのデフォルトは128Mですが、通常のファイルシステムと比較すると、ファイルが128Mに達しない場合、ブロック全体を占有しません。デフォルトのブロックサイズは、アドレッシング時間を短縮することです。抽象出块的概念的好处在于一个文件的大小可以超过整个磁盘,简化存储管理,很适合复制机制来实现高可用
。
NameNodeとは
NameNodeは、通常、HDFSインスタンスの別のマシンで実行されるソフトウェアです。NameNodeは、ファイルシステムの名前空間を管理し、ファイルシステムツリー、すべてのファイル、ディレクトリ、ブロックのメタデータを維持します。メタデータには、名前空間イメージと編集ログの2種類があります。
DataNodeとは
DataNodeは、通常、HDFSインスタンスの別のマシンで実行されるソフトウェアの一部でもあります。NameNodeには、BlockとDataNodeの間のマッピング関係がありますが、この情報は保持されません。この情報のソースは、DataNodeの起動時にNameNodeに送信されるレポートによって異なります。DataNode维护着最终的Block,并定期向NameNode发送该DataNode包含的Block列表。
1.4、JobTrackerとTaskTracker
JobTrackerとは
JobTrackerはバックグラウンドサービスプロセスであり、起動後は常に、リソースの使用状況やタスクの実行ステータスなどの各TaskTrackerから送信されたハートビート情報を監視および受信します。
JobTrackerの主な機能:
- ジョブ制御:hadoopでは、各アプリケーションはジョブとして表され、各ジョブは複数のタスクに分割されます。JobTrackerのジョブ制御モジュールは、ジョブの分解とステータスの監視を担当します。
最も重要なのはステータスモニタリングです。主にTaskTrackerステータスモニタリング、ジョブステータスモニタリング、タスクステータスモニタリングが含まれます。主な役割:フォールトトレランスとタスクスケジューリングの意思決定の基盤を提供します。 - 資源管理。
TaskTrackerとは
TaskTrackerはJobTracker和Task之间的桥梁
、一方ではJobTrackerからさまざまなコマンド(タスクの実行、タスクの送信、タスクの強制終了など)を受信して実行します。他方で
は、ローカルノード上の各タスクのステータスを定期的にハートビートを通じてJobTrackerに報告します。RPCプロトコルは、TaskTrackerとJobTrackerとTask間の通信に使用されます。
TaskTrackerの主な機能:
汇报心跳
:トラッカーは、ハートビートメカニズムを通じて、すべてのノードに関するさまざまな情報を定期的にJobTrackerに報告します。この情報には、次の2つの部分が含まれます。
マシンレベルの情報:ノードの状態、リソースの使用状況など。
タスクレベルの情報:タスクの実行の進捗状況、タスクの実行ステータスなど执行命令
:JobTrackerは、タスクの起動(LaunchTaskAction)、送信タスク(CommitTaskAction)、タスクの強制終了(KillTaskAction)、
ジョブの強制終了(KillJobAction)、再初期化(TaskTrackerReinitAction)など、さまざまなコマンドをTaskTrackerに発行します。
1.5、ResourceManagerとNodeManager
ResourceManagerはアプリケーションのリソース要件に基づいています。各アプリケーションには異なるタイプのリソースが必要であるため、異なるコンテナが必要です。ResourceManager 是一个中心的服务
、それが行うことは、各ジョブが属するApplicationMasterをスケジュールし、起動し、ApplicationMasterの存在を監視することです。
NodeManagerは各マシンフレームワークのエージェントであり、アプリケーションを実行し、アプリケーション(CPU、メモリ、ハードディスク、ネットワーク)のリソース使用状況を監視し、スケジューラ(ResourceManager)にレポートするコンテナです。
ApplicationMasterの責任には、スケジューラーからの適切なリソースコンテナーの要求、タスクの実行、アプリケーションのステータスの追跡とその進行状況の監視、およびタスクの失敗の原因の処理が含まれます。
2. Hadoopの簡単な使用
Hadoopクラスターの構築については、「CentOS7でのHadoopクラスターの構築」を参照してください。
2.1フォルダーを作成する
HDFSにフォルダー/ test / inputを作成します
[root@hadoop-master bin]# hadoop fs -mkdir -p /test/input
2.2作成したフォルダを表示する
[root@hadoop-master bin]# hadoop fs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2020-08-19 12:19 /test
[root@hadoop-master bin]# hadoop fs -ls /test
Found 1 items
drwxr-xr-x - root supergroup 0 2020-08-19 12:19 /test/input
2.3ファイルをアップロードする
テストファイルを準備する
[root@hadoop-master test]# vi hw_hadoop.txt
[root@hadoop-master test]# cat hw_hadoop.txt
hello world leo825
hello world hadoop
hello that girl
hello that boy
HDFSの/ test / inputフォルダーにファイルをアップロードします。
[root@hadoop-master test]# hadoop fs -put ./hw_hadoop.txt /test/input
アップロード結果を確認する
[root@hadoop-master test]# hadoop fs -ls /test/input
Found 1 items
-rw-r--r-- 2 root supergroup 69 2020-08-19 12:26 /test/input/hw_hadoop.txt
2.4ファイルをダウンロードする
[root@hadoop-master local]# hadoop fs -get /test/input/hw_hadoop.txt ./
[root@hadoop-master local]# ll
总用量 12
drwxr-xr-x. 2 root root 6 4月 11 2018 bin
drwxr-xr-x. 2 root root 6 4月 11 2018 etc
drwxr-xr-x. 2 root root 6 4月 11 2018 games
drwxr-xr-x. 4 root root 30 8月 8 10:59 hadoop
-rw-r--r--. 1 root root 69 8月 19 16:52 hw_hadoop.txt
2.5 mapreduce:wordcountのデモプログラムを実行する
次の例でワードカウントを実行します-2.7.3.jarプログラム
hadoop jar /usr/local/hadoop/apps/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/input /test/output
の結果
[root@hadoop-master test]# hadoop jar /usr/local/hadoop/apps/hadoop-2.7.3/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /test/input /test/output
20/08/19 17:25:55 INFO client.RMProxy: Connecting to ResourceManager at hadoop-master/192.168.223.131:8032
20/08/19 17:25:56 INFO input.FileInputFormat: Total input paths to process : 1
20/08/19 17:25:56 INFO mapreduce.JobSubmitter: number of splits:1
20/08/19 17:25:57 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1597810488836_0001
20/08/19 17:25:57 INFO impl.YarnClientImpl: Submitted application application_1597810488836_0001
20/08/19 17:25:57 INFO mapreduce.Job: The url to track the job: http://hadoop-master:8088/proxy/application_1597810488836_0001/
20/08/19 17:25:57 INFO mapreduce.Job: Running job: job_1597810488836_0001
20/08/19 17:26:08 INFO mapreduce.Job: Job job_1597810488836_0001 running in uber mode : false
20/08/19 17:26:08 INFO mapreduce.Job: map 0% reduce 0%
20/08/19 17:26:18 INFO mapreduce.Job: map 100% reduce 0%
20/08/19 17:26:25 INFO mapreduce.Job: map 100% reduce 100%
20/08/19 17:26:26 INFO mapreduce.Job: Job job_1597810488836_0001 completed successfully
20/08/19 17:26:26 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=88
FILE: Number of bytes written=237555
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=184
HDFS: Number of bytes written=54
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Rack-local map tasks=1
Total time spent by all maps in occupied slots (ms)=6450
Total time spent by all reduces in occupied slots (ms)=4613
Total time spent by all map tasks (ms)=6450
Total time spent by all reduce tasks (ms)=4613
Total vcore-milliseconds taken by all map tasks=6450
Total vcore-milliseconds taken by all reduce tasks=4613
Total megabyte-milliseconds taken by all map tasks=6604800
Total megabyte-milliseconds taken by all reduce tasks=4723712
Map-Reduce Framework
Map input records=4
Map output records=12
Map output bytes=117
Map output materialized bytes=88
Input split bytes=115
Combine input records=12
Combine output records=7
Reduce input groups=7
Reduce shuffle bytes=88
Reduce input records=7
Reduce output records=7
Spilled Records=14
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=131
CPU time spent (ms)=1490
Physical memory (bytes) snapshot=290959360
Virtual memory (bytes) snapshot=4160589824
Total committed heap usage (bytes)=154607616
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=69
File Output Format Counters
Bytes Written=54
YARN Webインターフェース:http://192.168.223.131:8088/cluster
出力結果を表示します。
[root@hadoop-master test]# hadoop fs -ls /test/output
Found 2 items
-rw-r--r-- 2 root supergroup 0 2020-08-19 17:26 /test/output/_SUCCESS
-rw-r--r-- 2 root supergroup 54 2020-08-19 17:26 /test/output/part-r-00000
[root@hadoop-master test]# hadoop fs -cat /test/output/part-r-00000
boy 1
girl 1
hadoop 1
hello 4
leo825 1
that 2
world 2