以下是 Hadoop 集群的核心配置步驟,基于之前的免密登錄和文件同步基礎,完成 Hadoop 分布式環境的搭建:
1. 集群規劃
假設集群包含 3 個節點:
- master:NameNode、ResourceManager
- slave1:DataNode、NodeManager
- slave2:DataNode、NodeManager
2. 核心配置文件
在master 節點上編輯 Hadoop 配置文件(路徑:/opt/hadoop/etc/hadoop
):
2.1?core-site.xml
配置 HDFS 的默認文件系統和臨時目錄:
xml
<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9000</value></property><property><name>hadoop.tmp.dir</name><value>/opt/hadoop/data/tmp</value></property>
</configuration>
2.2?hdfs-site.xml
配置 HDFS 的副本數和數據存儲路徑:
xml
<configuration><property><name>dfs.replication</name><value>2</value> <!-- 數據副本數,應小于等于DataNode數量 --></property><property><name>dfs.namenode.name.dir</name><value>file:/opt/hadoop/data/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:/opt/hadoop/data/datanode</value></property><property><name>dfs.webhdfs.enabled</name><value>true</value></property>
</configuration>
2.3?mapred-site.xml
配置 MapReduce 運行在 YARN 上:
xml
<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>mapreduce.application.classpath</name><value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value></property>
</configuration>
2.4?yarn-site.xml
配置 YARN 的資源調度器和 NodeManager:
xml
<configuration><property><name>yarn.resourcemanager.hostname</name><value>master</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</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>
2.5?workers
(原 slaves 文件)
指定 DataNode 和 NodeManager 所在的從節點:
plaintext
slave1
slave2
3. 同步配置到所有節點
使用之前的同步腳本將配置分發到所有節點:
bash
/opt/hadoop/bin/sync_hadoop.sh etc/hadoop/
4. 初始化 HDFS
在master 節點上執行:
bash
# 創建必要目錄
mkdir -p /opt/hadoop/data/{tmp,namenode,datanode}# 格式化NameNode(首次啟動前執行)
hdfs namenode -format
5. 啟動集群
在master 節點上執行:
bash
# 啟動HDFS服務
start-dfs.sh# 啟動YARN服務
start-yarn.sh# 查看進程狀態
jps
預期看到的進程:
- master:NameNode、ResourceManager、SecondaryNameNode
- slave1/slave2:DataNode、NodeManager
6. 驗證集群
6.1 Web 界面訪問
- HDFS 管理界面:http://master:9870
- YARN 資源管理界面:http://master:8088
6.2 命令行測試
bash
# 創建測試目錄
hdfs dfs -mkdir /test# 上傳文件
hdfs dfs -put /etc/hosts /test/# 查看文件列表
hdfs dfs -ls /test# 運行MapReduce示例
yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi 10 100
7. 配置優化建議
內存分配優化
在yarn-site.xml
中添加:
xml
<property><name>yarn.nodemanager.resource.memory-mb</name><value>8192</value> <!-- 每個NodeManager可用內存(MB) -->
</property>
<property><name>yarn.scheduler.maximum-allocation-mb</name><value>4096</value> <!-- 單個容器最大內存(MB) -->
</property>
Java 堆內存優化
在hadoop-env.sh
中添加:
bash
export HADOOP_NAMENODE_OPTS="-Xmx4g"
export HADOOP_DATANODE_OPTS="-Xmx2g"
8. 常見問題排查
- NameNode 啟動失敗:檢查
/opt/hadoop/data/namenode
目錄權限 - DataNode 未注冊:確保所有節點的
clusterID
一致(查看data/namenode/current/VERSION
) - YARN 任務無法運行:檢查 NodeManager 日志,確認內存配置是否合理
完成以上配置后,你的 Hadoop 集群將具備分布式存儲(HDFS)和計算(MapReduce/YARN)能力。
分享