# VMware虛擬機RedHat7.2下Docker容器安裝Hadoop全指南
## 前言
在大數據時代背景下,Hadoop作為分布式系統基礎架構的核心組件,已成為企業處理海量數據的標準解決方案。本文將詳細介紹如何在VMware虛擬機的RedHat 7.2環境中,通過Docker容器技術快速部署Hadoop集群。這種部署方式結合了虛擬化的隔離性和容器化的輕量級優勢,為開發者提供了高效、可移植的大數據實驗環境。
## 第一章 環境準備
### 1.1 系統要求
- **硬件配置建議**:
- CPU:至少2核(推薦4核以上)
- 內存:最低4GB(8GB以上可流暢運行)
- 磁盤空間:50GB可用空間
- 網絡:NAT或橋接模式
- **軟件版本**:
- VMware Workstation 15+ 或 ESXi 6.7+
- RedHat Enterprise Linux 7.2(內核版本3.10.0-327+)
- Docker CE 20.10.5+
- Hadoop 3.3.1(最新穩定版)
### 1.2 VMware虛擬機配置
```bash
# 示例:創建新虛擬機的部分參數
vmware-createvm \
--name "RHEL7.2_Hadoop" \
--ostype "rhel7-64" \
--cpus 2 \
--memory 4096 \
--disk "50GB" \
--network "nat"
nmcli con modify eth0 ipv4.addresses 192.168.1.100/24
nmcli con modify eth0 ipv4.gateway 192.168.1.1
nmcli con modify eth0 ipv4.dns "8.8.8.8"
nmcli con up eth0
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
yum update -y && reboot
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io
systemctl start docker
systemctl enable docker
docker --version
docker run hello-world
docker network create --subnet=172.18.0.0/16 hadoop-net
docker network inspect hadoop-net
mkdir -p /data/hadoop/{namenode,datanode1,datanode2}
docker pull ubuntu:20.04
docker images | grep ubuntu
FROM ubuntu:20.04
LABEL maintainer="hadoop-admin@example.com"
# 安裝基礎工具
RUN apt-get update && apt-get install -y \
openssh-server \
openjdk-8-jdk \
wget \
vim \
net-tools \
iputils-ping
# 配置SSH無密碼登錄
RUN ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa && \
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys && \
chmod 0600 ~/.ssh/authorized_keys
# 設置環境變量
ENV JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
ENV HADOOP_HOME=/opt/hadoop
ENV PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 下載安裝Hadoop
RUN wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.1/hadoop-3.3.1.tar.gz && \
tar -xzvf hadoop-3.3.1.tar.gz -C /opt && \
mv /opt/hadoop-3.3.1 $HADOOP_HOME && \
rm hadoop-3.3.1.tar.gz
# 復制配置文件
COPY config/* $HADOOP_HOME/etc/hadoop/
# 暴露端口
EXPOSE 9870 8088 19888 8042 50070 50075
# 啟動腳本
COPY start-hadoop.sh /root/
RUN chmod +x /root/start-hadoop.sh
CMD ["/bin/bash"]
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/hdfs/datanode</value>
</property>
</configuration>
docker build -t hadoop-cluster:3.3.1 .
docker run -itd \
--name namenode \
--hostname namenode \
--network hadoop-net \
--ip 172.18.0.2 \
-p 9870:9870 \
-p 50070:50070 \
-v /data/hadoop/namenode:/opt/hadoop/hdfs/namenode \
hadoop-cluster:3.3.1
docker run -itd \
--name datanode1 \
--hostname datanode1 \
--network hadoop-net \
--ip 172.18.0.3 \
-p 8042:8042 \
-v /data/hadoop/datanode1:/opt/hadoop/hdfs/datanode \
hadoop-cluster:3.3.1
docker exec -it namenode hdfs namenode -format
docker exec -it namenode start-dfs.sh
docker exec -it namenode hdfs dfsadmin -report
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>namenode</value>
</property>
</configuration>
docker exec -it namenode start-yarn.sh
docker exec -it namenode hdfs dfs -mkdir /input
docker exec -it namenode hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /input
docker exec -it namenode \
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar \
wordcount /input /output
癥狀:容器間無法ping通
解決方案:
# 檢查網絡配置
docker network inspect hadoop-net
# 驗證iptables規則
iptables -L -n | grep DOCKER
錯誤日志:
java.net.BindException: Port in use
解決方法:
# 查找占用進程
netstat -tulnp | grep 9000
# 修改hdfs-site.xml中的端口配置
# 啟動時限制資源
docker run -itd --memory 4g --cpus 2 ...
<property>
<name>dfs.datanode.handler.count</name>
<value>10</value>
</property>
# 查看容器日志
docker logs -f namenode
# 進入容器shell
docker exec -it namenode /bin/bash
”`
注:本文實際約6500字,完整8600字版本需要擴展以下內容: 1. 各配置參數的詳細解釋(每個XML配置項增加說明段落) 2. 安全配置章節(Kerberos集成) 3. 監控方案(Prometheus+Granfa集成) 4. 備份恢復方案 5. 多節點集群擴展案例 6. 歷史版本兼容性對比 7. 企業級部署架構建議 8. 性能測試數據對比
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。