大數據系統架構實踐(二):Hadoop集群部署
文章目錄
- 大數據系統架構實踐(二):Hadoop集群部署
- 一、Hadoop簡介
- 二、部署前準備
- 三、部署Hadoop集群
- 1. 下載并解壓安裝包
- 2. 配置hadoop-env.sh
- 3. 配置core-site.xml
- 4. 配置hdfs-site.xml
- 5. 配置mapred-site.xml
- 6. 配置yarn-site.xml
- 7. 同步Hadoop目錄
- 8. 配置環境變量(三臺主機都要進行配置)
- 9. 格式化hdfs文件系統
- 10. 修改啟動腳本
- 11. 啟動Hadoop集群
- 12. 界面展示
- 總結
隨著數據規模的持續增長,傳統單機存儲和處理方式已無法滿足現代企業對海量數據的存儲、分析與處理需求。Hadoop 作為 Apache 生態下最重要的大數據基礎平臺之一,提供了分布式存儲(HDFS)與分布式計算(MapReduce/YARN)能力,廣泛應用于日志分析、數據倉庫、機器學習等場景。
在本系列中,我們將圍繞 Hadoop 在大數據系統中的地位與部署實踐展開介紹。本篇作為第二篇,將聚焦于 Hadoop 的核心架構、組件說明、典型集群部署方式以及相關配置方法,為后續深入掌握其生態組件(如 Hive、HBase 等)奠定基礎。
一、Hadoop簡介
Hadoop 是一個開源的分布式計算框架,由 Apache 基金會維護,旨在處理海量數據的存儲與計算任務。它基于 Google 的 GFS(Google File System)和 MapReduce 論文設計,實現了高可靠性、高可擴展性的大數據處理平臺。
Hadoop 的 核心特性
包括:
- 高容錯性:通過數據冗余和副本機制保障系統在節點宕機時仍可正常運行
- 橫向擴展性:可通過增加普通商用服務器節點,線性擴展計算與存儲能力
- 高吞吐量:適合批處理大規模數據任務
- 與硬件無關:在廉價硬件上運行,降低成本
Hadoop 包含兩個 核心模塊
:
- HDFS(Hadoop Distributed File System):分布式文件系統,負責存儲海量數據,并通過副本機制提升數據可靠性
- YARN(Yet Another Resource Negotiator):資源調度與管理平臺,用于統一調度集群資源,并支持多種計算框架如
MapReduce、Spark
此外,Hadoop 生態系統中還包括 Hive、HBase、Pig、Oozie 等豐富的組件,構建了功能強大、靈活可擴展的大數據平臺,廣泛應用于互聯網、電商、金融、電信等行業。
二、部署前準備
Hadoop 是一個典型的主從架構系統,分為 資源管理節點 和 數據處理節點。為了實現高可用和負載均衡,通常部署為多節點集群:
- 最基本的部署架構包括:1 個 NameNode + 多個 DataNode
- 為提高高可用性,可以部署 Secondary NameNode 或使用 HA 模式
- 集群規模可根據業務需求擴展,一般從 3 臺起步是比較常見的實踐方式
在生產環境中,3 臺服務器組成的小型 Hadoop 集群 可兼顧資源利用與基礎高可用,適用于功能驗證、開發測試和中小數據處理場景。
? 三臺服務器的配置與角色
節點名稱 | 主機名 | ip地址 | 角色 |
---|---|---|---|
master | master | 192.168.100.1 | NameNode,DataNode,NodeManager,ResourceManager,JobHistoryServer |
slave1 | slave1 | 192.168.100.2 | DataNode,NodeManager,ResourceManager |
slave2 | slave2 | 192.168.100.3 | DataNode,NodeManager,SecondaryNameNode |
SecondaryNameNode 不是 NameNode 的熱備節點,它的作用是定期合并 FsImage 和 EditLog,減輕 NameNode 壓力,但不能在主 NameNode 故障時接管工作
? JDK 依賴環境
Hadoop 是用 Java 編寫的,運行前請確保已安裝 JDK 1.8 或以上版本
三、部署Hadoop集群
以下步驟在 master
節點上執行,其他節點通過配置同步
1. 下載并解壓安裝包
# 下載地址(以3.2.0版本為例)
https://archive.apache.org/dist/hadoop/common/# 解壓移動
tar xf hadoop-3.2.0.tar.gz
mv hadoop-3.2.0 /usr/local/hadoop
2. 配置hadoop-env.sh
cat > /usr/local/hadoop/etc/hadoop/hadoop-env.sh <<-EOF
export JAVA_HOME=/usr/local/jdk #根據實際的jdk安裝路徑填寫
export HADOOP_PID_DIR=/usr/local/hadoop/pids
EOF
3. 配置core-site.xml
用于定義 HDFS 入口、臨時目錄和代理權限
vim /usr/local/hadoop/etc/hadoop/core-site.xml<configuration><property><name>fs.defaultFS</name><value>hdfs://master:9820</value></property><property><name>hadoop.tmp.dir</name><value>file:///usr/local/hadoop/tmp/hadoop-${user.name}</value></property><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
</configuration>
# 擴展配置,hadoop控制臺安全認證
<property><name>hadoop.security.authorization</name><value>false</value></property><property><name>hadoop.security.authentication</name><value>simple</value></property><property><name>hadoop.http.filter.initializers</name><value>org.apache.hadoop.security.AuthenticationFilterInitializer</value></property><property><name>hadoop.http.authentication.type</name><value>simple</value></property><property><name>hadoop.http.authentication.token.validity</name><value>3600</value></property><property><name>hadoop.http.authentication.signature.secret.file</name><value>/usr/local/hadoop/etc/hadoop/hadoop-http-auth-signature-secret</value></property><property><name>hadoop.http.authentication.cookie.domain</name><value></value></property><property><name>hadoop.http.authentication.simple.anonymous.allowed</name><value>false</value>
</property>
4. 配置hdfs-site.xml
配置 HDFS 數據目錄、副本策略及其他參數
vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml<configuration><property><name>dfs.namenode.name.dir</name><value>file:/usr/local/hadoop/dfs/name</value></property><property><name>dfs.datanode.data.dir</name><value>file:/usr/local/hadoop/dfs/data</value></property><property><name>dfs.replication</name><value>2</value></property><property><name>dfs.namenode.secondary.http-address</name><value>slave2:9868</value></property><property><name>dfs.permissions</name><value>false</value></property><property><name>dfs.datanode.socket.write.timeout</name><value>600000</value></property><property><name>dfs.client.socket-timeout</name><value>300000</value></property><property><name>dfs.datanode.max.transfer.threads</name><value>16384</value></property><property><name>dfs.datanode.du.reserved</name><value>10737418240</value></property><property><name>dfs.datanode.balance.bandwidthPerSec</name><value>52428800</value></property><property><name>dfs.datanode.balance.max.concurrent.moves</name><value>50</value></property>
</configuration>
5. 配置mapred-site.xml
指定使用 YARN 資源管理框架
vim /usr/local/hadoop/etc/hadoop/mapred-site.xml<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property><property><name>yarn.app.mapreduce.am.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.map.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.reduce.env</name><value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value></property><property><name>mapreduce.application.classpath</name><value>/usr/local/hadoop/etc/hadoop,/usr/local/hadoop/share/hadoop/common/*,/usr/local/hadoop/share/hadoop/common/lib/*,/usr/local/hadoop/share/hadoop/hdfs/*,/usr/local/hadoop/share/hadoop/hdfs/lib/*,/usr/local/hadoop/share/hadoop/mapreduce/*,/usr/local/hadoop/share/hadoop/mapreduce/lib/*,/usr/local/hadoop/share/hadoop/yarn/*,/usr/local/hadoop/share/hadoop/yarn/lib/*</value></property><property><name>mapreduce.map.memory.mb</name><value>2048</value></property><property>
<!-- 日志監控服務的地址,一般填寫為namenode機器地址 --><name>mapreduce.jobhistory.address</name><value>master:10020</value></property><property><name>mapreduce.jobhistory.webapp.address</name><value>master:19888</value></property>
</configuration>
6. 配置yarn-site.xml
定義 YARN 的高可用機制及資源調度參數
touch /usr/local/hadoop/etc/hadoop/yarn-hosts.exclude # 不創建這個目錄可能會導致訪問不了8088端口
vim /usr/local/hadoop/etc/hadoop/yarn-site.xml<!-- 開啟RM高可用 -->
<configuration><property><name>yarn.resourcemanager.ha.enabled</name><value>true</value></property><property><name>yarn.resourcemanager.cluster-id</name><value>cluster1</value></property>
<!-- 設置集群中的ha代號名 --><property><name>yarn.resourcemanager.ha.rm-ids</name><value>rm1,rm2</value></property>
<!-- 將剛才設置的rm1代號對應上集群服務器的hostname --><property><name>yarn.resourcemanager.hostname.rm1</name><value>master</value></property>
<!-- 將剛才設置的rm2代號對應上集群服務器的hostname --><property><name>yarn.resourcemanager.hostname.rm2</name><value>slave1</value></property><property><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> <property><name>yarn.nodemanager.resource.memory-mb</name><value>4096</value></property><property><name>yarn.scheduler.capacity.maximum-am-resource-percent</name><value>0.9</value></property><property> <name>yarn.application.classpath</name><value>/usr/local/hadoop/etc/hadoop,/usr/local/hadoop/share/hadoop/common/*,/usr/local/hadoop/share/hadoop/common/lib/*,/usr/local/hadoop/share/hadoop/hdfs/*,/usr/local/hadoop/share/hadoop/hdfs/lib/*,/usr/local/hadoop/share/hadoop/mapreduce/*,/usr/local/hadoop/share/hadoop/mapreduce/lib/*,/usr/local/hadoop/share/hadoop/yarn/*,/usr/local/hadoop/share/hadoop/yarn/lib/*</value></property>
<!-- 指定Zookeeper集群地址 --><property><name>hadoop.zk.address</name><value>master:2181,slave1:2181,slave2:2181</value></property><property><name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name><value>org.apache.hadoop.mapred.ShuffleHandler</value></property><property><name>yarn.resourcemanager.address.rm1</name><value>master:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm1</name><value>master:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address.rm1</name><value>master:8031</value></property><property><name>yarn.resourcemanager.admin.address.rm1</name><value>master:8033</value></property><property><name>yarn.resourcemanager.webapp.address.rm1</name><value>master:8088</value></property><property><name>yarn.resourcemanager.address.rm2</name><value>slave1:8032</value></property><property><name>yarn.resourcemanager.scheduler.address.rm2</name><value>slave1:8030</value></property><property><name>yarn.resourcemanager.resource-tracker.address.rm2</name><value>slave1:8031</value></property><property><name>yarn.resourcemanager.admin.address.rm2</name><value>slave1:8033</value></property><property><name>yarn.resourcemanager.webapp.address.rm2</name><value>slave1:8088</value></property><!-- 日志聚合-spark-yarn --><property><name>yarn.log-aggregation-enable</name><value>true</value></property><property><name>yarn.log.server.url</name><value>http://master:19888/jobhistory/logs</value></property>
<!-- 日志時長 --><property><name>yarn.log-aggregation.retain-seconds</name><value>640800</value></property>
<!-- 日志聚合目錄 --><property><name>yarn.nodemanager.remote-app-log-dir</name><value>/usr/container/logs</value></property> <property><name>hadoop.zk.timeout-ms</name><value>120000</value></property><property><name>yarn.resourcemanager.nodes.exclude-path</name><value>/usr/local/hadoop/etc/hadoop/yarn-hosts.exclude</value></property>
</configuration>
7. 同步Hadoop目錄
scp -rp /usr/local/hadoop root@slave1:/usr/local/ &>/dev/null
scp -rp /usr/local/hadoop root@slave2:/usr/local/ &>/dev/null
8. 配置環境變量(三臺主機都要進行配置)
cat >> /etc/profile <<-EOF
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native
EOF# 生效環境變量
source /etc/profile
9. 格式化hdfs文件系統
hdfs namenode -format# 驗證是否生成fsimage文件,驗證hdfs格式化是否成功
ls /usr/local/hadoop/dfs/name/current/
10. 修改啟動腳本
# start-dfs.sh / stop-dfs.sh
sed -i '1a \
HDFS_DATANODE_USER=root\
HADOOP_SECURE_DN_USER=hdfs\
HDFS_NAMENODE_USER=root\
HDFS_SECONDARYNAMENODE_USER=root' /usr/local/hadoop/sbin/start-dfs.sh
sed -i '1a \
HDFS_DATANODE_USER=root\
HADOOP_SECURE_DN_USER=hdfs\
HDFS_NAMENODE_USER=root\
HDFS_SECONDARYNAMENODE_USER=root' /usr/local/hadoop/sbin/stop-dfs.sh# start-yarn.sh / stop-yarn.sh
sed -i '1a \
YARN_RESOURCEMANAGER_USER=root\
HADOOP_SECURE_DN_USER=yarn\
YARN_NODEMANAGER_USER=root' /usr/local/hadoop/sbin/start-yarn.sh
sed -i '1a \
YARN_RESOURCEMANAGER_USER=root\
HADOOP_SECURE_DN_USER=yarn\
YARN_NODEMANAGER_USER=root' /usr/local/hadoop/sbin/stop-yarn.sh
11. 啟動Hadoop集群
/usr/local/hadoop/sbin/start-all.sh# 驗證
netstat -tnlp | grep -E "9870|8088"
12. 界面展示
HDFS Web UI:http://192.168.100.1:9870
YARN Web UI:http://192.168.100.1:8088
總結
🚀 本文圍繞 Hadoop 集群構建展開,詳述了基礎環境準備與三節點配置示例,重點介紹了各項配置文件如何支撐集群高可用與性能運行。通過這些步驟,我們成功部署了一個兼具 HDFS 存儲與 YARN 調度功能的 Hadoop 環境,為后續 HBase、Hive 等大數據組件打下良好基礎。
📌 下一篇將聚焦 HBase 分布式部署方案,講解其與 Hadoop 集群的有機整合,以及如何構建一個完整數據生態系統。