目錄
- 前言
- 一、 單機模式
- 二、 偽分布式模式
- 三、 完全分布式模式(重點)
- 3.1 準備工作
- 3.2 配置集群
- 3.2.1 配置core-site.xml 文件
- 3.2.2 配置hdfs-site.xml 文件
- 3.2.3 配置yarn-site.xml 文件
- 3.2.4 配置mapred-site.xml 文件
- 3.3 啟動集群
- 3.3.1 配置workers
- 3.3.2 啟動集群
- 3.3.3 集群測試
- 總結
前言
Hadoop作為一種強大的大數據處理框架,有多種運行模式,每種模式都適用于不同的使用場景。本文將介紹Hadoop的三種常見運行模式:單機模式、偽分布式模式和完全分布式模式。
一、 單機模式
單機模式是Hadoop最簡單的運行模式。在單機模式下,所有Hadoop組件都運行在單個機器上,包括HDFS、MapReduce等。由于只有一個節點參與計算,單機模式適用于開發和測試階段,不適用于處理大規模數據。在單機模式下,Hadoop的所有組件運行在同一進程中,能夠快速展示整個處理流程,方便開發人員進行調試和驗證。
我們這里就拿官方的WordCount做一個簡單的演示:
- 在hadoop-3.2.4文件下面創建一個input文件夾
[amo@hadoop102 hadoop-3.2.4]$ mkdir input
- 在input文件下創建一個word.txt文件
[amo@hadoop102 hadoop-3.2.4]$ cd input
- 編輯word.txt文件
[amo@hadoop102 hadoop-3.2.4]$ vim word.txt
- 在文件中輸入如下內容
hadoop hello
hdfs mapreduce yarn
amoxilin amoxilin
- 保存退出::wq
- 回到Hadoop目錄/opt/module/hadoop-3.2.4
- 執行程序
[amo@hadoop102 hadoop-3.2.4]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.4.jar wordcount input output
- 查看結果
[amo@hadoop102 hadoop-3.2.4]$ cat output/part-r-00000
看到如下結果:
amoxilin 2
hadoop 1
hello 1
hdfs 1
mapreduce 1
yarn 1
二、 偽分布式模式
偽分布式模式是Hadoop的中級運行模式。在偽分布式模式下,Hadoop的各個組件運行在單臺計算機上,但每個組件都是獨立運行的。這意味著可以模擬一個小規模的分布式環境,包括一個主節點Namenode和多個工作節點Datanode。偽分布式模式適用于在本地環境中進行開發和測試,并且能夠模擬數據分片和分布式計算的過程,從而更真實地了解Hadoop的工作原理。
以下是配置 Hadoop 偽分布式模式的一般步驟:
-
安裝 Hadoop:按照 Hadoop 的官方文檔,下載并安裝合適版本的 Hadoop。
-
配置 HDFS:編輯 Hadoop 配置文件 core-site.xml 和 hdfs-site.xml ,設置適當的配置參數。例如,指定本地文件系統作為 HDFS 的存儲路徑,并設置副本數。
-
配置 YARN:編輯 YARN 配置文件 yarn-site.xml ,設置適當的參數,如指定本地資源管理器地址和可用的計算資源。
-
設置環境變量:將 Hadoop 的 bin 目錄路徑添加到系統的 PATH 環境變量中。
-
配置 SSH:啟用 SSH,并配置免密登錄以設置 Hadoop 的分布式通信。
-
啟動 Hadoop:運行啟動腳本,啟動 HDFS 和 YARN。可以通過瀏覽器訪問相應的管理控制臺,如 NameNode 頁面、ResourceManager 頁面等。
-
執行任務和作業:提交 MapReduce 任務或其他計算任務到 Hadoop 集群,并通過 Hadoop 提供的 API 或命令行工具進行操作。
需要注意的是,偽分布式模式僅適用于開發和測試目的,因為只有一個物理/虛擬機器負責運行所有的組件,所以它并不能提供真正的分布式性能和容錯能力。
總之,Hadoop 偽分布式模式是用于在單臺計算機上模擬分布式環境的配置方式,可用于本地開發、調試和驗證大數據應用程序。這里只做簡單的介紹,感興趣的可以自己搭一下玩玩,重點是下面的完全分布式模式。
三、 完全分布式模式(重點)
完全分布式模式是Hadoop的最常用運行模式。在完全分布式模式下,Hadoop集群由多臺計算機組成,每個節點扮演著不同的角色。集群中包含一個主節點Namenode和多個工作節點Datanode,每個節點負責存儲和處理數據。完全分布式模式可以處理大規模的數據集,并且具有高可靠性和容錯性。Hadoop集群通過分布式存儲和計算的方式,實現了大規模數據的快速處理和分析。
3.1 準備工作
1) 準備三臺服務器,安裝并配置jdk和hadoop
2)集群部署規劃
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode / DateNode | DataNode | SecondaryNameNode / DataNode |
YARN | NodeManager | ResourceManager / NodeManager | NodeManager |
注意:NameNode和SecondaryNameNode不要安裝在同一臺服務器,ResourceManager也很消耗內存,不要和NameNode、SecondaryNameNode配置在同一臺機器上
3)配置文件說明
Hadoop配置文件分為兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才需要修改自定義配置文件,更改相應屬性值。
-
配置文件:core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 四個配置文件存放在$HADOOP_HOME/etc/hadoop 這個路徑下面,用戶可以根據項目需求重新進行修改配置。
-
core-site.xml
:這個文件包含了Hadoop核心配置的相關屬性,比如文件系統的默認URI (fs.defaultFS)、臨時文件目錄 (hadoop.tmp.dir)等。 -
hdfs-site.xml
:這個文件包含了HDFS(Hadoop分布式文件系統)的相關配置屬性,比如副本數 (dfs.replication)、數據塊大小 (dfs.blocksize)等。 -
mapred-site.xml
:這個文件包含了MapReduce框架的相關配置屬性,比如MapReduce作業歷史服務器地址 (mapreduce.jobhistory.address)、任務并行度 (mapreduce.job.running.map.limit)等。在較新的Hadoop版本中,這個文件被廢棄,相關配置已經移動到yarn-site.xml中。 -
yarn-site.xml
:這個文件包含了YARN(Yet Another Resource Negotiator)的相關配置屬性,比如NodeManager的內存限制 (yarn.nodemanager.resource.memory-mb)、ApplicationMaster的內存限制 (yarn.app.mapreduce.am.resource.mb)等。
-
3.2 配置集群
3.2.1 配置core-site.xml 文件
<configuration><!-- 指定NameNode的地址--><property><name>fs.defaultFS</name><value>hdfs://hadoop102:8020</value></property><!-- 指定Hadoop數據的存儲目錄--><property><name>hadoop.tmp.dir</name><value>/opt/module/hadoop-3.2.4/data</value></property><!-- 配置HDFS網頁登錄使用的靜態用戶為amo--><property><name>hadoop.http.staticuser.user</name><value>amo</value></property>
</configuration>
3.2.2 配置hdfs-site.xml 文件
<configuration><!-- nn web端訪問地址 --><property><name>dfs.namenode.http-address</name><value>hadoop102:9870</value></property><!-- 2nn web端訪問地址 --><property><name>dfs.namenode.secondary.http-address</name><value>hadoop104:9868</value></property>
</configuration>
3.2.3 配置yarn-site.xml 文件
<configuration><!-- 指定MR走shuffle --><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><!-- 指定ResourceManager的地址 --><property><name>yarn.resourcemanager.hostname</name><value>hadoop103</value></property><!-- 環境變量的繼承 --><property><name>yarn.nodemanager.env-whitelist</name><value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value></property>
</configuration>
3.2.4 配置mapred-site.xml 文件
<configuration><!-- 指定MapReduce程序運行在Yarn上--><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>
配置完成之后,在集群上分發配置好的Hadoop配置文件,然后去hadoop103和hadoop104查看配置文件分發情況
3.3 啟動集群
3.3.1 配置workers
vim /opt/module/hadoop-3.2.4/etc/hadoop/workers
hadoop102
hadoop103
hadoop104
注意:該文件添加的內容結尾不允許有空格,文件中不允許有空行
同步所有節點xsync /opt/module/hadoop-3.2.4/etc/hadoop/workers
前提是你已經為每個節點進行了hostname的命名。而且每個節點的hosts文件你修改了本地dns的指向,讓這些主機指向約定好的IP。然后每個節點的hosts文件保持同步。
3.3.2 啟動集群
# 格式化NameNode 如果集群是第一次啟動,需要在hadoop102節點格式化NameNode
[amo@hadoop102 hadoop-3.2.4]$ hdfs namenode -format
# 啟動hdfs
[amo@hadoop102 hadoop-3.2.4]$ sbin/start-dfs.sh
# 啟動yarn 在配置了resourceManager的節點(hadoop103)啟動yarn
[amo@hadoop102 hadoop-3.2.4]$ sbin/start-yarn.sh
(注意:格式化 NameNode,會產生新的集群id,導致 NameNode 和 DataNode 的集群id不一致,集群找不到以往數據。如果集群在運行過程中報錯,需要重新格式化 NameNode 的話,一定要先停止 NameNode 和 DataNode 進程,并且刪除所有機器的data和logs目錄,然后再進行格式化)
jps可以查看各個節點的配置是否和我們的集群規劃避暑一致
Web端查看hdfs的NameNode
- 瀏覽器中輸入
hadoop102:9870
- 查看hdfs上的存儲信息
Web查看yarn的ResourceManager
- 瀏覽器輸入:
hadoop103:8088
- 查看yarn上運行的Job信息
3.3.3 集群測試
- 上傳文件到集群
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -mkdir /wcinput # 創建文件夾
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -put wcinput/word.txt /wcinput # 將word.txt文件上傳到集群
上傳成功之后,查看hdfs上的存儲信息就可以看到文件上傳到集群了,如下圖所示:
想查看文件的具體內容,點擊文件名稱,再點 Tail the file (last 32K) 就可查看啦,當然左邊的 Download 也是支持下載的。
那么,文件上傳到集群了,這里只是做一個展示而已,并不是文件存儲的位置,文件具體存儲的位置是在hdfs里面
$HADOOP_HOME/data/dfs/data/current/BP-1831339301-192.168.1.4-1709219313284/current/finalized/subdir0/subdir0
這里的 $HADOOP_HOME 其實就是你hadoop在服務器安裝的位置,然后可以通過cat 文件名
查看文件內容和上面做一個對比,確認文件上傳以及存儲的位置是沒問題就好了。
=== 到這里完全分布式模式就初步搭好了===
總結
總結起來,Hadoop的三種運行模式:單機模式、偽分布式模式和完全分布式模式,分別適用于不同的場景和需求。單機模式適用于開發和測試,偽分布式模式適用于模擬小規模分布式環境,而完全分布式模式則是處理大規模數據的最佳選擇。根據具體的需求,選擇合適的運行模式,可以充分發揮Hadoop的強大功能和性能。