首页 > 其他分享 >利用Docker搭建多容器spark 和hadoop集群

利用Docker搭建多容器spark 和hadoop集群

时间:2024-03-31 17:22:40浏览次数:26  
标签:hadoop HADOOP export HOME spark root Docker

Docker搭建hadoop和spark集群

本次集群的配置如下

  • Docker 25.0.3
  • JDK 1.8
  • Hadoop 3.1.2
  • Hive 3.1.2
  • mysql 8.0.1
  • mysql-connector-java-8.0.1.jar
  • hive_jdbc_2.5.15.1040

拉取docker镜像,初始化hadoop集群

  1. 拉取docker镜像,该镜像为ubuntu:22.04,已经安装好了hadoop
docker pull registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base
  • 使用docker images可以查看已经拉取的镜像的列表
docker images
  1. 建立使用桥接模式的docker子网,一般来说下载完docker会在宿主机虚拟出一个172.17.0.0/16的子网出来,这里我们使用桥接模式创建了一个172.19.0.0/16的子网出来
docker network create --driver=bridge --subnet=172.19.0.0/16 hadoop
  1. 使用拉取的镜像,启动三个容器,分别是Master,Slave1,Slave2作为集群的三个节点
docker run -it --network  hadoop --ulimit nofile=65535 -h Slave1 --name Slave1 registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base bash
docker run -it --network hadoop  --ulimit nofile=65535 -h Slave2 --name Slave2 registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base bash
docker run -it --network hadoop --ulimit nofile=100000  -h Master --name Master -p 9870:9870 -p 8088:8088 -p 10000:10000 registry.cn-hangzhou.aliyuncs.com/hadoop_test/hadoop_base bash 
  • 使用dokcer ps -a查看所用容器的状态
docker ps -a
  • 可以使用以下命令启动容器
docker start Master Slave1 Slave2
  • 使用dokcer attach命令进入容器的bash
docker attach Master #Slave1 or Slave2

注意以下命令使用sudo是在非root用户下才需如此,默认是root用户,不需要使用sudo

  1. 进入容器内部,配置ubuntu的apt清华镜像源
  • 备份源镜像文件
cp /etc/apt/sources.list /etc/apt/sources.list.bak
  • 修改/etc/apt/sources.list, 添加国内镜像源
vi /etc/apt/sources.lists
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
 
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
  • (同步)更新软件仓库
apt-get update

#安装一些常用的服务与软件
apt-get install vim openssh-server
  1. 对三台容器的/etc/host进行修改,对主机名进行映射
vim /etc/host
  • 在/etc/host文件中添加以下信息
172.19.0.2 Master
172.19.0.3 Slave1
172.19.0.4 Slave2
  1. ssh配置,拉取的镜像已经生成好了公钥和私钥对,我们只需要修改几个参数,就可以实现容器之间还有容器与宿主机的通信
  • 修改/etc/ssh/sshd_config, 修改下面几种参数
PermitRootLogin = true # 允许使用root用户登录
PasswordAuthentication = yes
PubKeyAuthentication = yes

6.拉取的镜像的环境变量默认配置在/etc/profile中

  • /etc/profile
#java
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_YARN_HOME=$HADOOP_HOME
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_LIBEXEC_DIR=$HADOOP_HOME/libexec
export JAVA_LIBRARY_PATH=$HADOOP_HOME/lib/native:$JAVA_LIBRARY_PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HDFS_DATANODE_USER=root
export HDFS_DATANODE_SECURE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export HDFS_NAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
  • 启用容器的时候默认不会source /etc/profile,因此需要在bash的配置文件中添加语句 source /etc/profile,ssh 服务默认也是不会启用的,还需要在 bash的配置文件中添加service ssh start
vim ~/.bashrc
  • 添加以下内容
source /etc/profile
service ssh start
  • 让环境变量生效
source ~/.bashrc
  1. 初始化hdfs,启动hadoop集群
  • 初始化
hadoop namenode -format
  • 启动全部和服务
