docker 部署 hadoop集群

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: docker 部署 hadoop集群

docker 安装

curl -sSL https://get.daocloud.io/docker | sh
##换源 
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://67e93489.m.daocloud.io
systemctl restart docker

拉取镜像

docker pull docker pull centos
# 查看镜像是否拉取成功
docker images

创建容器

#设置固定IP
docker network create --subnet=172.16.0.0/16 huan-net
#创建容器
#cluster-master
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-master -h cluster-master --net netgroup --ip 172.16.0.2 daocloud.io/library/centos /usr/sbin/init
#cluster-slaves
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave1 -h cluster-slave1 --net netgroup --ip 172.16.0.3 daocloud.io/library/centos /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave2 -h cluster-slave2 --net netgroup --ip 172.16.0.4 daocloud.io/library/centos /usr/sbin/init
docker run -d --privileged -ti -v /sys/fs/cgroup:/sys/fs/cgroup --name cluster-slave3 -h cluster-slave3 --net netgroup --ip 172.16.0.5 daocloud.io/library/centos /usr/sbin/init

更换YUM源

mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

部署Openssh

master
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
vi /etc/ssh/ssh_config
#设置StrictHostKeyChecking为no
systemctl restart sshd
slave1
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
slave2
yum -y install openssh openssh-server openssh-clients
systemctl start sshd
slave3
yum -y install openssh openssh-server openssh-clients
systemctl start sshd

公钥分发

ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub <romte_ip>

zookeeper配置

master

将文件从主机复制到docker容器

sudo docker cp apache-zookeeper-3.5.5.tar.gz cluster-slave1:/root/tar

创建目录放置解压文件

mkdir /opt/zookeeper

解压

tar -xivf apache-zookeeper-3.5.5.tar.gz -C /opt/zookeeper/

创建zoo.cfg配置文件

cp /opt/zookeeper/apache-zookeeper-3.5.5/conf/zoo.cfg /opt/zookeeper/apache-zookeeper-3.5.5/conf/zoo.cfg

编辑zoo配置文件

vim /opt/zookeeper/apache-zookeeper-3.5.5/conf/zoo.cfg

添加结点参数

server.1=172.16.0.2:2888:3888
server.2=172.16.0.3:2899:3899
server.3=172.16.0.4:2877:3877

创建myid文件

echo 1 > /tmp/zookeeper/myid

编辑环境变量配置文件

vim ~/.bash_profile

添加环境变量

ZK_HOME=/opt/zookeeper/apache-zookeeper-3.5.5
PATH=$PATH:$ZK_HOME/bin

使配置生效

source ~/.bash_profile

将配置文件发送到slave1,slave2

scp -r ~/.bash_profile cluster-slave1:~/

scp -r ~/.bash_profile cluster-slave2:~/

scp -r /tmp/zookeeper/myid cluster-slave1:/tmp/zookeeper/

scp -r /tmp/zookeeper/myid cluster-slave2:/tmp/zookeeper/

scp -r zoo.cfg cluster-slave1:/opt/zookeeper/apache-zookeeper-3.5.5/conf/

scp -r zoo.cfg cluster-slave2:/opt/zookeeper/apache-zookeeper-3.5.5/conf/

slave1

使配置生效

source ~/.bash_profile

修改myid文件为2

slave2

修改myid文件为3

启动

zhServer.sh start

Hadoop配置

core-site.xml
<configuration>
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://jinbill</value>
  </property>
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>192.168.11.46:12181</value>
  </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/hadoop</value>
  </property>
</configuration>
hdfs-site.xml
<configuration>
  <property>
    <name>dfs.nameservices</name>
    <value>jinbill</value>
  </property>
  <property>
    <name>dfs.ha.namenodes.jinbill</name>
    <value>nn1,nn2</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.jinbill.nn1</name>
    <value>cluster-master:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.jinbill.nn2</name>
    <value>cluster-slave1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.shsxt.nn1</name>
    <value>cluster-master:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.shsxt.nn2</name>
    <value>cluster-slave1:50070</value>
  </property>
  <property>
    <!-- 指定 namenode 元数据存储在 journalnode 中的路径 -->
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://cluster-slave1:8485;cluster-slave2:8485;cluster-slave3:8485/jinbill</value>
  </property>
  <property>
    <!-- 指定 HDFS 客户端连接 active namenode 的 java 类 -->
    <name>dfs.client.failover.proxy.provider.jinbill</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
  </value>
  </property>
  <property>
    <!-- 配置隔离机制为 ssh 防止裂 脑裂 -->
    <name>dfs.ha.fencing.methods</name>
    <value>sshfence</value>
  </property>
  <property>
    <!-- 指定秘钥的位置 -->
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
  </property>
  <property>
    <!-- 指定 journalnode 日志文件存储的路径 -->
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/hadoop/data</value>
  </property>
  <property>
    <!-- 开启自动故障转移 -->
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>
</configuration>
yarn-site.xml
<configuration>
  <property>
     <name>yarn.nodemanager.aux-services</name>
     <value>mapreduce_shuffle</value>
  </property>
  <property>
     <name>yarn.resourcemanager.ha.enabled</name>
     <value>true</value>
  </property>
  <property>
     <name>yarn.resourcemanager.cluster-id</name>
     <value>mr_jinbill</value>
  </property>
  <property>
     <name>yarn.resourcemanager.ha.rm-ids</name>
     <value>rm1,rm2</value>
  </property>
  <property>
     <name>yarn.resourcemanager.hostname.rm1</name>
     <value>cluster-slave2</value>
  </property>
  <property>
     <name>yarn.resourcemanager.hostname.rm2</name>
     <value>cluster-slave3</value>
  </property>
  <property>
     <name>yarn.resourcemanager.zk-address</name>
     <value>192.168.11.46:12181</value>
  </property>
