Hadoop的基本概念和简单使用
文章目錄
- 1、概念
- 1.1、Hadoop 1.0和Hadoop 2.0
- 什么是Hadoo1.0
- 什么是Hadoo2.0
- 兩者區別
- Hadoop整體框架區別
- MapReduce計算框架區別
- 1.2、MapReduce和HDFS
- 什么是MapReduce
- 什么是HDFS
- 1.3、NameNode和DataNode
- 什么是Block
- 什么是NameNode
- 什么是DataNode
- 1.4、JobTracker和TaskTracker
- 什么是JobTracker
- 什么是TaskTracker
- 1.5、ResourceManager和NodeManager
- 2、Hadoop的簡單使用
- 2.1 創建文件夾
- 2.2 查看創建的文件夾
- 2.3 上傳文件
- 2.4 下載文件
- 2.5 運行一個mapreduce的demo程序:wordcount
1、概念
1.1、Hadoop 1.0和Hadoop 2.0
什么是Hadoo1.0
Hadoop1.0即第一代Hadoop,指的是版本為Apache Hadoop 0.20.x、1.x或者CDH3系列的Hadoop,內核主要是由HDFS和MapReduce兩個系統組成。
其中MapReduce是一個離線處理框架,由編程模式(新舊API)、運行時環境(JobTracker和TaskTracker)和數據處理引擎(MapTask和ReduceTask)三部分組成。
什么是Hadoo2.0
Hadoop2.0即第二代Hadoop,指的是版本為Apache Hadoop 0.23.x、2.x或者CDH4系列的Hadoop,內核主要由HDFS、MapReduce和YARN三個系統組成,其中YARN是一個資源管理系統,負責集群資源管理和調度,MapReduce則是運行在YARN上的離線處理框架,它與Hadoop 1.0中的MapReduce在編程模型(新舊API)和數據處理引擎(MapTask和ReduceTask)兩個方面是相同的。
兩者區別
Hadoop整體框架區別
Hadoop1.0由分布式存儲系統HDFS和分布式計算框架MapReduce組成,其中HDFS由一個NameNode和多個DateNode組成,MapReduce由一個JobTracker和多個TaskTracker組成。
Hadoop2.0為克服Hadoop1.0中的不足進行了下面改進:
MapReduce計算框架區別
MapReduce1.0計算框架主要由三部分組成:編程模型、數據處理引擎和運行時環境。它的基本編程模型是將問題抽象成Map和Reduce兩個階段,其中Map階段將輸入的數據解析成key/value,迭代調用map()函數處理后,再以key/value的形式輸出到本地目錄,Reduce階段將key相同的value進行規約處理,并將最終結果寫到HDFS上;它的數據處理引擎由MapTask和ReduceTask組成,分別負責Map階段邏輯和Reduce階段的邏輯處理;它的運行時環境由一個JobTracker和若干個TaskTracker兩類服務組成,其中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是一種編程模型,用于大規模數據集(大于1TB)的并行運算。概念"Map(映射)“和"Reduce(歸約)”,和它們的主要思想,都是從函數式編程語言里借來的,還有從矢量編程語言里借來的特性。它極大地方便了編程人員在不會分布式并行編程的情況下,將自己的程序運行在分布式系統上。 當前的軟件實現是指定一個Map(映射)函數,用來把一組鍵值對映射成一組新的鍵值對,指定并發的Reduce(歸約)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
重點:
1、MapReduce是一種分布式計算模型,是Google提出的,主要用于搜索領域,解決海量數據的計算問題。
2、MR有兩個階段組成:Map和Reduce,用戶只需實現map()和reduce()兩個函數,即可實現分布式計算。
什么是HDFS
DFS即分布式文件系統,分布式文件存儲在多個機器組成的集群中,用來管理分布式文件存儲的系統稱之為分布式文件系統。
HDFS即Hadoop分布式文件系統,它擅長存儲大文件,流式讀取,運行于一般性的商業硬件上。HDFS不適合存儲大量的小文件,namenode會在內存中存儲元數據,通常情況下每個文件、目錄和塊都將占用150個字節;也不適合任意并發寫的場景,HDFS的寫文件操作是append的模式。
1.3、NameNode和DataNode
什么是Block
在HDFS中,文件被分割成不同的塊存儲在集群的數據節點里,文件系統的元數據由文件系統集中管理。文件系統的塊通常是512字節,但是HDFS默認128M,但是和普通的文件系統相比,如果一個文件沒有達到128M,其并不會占滿整個塊。塊默認如此大是為了減少尋址時間。抽象出塊的概念的好處在于一個文件的大小可以超過整個磁盤,簡化存儲管理,很適合復制機制來實現高可用。
什么是NameNode
NameNode 是一個通常在 HDFS 實例中的單獨機器上運行的軟件。NameNode管理文件系統的命名空間,維護文件系統樹、所有文件、目錄以及塊的元數據,元數據有兩種namespace image和edit log。
什么是DataNode
DataNode 也是一個通常在 HDFS實例中的單獨機器上運行的軟件。NameNode擁有Block和DataNode之間的映射關系,但是它并不持久化這些信息,這些信息來源依賴于DataNode啟動時向NameNode發送的報告。DataNode維護著最終的Block,并定期向NameNode發送該DataNode包含的Block列表。
1.4、JobTracker和TaskTracker
什么是JobTracker
JobTracker是一個后臺服務進程,啟動之后,會一直監聽并接收來自各個TaskTracker發送的心跳信息,包括資源使用情況和任務運行情況等信息。
JobTracker的主要功能:
最重要的是狀態監控:主要包括TaskTracker狀態監控、作業狀態監控和任務狀態監控。主要作用:容錯和為任務調度提供決策依據。
什么是TaskTracker
TaskTracker是JobTracker和Task之間的橋梁:一方面,從JobTracker接收并執行各種命令:運行任務、提交任務、殺死任務等;另一方面,
將本地節點上各個任務的狀態通過心跳周期性匯報給JobTracker。TaskTracker與JobTracker和Task之間采用了RPC協議進行通信。
TaskTracker的主要功能:
機器級別信息:節點健康情況、資源使用情況等。
任務級別信息:任務執行進度、任務運行狀態等。
殺死作業(KillJobAction)和重新初始化(TaskTrackerReinitAction)。
1.5、ResourceManager和NodeManager
ResourceManager 是基于應用程序對資源的需求進行調度的 ; 每一個應用程序需要不同類型的資源因此就需要不同的容器。ResourceManager 是一個中心的服務,它做的事情是調度、啟動每一個 Job 所屬的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/input2.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/input2.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.txt2.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.txt2.5 運行一個mapreduce的demo程序:wordcount
運行以下examples-2.7.3.jar程序中的wordcount
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: 49File System CountersFILE: Number of bytes read=88FILE: Number of bytes written=237555FILE: Number of read operations=0FILE: Number of large read operations=0FILE: Number of write operations=0HDFS: Number of bytes read=184HDFS: Number of bytes written=54HDFS: Number of read operations=6HDFS: Number of large read operations=0HDFS: Number of write operations=2Job Counters Launched map tasks=1Launched reduce tasks=1Rack-local map tasks=1Total time spent by all maps in occupied slots (ms)=6450Total time spent by all reduces in occupied slots (ms)=4613Total time spent by all map tasks (ms)=6450Total time spent by all reduce tasks (ms)=4613Total vcore-milliseconds taken by all map tasks=6450Total vcore-milliseconds taken by all reduce tasks=4613Total megabyte-milliseconds taken by all map tasks=6604800Total megabyte-milliseconds taken by all reduce tasks=4723712Map-Reduce FrameworkMap input records=4Map output records=12Map output bytes=117Map output materialized bytes=88Input split bytes=115Combine input records=12Combine output records=7Reduce input groups=7Reduce shuffle bytes=88Reduce input records=7Reduce output records=7Spilled Records=14Shuffled Maps =1Failed Shuffles=0Merged Map outputs=1GC time elapsed (ms)=131CPU time spent (ms)=1490Physical memory (bytes) snapshot=290959360Virtual memory (bytes) snapshot=4160589824Total committed heap usage (bytes)=154607616Shuffle ErrorsBAD_ID=0CONNECTION=0IO_ERROR=0WRONG_LENGTH=0WRONG_MAP=0WRONG_REDUCE=0File Input Format Counters Bytes Read=69File Output Format Counters Bytes Written=54在YARN Web界面:http://192.168.223.131:8088/cluster
查看輸出結果:
總結
以上是生活随笔為你收集整理的Hadoop的基本概念和简单使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JavaWeb的web.xml中cont
- 下一篇: pssh批量执行启动tomcat报错:N