start-all.sh
  • 输入jps指令,如果能查看到以下进程则代表hadoop集群成功启用了
1104 ResourceManager
1456 NodeManager
774 SecondaryNameNode
326 NameNode
521 DataNode
1690 Jps

Spark集群搭建

拉取的镜像没有配置spark,手动配置

  1. 去官网下载spark
  • 在宿主机中,将spark的压缩包闯入容器内部
docker cp spark-3.1.2-bin-hive3.1.2.tgz Master:/root
  • docker attach进入容器,解压到/usr/local/中
tar -xvf /root/spark-3.1.2-bin-hive3.1.2 /usr/local/
  • 修改文件夹名称
mv spark-3.1.2-bin-hive3.1.2 spark
  1. 配置spark
  • 进入spark/conf/
cd spark/conf

mv spark-env.sh.template spark-env.sh
vim spark-env.sh
  • 添加以下内容
export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath)
  • 配置worker工作节点
vim wokrer
  • 添加
Master
Slave1
Slave2
  1. 注意hadoop的guava与spark的guava包冲突,选择两者中高版本的,删除低版本的
  • 这里hadoop的guava包版本比较高
cp /usr/local/hadoop/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/spark/jars 
mv /usr/local/spark/jars/guava-14.0.1.jar /usr/local/spark/jars/guava-14.0.1.jar.bak
  1. 将spark文件文件传输到其他节点上
scp -r /usr/local/spark Slave1:/usr/local
scp -r /usr/local/spark Slave2:/usr/local
  1. 启动spark
/usr/local/spark/sbin/start-all.sh

查看到以下信息

starting org.apache.spark.deploy.master.Master, logging to /usr/local/spark/logs/spark--org.apache.spark.deploy.master.Master-1-Master.out
Slave1: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-Slave1.out
Slave2: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-Slave2.out
Master: starting org.apache.spark.deploy.worker.Worker, logging to /usr/local/spark/logs/spark-root-org.apache.spark.deploy.worker.Worker-1-Master.out

pyspark 环境配置和任务提交

配置conda

选择conda来管理python虚拟环境

  1. 选择下载miniconda,更加轻量级的环境
wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh
  1. 安装miniconda
bash Miniconda3-latest-Linux-x86_64.sh

一直回车和yes即可,默认安装目录为 /root

  1. 如conda命令不生效请自行配置~/.bashrc
# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/root/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/root/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/root/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/root/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

其他节点(Slave1,Slave2)也要执行以上操作
4. 使用conda创建虚拟环境

conda create -n spark python==3.8
  • 激活环境
conda activae spark
  • 安装必要的库
pip install spark==3.1.2 # pyspark版本要和容器的spark版本一致
pip install numpy,flask,hdfs3
  • 默认环境存储在/root/miniconda3/envs,需要将这份环境拷贝到其他节点
scp -r /root/minicond3/envs/spark Slave1:/root/miniconda3/envs 
scp -r /root/minicond3/envs/spark Slave2:/root/miniconda3/envs

其他问题 or BUG

  1. 如何映设端口
  • 使用ssh的方法,使得容器的端口可以映射到宿主机
ssh -L 0.0.0.0:8080:0.0.0.0:8080 [email protected]

在宿主机器的浏览器输入0.0.0.0:8080 就可以查看spark集群的运行状况

  1. 如何让容器对外网暴露服务
  • 在容器创建一个web程序flask.py
from flask import Flask, request

app = Flask(__name__)

# 定义路由和处理函数
@app.route('/')
def hello():
    return 'hello,world'


# 运行应用
if __name__ == '__main__':
    app.run(host="0.0.0.0", port=10000)
  • 在容器内运行
python flask.py
  • 在宿主机发送请求

curl 127.0.0.1:10000

标签:hadoop,HADOOP,export,HOME,spark,root,Docker
From: https://www.cnblogs.com/psz-github/p/18106960

