docker搭建hadoop
时间: 2024-12-28 19:26:29 浏览: 16
### 使用Docker部署和配置Hadoop集群
#### 创建并准备基础环境
为了使用 Docker 部署 Hadoop 集群,首先需要安装 Docker 并确保其正常运行。接着可以基于官方 CentOS 或 Ubuntu 镜像来创建一个新的镜像,在其中安装必要的软件包以及 Hadoop。
```bash
sudo yum install -y java-openjdk-devel hadoop
```
上述命令用于在基于 Red Hat 的系统上安装 Java 和 Hadoop[^1]。
#### 构建自定义的 Hadoop Docker 镜像
通过编写 `Dockerfile` 来定制化所需的操作系统环境:
```dockerfile
FROM centos:7
MAINTAINER your_email@example.com
RUN yum update -y && \
yum install -y java-1.8.0-openjdk wget tar gzip && \
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.2.1/hadoop-3.2.1.tar.gz && \
tar -xzvf hadoop-3.2.1.tar.gz -C /usr/local/ && \
ln -s /usr/local/hadoop-3.2.1 /usr/local/hadoop && \
echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0' >> ~/.bashrc && \
echo 'export PATH=$PATH:$JAVA_HOME/bin:/usr/local/hadoop/bin' >> ~/.bashrc
WORKDIR /usr/local/hadoop
CMD ["bash"]
```
这段脚本会拉取CentOS 7的基础镜像,并在其之上安装OpenJDK与指定版本的Hadoop。
#### 启动多个容器模拟多台机器组成的集群
利用 Docker Compose 可简化此过程,编辑 `docker-compose.yml` 文件如下所示:
```yaml
version: '3'
services:
master:
build: .
container_name: master
hostname: master
environment:
SERVICE_NAME: master
networks:
hadoopnet:
ipv4_address: 192.168.0.2
slave1:
build: .
container_name: slave1
hostname: slave1
depends_on:
- master
environment:
SERVICE_NAME: slave1
networks:
hadoopnet:
ipv4_address: 192.168.0.3
slave2:
build: .
container_name: slave2
hostname: slave2
depends_on:
- master
environment:
SERVICE_NAME: slave2
networks:
hadoopnet:
ipv4_address: 192.168.0.4
networks:
hadoopnet:
driver: bridge
ipam:
config:
- subnet: 192.168.0.0/24
```
该文件描述了一个由三个服务构成的服务网络——一个作为 NameNode 节点 (`master`) 和两个 DataNodes(`slave1`, `slave2`). 定义静态 IP 地址有助于后续配置 SSH 免密码登录和其他设置[^2].
#### 设置SSH无密码访问
进入 Master 容器内部生成公钥私钥对,并将其分发给所有 Slave 节点以便实现无需输入密码即可相互连接的功能.
```bash
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
for node in $(seq 1 2); do ssh-copy-id root@slave${node}; done;
```
这些指令会在当前用户的家目录下生成一对新的 RSA 密钥,并允许其他节点上的相同用户免密登陆到这台主机上.
#### 修改核心配置文件
针对 `/etc/hadoop/*-site.xml` 这些 XML 格式的配置文档做出相应调整以适应分布式计算的需求;比如设定 fs.defaultFS 参数指向 Namenode 所处位置等操作均在此阶段完成。
#### 初始化并启动整个集群
最后一步就是初始化 namenode 上的数据存储结构并通过 start-dfs.sh 和 start-yarn.sh 命令分别开启 DFS (分布文件系统) 和 YARN (资源管理框架).
---
阅读全文