前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用docker部署hadoop集群-手把手复现

使用docker部署hadoop集群-手把手复现

作者头像
唔仄lo咚锵
发布2022-05-10 10:20:52
1.3K0
发布2022-05-10 10:20:52
举报
文章被收录于专栏:blog(为什么会重名,真的醉了)
在这里插入图片描述
在这里插入图片描述

版本

CentOs7 docker20 jdk1.8 hadoop3.2

手把手复现,有手就行。

可以使用虚拟机或服务器

安装docker

代码语言:javascript
复制
yum update #更新(询问输入y)

yum install -y yum-utils device-mapper-persistent-data lvm2 #安装依赖

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

yum install -y docker-ce #安装docker
 
systemctl start docker #启动docker

docker -v #查看docker版本
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建镜像

centos镜像

  1. 拉取centos镜像
代码语言:javascript
复制
docker pull centos
在这里插入图片描述
在这里插入图片描述
  1. 配置Dockerfile(ssh服务)
代码语言:javascript
复制
vim Dockerfile
#复制以下内容
FROM centos
MAINTAINER mwf

RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config
RUN yum  install -y openssh-clients

RUN echo "root:123456" | chpasswd #ssh密码可自定义,这里就写123456了
RUN echo "root   ALL=(ALL)       ALL" >> /etc/sudoers
RUN ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
RUN ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key

RUN mkdir /var/run/sshd
EXPOSE 22
CMD ["/usr/sbin/sshd", "-D"]
#然后按Esc :wq保存退出
  1. 生成镜像
代码语言:javascript
复制
docker build -t="centos7-ssh" . #镜像名可自定义
docker images #查看镜像
在这里插入图片描述
在这里插入图片描述

至此一个带ssh服务的centos镜像就安好了。

hadoop和jdk镜像

  1. 下载并上传安装包 JDK 百度网盘:https://pan.baidu.com/s/1_evTH6WlmXTnpSSAsstV9Q提取码eyu3
在这里插入图片描述
在这里插入图片描述

hadoop 百度网盘:https://pan.baidu.com/s/1S9Sqwl3UN9cq2-dSdBGKRQ 提取码ca8s

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  1. 配置Dockerfile(jdk+hadoop) 可以把之前的改名,或直接覆盖,注意版本号和你下载的对应。
代码语言:javascript
复制
mv Dockerfile Dockerfile.centos_ssh
vim Dockerfile
#复制以下内容
FROM centos7-ssh 
ADD jdk-8u281-linux-x64.tar.gz /usr/local/  
RUN mv /usr/local/jdk1.8.0_281 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

ADD hadoop-3.2.2.tar.gz /usr/local
RUN mv /usr/local/hadoop-3.2.2 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH

RUN yum install -y which sudo
#然后按Esc :wq保存退出
  1. 生成镜像
代码语言:javascript
复制
docker build -t="hadoop" .
在这里插入图片描述
在这里插入图片描述

配置网络

设置集群间的网络。

  1. 创建网桥
代码语言:javascript
复制
docker network create --driver bridge hadoop-br
在这里插入图片描述
在这里插入图片描述
  1. 启动三台(一主二从)并指定网络
代码语言:javascript
复制
docker run -itd --network hadoop-br --name hadoop1 -p 50070:50070 -p 8088:8088 -p 9000:9000 -p 16010:16010 -p 2181:2181 -p 8080:8080 -p 16000:16000 -p 9020:9020 -p 42239:42239 -p 60000:60000 hadoop
docker run -itd --network hadoop-br --name hadoop2 -p 16020:16020 hadoop
docker run -itd --network hadoop-br --name hadoop3 hadoop
在这里插入图片描述
在这里插入图片描述

3. 检查网络情况

代码语言:javascript
复制
docker network inspect hadoop-br 
在这里插入图片描述
在这里插入图片描述

配置ssh免密登录

  1. 开三个窗口分别启动三个hadoop并配置host
代码语言:javascript
复制
docker exec -it hadoop1 bash #hadoop2、hadoop3
vi /etc/hosts
# 加入以下id和hostname,就是上一个图圈起来的
172.18.0.2 hadoop1 
172.18.0.3 hadoop2 
172.18.0.4 hadoop3 
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  1. 设置免密 三台机器都分别执行以下命令:
代码语言:javascript
复制
ssh-keygen
#一路回车
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop1
#输入密码就是前面的123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop2
#输入密码就是前面的123456
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@hadoop3
#输入密码就是前面的123456
在这里插入图片描述
在这里插入图片描述

插播反爬信息 )博主CSDN地址:https://wzlodq.blog.csdn.net/

  1. 测试
代码语言:javascript
复制
ping hadoop1 
ping hadoop2
ping hadoop3
ssh hadoop1
ssh hadoop2
ssh hadoop3
#记得exit
在这里插入图片描述
在这里插入图片描述

配置集群

以下操作在主节点hadoop1上执行即可:

