如何为Docker Compose中的Hadoop namenode容器添加Python?
解决Hadoop Namenode容器无法安装Python的问题
问题原因
你使用的bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8镜像基于老旧的Debian Wheezy版本,官方源已将该版本的包归档至归档服务器,导致默认的deb.debian.org源无法找到Python包,出现404错误。
解决方法
方法一:临时进入容器修改源并安装(适合快速测试)
- 进入容器:
docker exec -it namenode /bin/bash
- 备份原有源文件:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 替换为Debian归档源,编辑
/etc/apt/sources.list,将内容替换为:
deb http://archive.debian.org/debian/ wheezy main contrib non-free deb-src http://archive.debian.org/debian/ wheezy main contrib non-free deb http://archive.debian.org/debian-security/ wheezy/updates main contrib non-free
- 更新源并安装Python:
apt-get update # 安装Python3.4(该系统支持的最高Python3版本) apt-get install -y python3.4 # 或者安装Python2.7 # apt-get install -y python2.7
方法二:自定义Dockerfile构建带Python的镜像(推荐,持久化解决)
临时安装的Python会在容器重启后消失,因此推荐构建自定义镜像:
- 在本地创建
Dockerfile文件,内容如下:
FROM bde2020/hadoop-namenode:2.0.0-hadoop2.7.4-java8 # 替换Debian源为归档源并安装Python RUN cp /etc/apt/sources.list /etc/apt/sources.list.bak && \ echo "deb http://archive.debian.org/debian/ wheezy main contrib non-free" > /etc/apt/sources.list && \ echo "deb-src http://archive.debian.org/debian/ wheezy main contrib non-free" >> /etc/apt/sources.list && \ echo "deb http://archive.debian.org/debian-security/ wheezy/updates main contrib non-free" >> /etc/apt/sources.list && \ apt-get update && \ apt-get install -y python3.4 && \ # 清理缓存减小镜像体积 apt-get clean && \ rm -rf /var/lib/apt/lists/*
- 构建自定义镜像:
docker build -t custom-hadoop-namenode:2.0.0-hadoop2.7.4-java8 .
- 修改
docker-compose.yml中的镜像为自定义镜像:
version: '3' services: namenode: image: custom-hadoop-namenode:2.0.0-hadoop2.7.4-java8 container_name: namenode volumes: - ./hdfs/namenode:/hadoop/dfs/name environment: - CLUSTER_NAME=hive env_file: - ./hadoop-hive.env ports: - "50070:50070"
- 重启容器:
docker-compose down && docker-compose up -d
注意事项
由于基础系统版本限制,该镜像最高仅支持Python3.4。如果需要更高版本的Python,建议更换为基于更新Debian/Ubuntu版本的Hadoop镜像,或者从头构建适配的Hadoop环境。
内容的提问来源于stack exchange,提问作者vijay shanker
相关产品推荐
相关产品推荐

