前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用 docker compose 搭建 hadoop集群 总结

使用 docker compose 搭建 hadoop集群 总结

原创
作者头像
TomoriNao
发布2023-12-02 20:46:47
5251
发布2023-12-02 20:46:47
举报
文章被收录于专栏:每月技术成长每月技术成长

-- 学习了 docker 之后实践机会较少,通过本次实践练习 dockerfile 的编写,docker compose 的使用,以及一些 linux 命令的回顾

操作系统基础镜像

选用 ubuntu 20.04 作为基础镜像,需要在引入镜像后第一时间修改源,以免后续软件下载过慢

代码语言:shell
复制
FROM ubuntu:20.04
# 换源
RUN sed -i  's/archive.ubuntu.com/mirrors.aliyun.com/g'  /etc/apt/sources.list
# 用于提供 ssh 服务、下载 及修改文件的工具
RUN apt install -y openssh-server wget openssh-client ntpdate neovim

下载JDK 及 hadoop

选用的是 JDK 8 及 Hadoop 3.3.3

代码语言:shell
复制
// 解压后删除压缩包,避免无用文件占据空间
RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-3.3.3/hadoop-3.3.3.tar.gz \
&& wget https://mirrors4.tuna.tsinghua.edu.cn/Adoptium/8/jdk/x64/linux/OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz \
&& tar -xvf hadoop-3.3.3.tar.gz -C /var  \
&& tar -xvf OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz -C /var \
&& rm hadoop-3.3.3.tar.gz OpenJDK8U-jdk_x64_linux_hotspot_8u392b08.tar.gz

配置环境变量

代码语言:shell
复制
# 配置 JDK 及 hadoop 环境变量
RUN echo 'export JAVA_HOME=/var/jdk8u392-b08' >> ~/.bashrc \
&& echo 'export PATH=$PATH:$JAVA_HOME/bin' >> ~/.bashrc \
&& echo 'export CLASSPATH=$JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar' >> ~/.bashrc \
&& echo 'export HADOOP_HOME=/var/hadoop-3.3.3' >> ~/.bashrc \
&& echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' >> ~/.bashrc \
&& echo 'export JAVA_HOME=/var/jdk8u392-b08' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_NAMENODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_DATANODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export HDFS_SECONDARYNAMENODE_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export YARN_RESOURCEMANAGER_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
&& echo 'export YARN_NODEMANAGER_USER=root' >> /var/hadoop-3.3.3/etc/hadoop/hadoop-env.sh \
# 存放hdfs数据
&& mkdir /var/data 

注意事项:

  • 与 >> 的区别 将直接覆盖原文件,>> 在原文件中追加内容
  • echo 命令 '' 与 "" 的区别 '' 在 evaluate 变量之后再输出,"" 则直接将原字符串输出配置 Hadoop注意事项:
  • xml文件配置时,标签之间不能有空格,否则将会出现错误配置 ssh
代码语言:shell
复制
# config ssh
# 本来打算通过 sed 进行文本替换来修改配置文件,但一番尝试之后发现 sed 适合替换字符串,如单词等,但不适合带有空格的字符串,故直接使用 echo 在文件末尾追加
RUN echo 'PermitRootLogin yes' >> /etc/ssh/sshd_config \
&& echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config 
# 通过启动脚本文件来运行 ssh 服务,
# 直接将 "/usr/sbin/sshd -D" 作为启动命令将会报错
# 原因为 默认启用的是 /bin/sh, "/usr/sbin/sshd -D" 需要通过 /bin/bash 启动
RUN touch /var/run.sh \
&& echo "#!/bin/bash " >> /var/run.sh \
&& echo "/usr/sbin/sshd -D" >> /var/run.sh \
&& chmod 777 /var/run.sh \
&& mkdir /run/sshd
# 设置 root 密码
RUN echo "root:112233" | chpasswd
CMD [ "/var/run.sh"  ]
# 进入node1 后,生成密钥并将公钥传给 其他 node
# ssh-keygen -t ed25519
# ssh-copy-id node1
# ssh-copy-id node2
# ssh-copy-id node3

配置 docker compose

代码语言:yaml
复制
// 输入代码内容
version: "3"
services:
  # 主 node
  node1:
    build: .
    hostname: node1
  node2:
    build: .
    hostname: node2
  node3:
    build: .
    hostname: node3

docker compose 的优点在于能够便捷地配置网络,实现 docker 之间的互联

使用

代码语言:shell
复制
# 简简单单的一句即可实现容器的相互连接
docker compose up 

其他内容

可以通过 --net=host 参数来让容器使用宿主机的网络,从而访问外部网络,然而更好的方法是允许宿主机的 ip 路由转发,通过 docker 的虚拟网络来访问外部网络

项目地址

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 操作系统基础镜像
  • 下载JDK 及 hadoop
  • 配置环境变量
  • 配置 docker compose
  • 其他内容
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档