代码语言:javascript
复制
docker exec -it hadoop1 bash#进入hadoop1
mkdir /home/hadoop #创建目录
mkdir /home/hadoop/tmp /home/hadoop/hdfs_name /home/hadoop/hdfs_data
cd /usr/local/hadoop/etc/hadoop/
  1. core-site.xml
代码语言:javascript
复制
#vi core-site.xml
	<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop1:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/home/hadoop/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>
在这里插入图片描述
在这里插入图片描述

2. hdfs-site.xml

代码语言:javascript
复制
#vi hdfs-site.xml
 <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/home/hadoop/hdfs_name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/home/hadoop/hdfs_data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop1:9001</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
在这里插入图片描述
在这里插入图片描述

3. mapred-site.xml

代码语言:javascript
复制
#vi mapred-site.xml
 <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hadoop1:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hadoop1:19888</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>
在这里插入图片描述
在这里插入图片描述

4. yarn-site.xml

代码语言:javascript
复制
# vi yarn-site.xml
	<property>
		<name>yarn.resourcemanager.hostname</name>
		<value>hadoop1</value>
	</property>
	<property>
		<name>yarn.nodemanager.aux-services</name>
		<value>mapreduce_shuffle</value>
	</property>
	<property>
		<name>yarn.log-aggregation-enable</name>
		<value>true</value>
	</property>
	<property>
		<name>yarn.log-aggregation.retain-seconds</name>
		<value>604800</value>
	</property>
  1. workers
代码语言:javascript
复制
#vi workers
hadoop2
hadoop3
在这里插入图片描述
在这里插入图片描述

配置环境变量

以下操作在主节点hadoop1上执行即可:

  1. dfs.sh
代码语言:javascript
复制
cd /usr/local/hadoop/sbin
vi start-dfs.sh#第二行添加如下4句
vi stop-dfs.sh#第二行添加如下4句
代码语言:javascript
复制
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在这里插入图片描述
在这里插入图片描述
  1. yarn.sh
代码语言:javascript
复制
cd /usr/local/hadoop/sbin
vi start-yarn.sh#第二行添加如下3句
vi stop-yarn.sh#第二行添加如下3句
代码语言:javascript
复制
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
在这里插入图片描述
在这里插入图片描述

3. env.sh

代码语言:javascript
复制
cd /usr/local/hadoop/etc/hadoop
vi hadoop-env.sh#加入下面这句话
export JAVA_HOME=/usr/local/jdk1.8
在这里插入图片描述
在这里插入图片描述
  1. 添加变量
代码语言:javascript
复制
export JAVA_HOME=/usr/local/jdk1.8
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:/bin:/usr/bin:$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$PATH:$HADOOP_HOME/sbin
source ~/.bashrc #执行

也可以写到/etc/profile永久生效

在这里插入图片描述
在这里插入图片描述

5. 拷贝 将主节点hadoop1配置拷贝到从节点

代码语言:javascript
复制
scp -r /usr/local/hadoop/ hadoop2:/usr/local/
scp -r /usr/local/hadoop/ hadoop3:/usr/local/

启动测试

在hadoop1下执行

  1. 格式化hdfs
代码语言:javascript
复制
hdfs namenode -format
  1. 启动
代码语言:javascript
复制
start-all.sh

报错记录:cannot execute binary file: Exec format error jdk环境问题 测试java -version,没有输出的话估计是兼容问题,比如32位系统用64位包或版本不对,输指令uname -m查看版本并下载对应jdk安装即可。 然后测试javac如果没有输出,估计是你的JAVA_HOME配置错了,输入java -version如果是自带的openjdk的话,配置一下就可以了,export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.292.b10-1.el7_9.aarch64(看你的对应路径下名字),如果切到这里面只有一个jre的话,还需要安装对应devel(通过yum search java|grep jdk查看),如1.8openjdk对应安装yum install java-1.8.0-openjdk-devel.aarch64 然后记得修改上一步第四点的env.sh文件里JAVA_HOME路径。

  1. 测试
代码语言:javascript
复制
jps
在这里插入图片描述
在这里插入图片描述

若需要可开启历史服务

代码语言:javascript
复制
mr-jobhistory-daemon.sh start historyserver
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

开放8088端口,公网ip:8088

在这里插入图片描述
在这里插入图片描述

附:重启步骤

代码语言:javascript
复制
exit #退出docker容器
shutdown -r now #重启系统
systemctl start docker #启动docker服务
docker start hadoop1 #启动相应容器
docker start hadoop2
docker start hadoop3
docker exec -it hadoop1 bash #进入主节点
$HADOOP_HOME/sbin/./start-all.sh #启动集群
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 版本
  • 安装docker
  • 创建镜像
    • centos镜像
      • hadoop和jdk镜像
      • 配置网络
      • 配置ssh免密登录
      • 配置集群
      • 配置环境变量
      • 启动测试
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档