相关文章

  • Docker 安装 GeoServer
    使用Docker安装GeoServer是一个更为便捷和灵活的方式,以下是在Linux上通过Docker安装GeoServer的简要步骤:安装Docker:如果您的系统还没有安装Docker,可以按照Docker官方文档(https://docs.docker.com/get-docker/)的指引进行安装。拉取GeoServer镜像:使用以下......
  • 从零实战本地服务器部署 Docker 安装 ThingsBoard PE 专业版(适用于Cassandra + Kafka
    目录1、准备工作2、本地服务器LinuxCentos7.9系统安装docker2.1、检查Linux的内核版本2.2、卸载Docker旧版本(若有需要)2.3、安装Docker2.4、安装Docker引擎2.5、 启动docker和设置开机⾃启动3、使用Docker安装ThingsBoardPE3.1、 拉取ThingsBoardPE镜像3.2......
  • 手搓 Docker Image Creator(DIC)工具(01):前言
    设计并实现一款名为DockerImageCreator(DIC)的脚本工具,该工具能够高效地利用提供的Dockerfile文件,自动化完成从源文件构建定制化镜像的全过程,并无缝集成镜像的功能性运行测试环节,旨在提供一站式的镜像构建与验证解决方案。1项目缘由日常开发中,我常常依赖DockerHub......
  • MAC M1使用docker 安装es kibana ik分词器
    1.拉取elasticsearch镜像资源,本人下载的是8.6.2版本dockerpullelasticsearch:8.6.22.在本机中提前创建好yml文件elasticsearch.ymlhttp:  host:0.0.0.0xpack.security.enabled:falsexpack.security.enrollment.enabled:truexpack.security.http.ssl: enabl......
  • 【Docker】常用命令 docker compose
    文章目录什么是DockerCompose基本用法实际示例启动Compose应用停止Compose应用常用选项`-f,--file`:指定Compose文件`-p,--project-name`:指定项目名称高级用法执行单个服务构建服务总结在Docker中,docker-compose命令是用于管理多容器应用的主要命令之一。本文......
  • 【Docker】使用 Docker 主机启动 Nginx 服务器的步骤详解
    文章目录步骤一:安装Docker步骤二:拉取Nginx镜像步骤三:启动Nginx容器步骤四:访问Nginx服务器步骤五:管理Nginx容器总结在本文中,我们将介绍如何使用Docker在主机上启动Nginx服务器。Nginx是一个高性能的HTTP和反向代理服务器,经常用于托管网站和Web应用。通过Docker,我们可......
  • 家庭版的Windows安装并运行Docker
    家庭版的Windows是可以安装并运行Docker的,但需要注意的是,安装过程和步骤与专业版Windows略有不同。以下是详细的安装步骤和注意事项:安装前提条件系统要求:Windows10家庭版需要是64位系统,并且版本号至少为2004或更高。硬件要求:需要支持二级地址转换(SLAT)的64位处理器,至少4GB的......
  • docker+k8s学习随笔
    1.背景作为一个程序员,每天都跟docker和k8s打交道,我只知道它们给程序员们提供了很大的便利,可以很轻松的扩展/缩减容器,但是却对具体的细节不了解。也不知道为什么要使用docker和k8s,所以非常有必要去学习他们。2.笔记2.1为什么要使用docker呢?说到这个问题,我们先考虑一下如果不......
  • 【Docker】使用docker部署 mysql
    docker启动mysqldockerrun-d\--namemysql\-p3306:3306\-eTZ=Asia/Shanghai\-eMYSQL_ROOT_PASSWORD=123\mysqlSQLyog2058错误允许root,其他连接用密码登录ALTERUSER'root'@'%'IDENTIFIEDWITHmysql_native_passwordBY'123'......
  • Windows12安装Docker
    环境及工具(文末提供)DockerDesktopInstaller.exe(官网)一、查看windows相关配置查看是否开启相应的功能,如果没有需要开启,然后重启电脑打开任务管理器(CTRL+SHIFT+ESC)->选择性能->CPU->虚拟化,确认是否已启用二、开始安装(我这边已经安装完成)三、可能遇到的问题St......