HDFS(Hadoop分布式文件系統)的正常運行依賴Linux網絡的穩定配置,主要包括Linux系統網絡基礎設置和Hadoop網絡參數調優兩部分。以下是詳細步驟:
靜態IP是集群節點間通信的基礎,需修改網絡接口配置文件(路徑因發行版而異):
/etc/sysconfig/network-scripts/ifcfg-ens33
(ens33
為網卡名,可通過ip addr
查看),添加/修改以下內容:BOOTPROTO=static # 使用靜態IP
IPADDR=192.168.1.100 # 集群節點唯一IP
NETMASK=255.255.255.0 # 子網掩碼
GATEWAY=192.168.1.1 # 網關地址
DNS1=8.8.8.8 # 主DNS服務器
DNS2=8.8.4.4 # 備用DNS服務器
ONBOOT=yes # 開機自動啟用網絡
/etc/netplan/00-installer-config.yaml
,添加以下內容:network:
version: 2
ethernets:
ens33:
dhcp4: no # 禁用DHCP
addresses: [192.168.1.100/24] # IP地址及子網掩碼
gateway4: 192.168.1.1 # 網關
nameservers:
addresses: [8.8.8.8, 8.8.4.4] # DNS服務器
修改后重啟網絡服務:
# CentOS/RHEL
sudo systemctl restart network
# Ubuntu/Debian
sudo netplan apply
驗證IP配置:ip addr show ens33
。
hostnamectl
命令設置唯一主機名(如namenode
、datanode1
):sudo hostnamectl set-hostname namenode
/etc/hosts
文件,添加集群所有節點的IP與主機名映射(避免依賴外部DNS):192.168.1.100 namenode
192.168.1.101 datanode1
192.168.1.102 datanode2
驗證解析:ping namenode
。
防火墻和SELinux會阻止Hadoop節點間的通信,測試時可暫時關閉:
# CentOS/RHEL(使用firewalld)
sudo systemctl stop firewalld
sudo systemctl disable firewalld
# Ubuntu(使用ufw)
sudo ufw disable
/etc/selinux/config
,將SELINUX=enforcing
改為SELINUX=disabled
,然后執行setenforce 0
。Hadoop集群需要節點間無密碼通信(如NameNode向DataNode發送指令),需生成SSH密鑰并分發:
# 生成RSA密鑰對(默認保存在~/.ssh/id_rsa)
ssh-keygen -t rsa -P ""
# 將公鑰復制到所有節點(包括自身)
ssh-copy-id root@namenode
ssh-copy-id root@datanode1
ssh-copy-id root@datanode2
# 測試免密登錄
ssh namenode # 無需輸入密碼
ssh datanode1
Hadoop的核心網絡配置集中在core-site.xml
和hdfs-site.xml
文件中(路徑:$HADOOP_HOME/etc/hadoop/
)。
core-site.xml
(核心文件系統配置)core-site.xml
定義了HDFS的默認文件系統和RPC通信地址,關鍵配置如下:
<configuration>
<!-- 指定HDFS的默認文件系統URI(namenode的IP/主機名:端口) -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value> <!-- 生產環境建議使用域名 -->
</property>
<!-- Hadoop臨時目錄(用于存儲中間數據) -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value> <!-- 路徑需提前創建并授權 -->
</property>
</configuration>
hdfs-site.xml
(HDFS特定配置)hdfs-site.xml
配置了HDFS的副本數、數據目錄、RPC處理線程數等關鍵參數,關鍵配置如下:
<configuration>
<!-- 數據塊副本數(生產環境建議3,測試環境可設為1) -->
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- NameNode數據存儲目錄 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/namenode</value> <!-- 路徑需提前創建并授權 -->
</property>
<!-- DataNode數據存儲目錄 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/datanode</value> <!-- 路徑需提前創建并授權 -->
</property>
<!-- NameNode RPC處理線程數(處理客戶端請求的并發數,根據集群規模調整) -->
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<!-- DataNode RPC處理線程數(處理客戶端讀寫請求的并發數) -->
<property>
<name>dfs.datanode.handler.count</name>
<value>100</value>
</property>
<!-- DataNode最大數據傳輸線程數(提升數據傳輸效率) -->
<property>
<name>dfs.datanode.max.transfer.threads</name>
<value>4096</value>
</property>
<!-- 是否檢查DataNode的IP與主機名是否匹配(生產環境建議true,避免DNS問題) -->
<property>
<name>dfs.namenode.datanode.registration.ip-hostname-check</name>
<value>true</value>
</property>
</configuration>
編輯/etc/profile
文件,添加Hadoop環境變量(將/opt/hadoop
替換為實際安裝路徑):
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
使配置生效:source /etc/profile
。
hdfs namenode -format
start-dfs.sh
jps
命令查看NameNode和DataNode進程是否啟動(NameNode節點顯示NameNode
,DataNode節點顯示DataNode
)。http://namenode:50070
。50010-50020
、50070-50080
等端口);使用域名代替IP地址,避免主機名解析問題。core-site.xml
和hdfs-site.xml
配置需保持一致,避免通信錯誤。