🐇明明跟你說過:個人主頁
🏅個人專欄:《大數據前沿:技術與應用并進》🏅
🔖行路有良友,便是天堂🔖
目錄
一、引言
1、Hadoop簡介
2、Hadoop集群概念
3、 Hadoop 集群的工作流程
二、安裝環境準備
1、服務器
2、準備環境?
三、集群部署?
1、nameNode安裝
2、dataNode安裝?
3、訪問測試?
一、引言
1、Hadoop簡介
Hadoop 是一個由 Apache 軟件基金會開發的開源框架,專門用于處理和存儲海量數據。它以分布式計算為核心,可以在一個計算機集群上高效地處理和分析大規模數據集。Hadoop 的設計目標是提供可靠性、擴展性和分布式存儲與計算的能力。以下是 Hadoop 的幾個主要組件:
1. Hadoop 分布式文件系統 (HDFS):
- HDFS 是 Hadoop 的存儲系統,專為處理大數據量設計。它將數據分割成塊,并將這些塊分布在集群中的多個節點上。HDFS 提供高吞吐量的數據訪問,并通過數據的多副本來確保容錯性和高可用性。
2. MapReduce:
- MapReduce 是 Hadoop 的計算模型,用于處理和生成大規模數據集。它將任務分為兩個階段:Map 階段和 Reduce 階段。Map 階段將輸入數據分割成鍵值對進行處理,而 Reduce 階段則匯總這些結果。這個模型非常適合處理大規模的分布式數據。
3. YARN (Yet Another Resource Negotiator):
- YARN 是 Hadoop 的資源管理器,它負責管理集群資源的調度和分配。YARN 允許多個數據處理引擎(如 MapReduce、Spark)在同一個集群上運行,并優化資源使用。
4. Hadoop Common:
- Hadoop Common 包含了 Hadoop 框架中使用的通用工具和庫。這些工具提供了文件系統和操作系統級別的抽象,以及各種實用程序庫來支持 Hadoop 的其他模塊。
Hadoop 的主要優勢在于它的擴展性和成本效益。通過將數據和計算分布在大量廉價的計算機節點上,Hadoop 能夠處理幾乎無限量的數據,適合用于大數據分析、日志處理、數據倉庫等場景。
2、Hadoop集群概念
1. 節點類型:
NameNode:
- 是 HDFS 的主節點,負責管理文件系統的命名空間(元數據),包括文件和目錄的結構以及文件塊的位置信息。
DataNode:
- 是 HDFS 的工作節點,負責存儲實際的數據塊,并根據 NameNode 的指令執行讀寫操作。
Secondary NameNode:
- 并不是集群中的必要組件,但它的作用是對 NameNode 進行備份,并合并 fsimage 和 edit logs 文件來減小 NameNode 的內存壓力。它并不提供集群的高可用性支持。
JobTracker (MapReduce 1.x):
- 負責接收客戶端提交的作業請求,并分配作業給 TaskTracker。
TaskTracker (MapReduce 1.x):
- 執行由 JobTracker 分配的任務(map 或 reduce)。
ResourceManager (YARN, MapReduce 2.x):
- 替代了 JobTracker 的角色,負責集群資源的管理和調度。
NodeManager (YARN, MapReduce 2.x):
- 替代了 TaskTracker 的角色,負責監控容器(Container)的生命周期。
2. HDFS 架構:
- HDFS 采用主從架構,其中 NameNode 是主節點,DataNode 是從節點。
- 文件被分割成塊(默認大小為 128MB 或 64MB),每個塊可以被復制到集群的不同節點上以提高容錯性。
- NameNode 保存文件系統元數據,而 DataNode 存儲實際的數據塊。
3. MapReduce 框架:
- MapReduce 是一種編程模型,用于大規模數據集的并行處理。
- 數據處理分為兩個階段:Map 階段和 Reduce 階段。
- Map 函數對輸入數據進行處理,生成中間鍵值對。
- Reduce 函數對相同鍵的值進行匯總或聚合,產生最終輸出。
4. YARN (Yet Another Resource Negotiator):
- YARN 是 Hadoop 2.x 引入的一個資源管理系統,它使得 Hadoop 集群可以支持多種計算框架,而不僅僅是 MapReduce。
- ResourceManager 負責整個集群的資源管理和調度,NodeManager 負責單個節點上的資源管理。
- ApplicationMaster 負責與 ResourceManager 協商資源,并與 NodeManager 交互來執行和監控任務。
?
3、 Hadoop 集群的工作流程
1. 文件存儲:
- 用戶通過客戶端將文件寫入 HDFS,NameNode 根據文件大小和配置決定如何分割文件,并將塊分布到不同的 DataNode 上。
- DataNode 接收塊并存儲在本地文件系統中,并向 NameNode 報告狀態。
2. 數據處理:
- 用戶提交 MapReduce 作業到 JobTracker 或 ResourceManager。
- 作業被分解成多個任務(map 或 reduce),這些任務被分配給集群中的各個節點執行。
- 數據在本地處理,減少網絡傳輸開銷(數據本地性原則)。
3. 容錯機制:
- Hadoop 設計時就考慮到了節點故障的可能性。例如,文件塊會被復制到多個節點上,以保證即使某些節點失效,數據仍然是可訪問的。
- 當某個節點失敗時,NameNode 或 ResourceManager 會重新調度任務到其他可用節點上。
?
二、安裝環境準備
1、服務器
準備3臺服務器,1個作為nameNode,2個作為dataNode,這里我們用的系統版本是 Centos 7.9,大家也可以使用其他系統,方法基本一致
2、準備環境?
分別在3臺機器上執行
關閉Selinux
vi /etc/selinux/config
將?SELINUX=enforcing 修改為?SELINUX=disabled
之后重啟服務器
禁用防火墻
systemctl stop firewalld && systemctl disable firewalld
添加阿里鏡像源
sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum clean all
sudo yum makecache fast
安裝JAVA
sudo yum install -y java-1.8.0-openjdk-devel
驗證結果
java -version
添加環境變量?
vim /etc/profile
在文件最后添加如下內容
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64
export PATH=$JAVA_HOME/bin:$PATH
使環境變量生效
source /etc/profile
配置hosts,三臺機器都要添加
vim /etc/hosts
添加如下內容
192.168.40.140 namenode
192.168.40.141 datanode1
192.168.40.142 datanode2
下載安裝包,只在nameNode執行即可
[root@namenode ~]# wget https://dlcdn.apache.org/hadoop/common/hadoop-3.4.0/hadoop-3.4.0.tar.gz
解壓安裝包
[root@namenode local]# tar zxvf hadoop-3.4.0.tar.gz
[root@namenode ~]# mv hadoop-3.4.0 /usr/local/hadoop
配置nameNode到各節點免密連接
[root@namenode ~]# ssh-keygen
一路回車即可
接下來將密鑰拷貝到各節點
[root@namenode ~]# ssh-copy-id root@namenode
[root@namenode ~]# ssh-copy-id root@datanode1
[root@namenode ~]# ssh-copy-id root@datanode2
三、集群部署?
1、nameNode安裝
修改配置文件
[root@nameNode hadoop]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
在文件末尾添加
export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64"
編輯配置文件
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml# 修改如下
<configuration><property><name>fs.defaultFS</name><value>hdfs://nameNode:9000</value></property>
</configuration>
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml# 修改如下內容
<configuration><property><name>dfs.http.address</name><value>0.0.0.0:50070</value></property><property><name>dfs.namenode.http-address</name><value>namenode:50070</value></property><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>file:///usr/local/hadoop/data/namenode</value></property><property><name>dfs.datanode1.data.dir</name><value>file:///usr/local/hadoop/data/datanode</value></property>
</configuration>
[root@namenode ~]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml# 添加如下內容
<configuration><property><name>yarn.resourcemanager.hostname</name><value>namenode</value></property>
</configuration>
修改環境變量,三臺都要改
[root@namenode bin]# vim /etc/profile#配置文件中添加以下內容
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
?使環境變量生效
source /etc/profile
在namenode執行初始化
[root@namenode bin]# cd /usr/local/hadoop/bin
[root@namenode bin]# ./hdfs namenode -format
啟動
[root@namenode bin]# cd /usr/local/hadoop/sbin/
[root@namenode sbin]# ./start-all.sh
訪問測試?
瀏覽器地址欄輸入?http://192.168.40.140:50070/
2、dataNode安裝?
拷貝安裝包到兩臺dataNode節點
[root@namenode ~]# scp -r /usr/local/hadoop/ root@datanode1:/usr/local/hadoop/
[root@namenode ~]# scp -r /usr/local/hadoop/ root@datanode2:/usr/local/hadoop/
修改配置文件
[root@datanode1 ~]# vim /usr/local/hadoop/etc/hadoop/workers # 添加如下內容
namenode
datanode1
datanode2
?創建目錄
mkdir /usr/local/hadoop/data/namenode -p
啟動
[root@datanode1 sbin]# cd /usr/local/hadoop/sbin
[root@datanode1 sbin]# ./hadoop-daemon.sh start datanode
[root@datanode2 ~]# cd /usr/local/hadoop/sbin/
[root@datanode2 sbin]# ./hadoop-daemon.sh start datanode
3、訪問測試?
在瀏覽器輸入 namenode 的IP加 50070 端口
顯示如下則證明成功
💕💕💕每一次的分享都是一次成長的旅程,感謝您的陪伴和關注。希望這些關于大數據的文章能陪伴您走過技術的一段旅程,共同見證成長和進步!😺😺😺
🧨🧨🧨讓我們一起在技術的海洋中探索前行,共同書寫美好的未來!!!???