</configuration>
mapred-site.xml
<configuration>
   <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
   </property>
</configuration>
slaves
cluster-slave1
cluster-slave2
cluster-slave3
启动三个JornalNode

hadoop-daemon.sh start journalnode

在其中一个NameNode上格式化

hdfs namenode -format

把格式化后的元数据拷贝到另一个NameNode上

元数据初始化后会存放在 hadoop.tmp.dir 这个参数配置的地址下的叫dfs的目录里面,将这个目录复制到另一个NN的同目录下

启动刚刚格式化的NameNode

hadoop-daemon.sh start namenode

在没有格式化的NameNode上执行

hdfs namenode -bootstrapStandby

启动第二个NameNode

hadoop-daemon.sh start namenode

在其中一个NameNode上初始化zkfc

hdfs zkfc –formatZK

停止所有结点

stop-dfs.sh

全面启动

start-dfs.sh

start-yarn.sh

访问地址 50070端口和8088端口

因为我是跨域访问,所以用cmd添加一个路由 route add 172.16.0.0 mask 255.255.0.0 192.168.11.38 -p

  1. 网段地址
  2. 子网掩码
  3. 虚拟机地址,docker容器部署在该虚拟机上
效果展示

相关实践学习
基于MSE实现微服务的全链路灰度
通过本场景的实验操作,您将了解并实现在线业务的微服务全链路灰度能力。
相关文章
|
6天前
|
人工智能 API 数据库
FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
【9月更文挑战第5天】 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
 FastGPT一站式解决方案[1-部署篇]:轻松实现RAG-智能问答系统(含sealos云端部署、docker部署、OneAPI&Xinference模型接入)
|
16天前
|
Docker 容器
Docker自建仓库之Harbor高可用部署实战篇
关于如何部署Harbor高可用性的实战教程,涵盖了从单机部署到镜像仓库同步的详细步骤。
57 15
Docker自建仓库之Harbor高可用部署实战篇
|
15天前
|
分布式计算 Hadoop Devops
Hadoop集群配置https实战案例
本文提供了一个实战案例,详细介绍了如何在Hadoop集群中配置HTTPS,包括生成私钥和证书文件、配置keystore和truststore、修改hdfs-site.xml和ssl-client.xml文件,以及重启Hadoop集群的步骤,并提供了一些常见问题的故障排除方法。
25 3
Hadoop集群配置https实战案例
|
16天前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
|
16天前
|
虚拟化 Docker Windows
window 10专业版部署docker环境
本文介绍了如何在Windows 10专业版上部署Docker环境,包括安装步骤、配置镜像加速以及可能遇到的错误处理。
40 2
window 10专业版部署docker环境
|
16天前
|
机器学习/深度学习 分布式计算 安全
Hadoop集群常见报错汇总
这篇博客总结了Hadoop集群中可能遇到的各种常见错误,包括Kerberos认证问题、配置错误、权限问题等,并为每个问题提供了详细的错误复现、原因分析以及相应的解决方案。
31 1
Hadoop集群常见报错汇总
|
4天前
|
Devops jenkins 持续交付
DevOps实践:构建和部署一个Docker化的应用
【9月更文挑战第14天】在当今快节奏的软件开发领域,DevOps已经成为提升效率、加速交付的关键。本文将引导你理解DevOps的核心概念,并通过一个实际的示例—构建和部署一个Docker化的应用—来深入探讨其实践方法。我们将从简单的应用出发,逐步实现Docker容器化,并最终通过CI/CD流水线自动化部署过程。这不仅是对DevOps流程的一次实操演练,也是对现代软件开发理念的一次深刻体验。
|
16天前
|
资源调度 分布式计算 运维
Hadoop集群资源管理篇-资源调度器
详细介绍了Hadoop集群资源管理中的资源调度器,包括资源分配的概念、大数据运维工程师如何管理集群工作负载、资源调度器的背景、Hadoop提供的FIFO、容量调度器和公平调度器三种资源调度器的概述以及它们之间的对比。
50 4
|
16天前
|
分布式计算 监控 Hadoop
监控Hadoop集群实战篇
介绍了监控Hadoop集群的方法,包括监控Linux服务器、Hadoop指标、使用Ganglia监控Hadoop集群、Hadoop日志记录、通过Hadoop的Web UI进行监控以及其他Hadoop组件的监控,并提供了相关监控工具和资源的推荐阅读链接。
33 2
|
16天前
|
NoSQL 关系型数据库 数据库
JumpServer的Docker部署实战案例
JumpServer的Docker部署实战案例,详细介绍了JumpServer的概述、环境准备、基于Docker的快速部署步骤,以及如何访问JumpServer的WebUI。
19 0