首页 > 其他分享 >h基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群adoop集群搭建(docker)

h基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群adoop集群搭建(docker)

时间:2024-11-20 12:07:10浏览次数:1  
标签:容器 -- hadoop 集群 yum docker root 搭建

 

基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群

 

1、设置主机上的虚拟缓存

当本地内存不足时,可以使用虚拟内存将一些内存数据转移到硬盘上,从而扩展计算机的内存容量。这样可以让计算机运行更复杂、更占用内存的程序,不会出现内存不足的情况。减轻物理存储器不足的压力,设置虚拟内存可以在内存不够的情况下将缓存一时放在硬盘上,解决内存不足问题。

通过虚拟内存,操作系统可以将应用程序使用的内存空间转换为虚拟地址,从而允许应用程序访问不在物理内存中的数据。这样可以避免因为内存不足而导致系统性能下降的情况。虚拟内存可以及时从物理内存中调出数据放到虚拟内存空间中,以便在高负载情况下释放内存空间,提升程序的运行速度。

设置步骤如下

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker

 

2、虚拟机在安装时CPU、内存、硬盘的参数设置

处理器核心数量:12核的处理器有12个核心,而16核的处理器有16个核心,核心数量的增加可以提高处理器的并行计算能力,从而能够更快地处理大量的数据和复杂的任务。

性能表现:由于电脑的处理器是计算任务的核心,因此处理器性能的提高可以显著提高电脑的整体性能。由于16核处理器的处理能力更强大,因此在计算密集型应用程序中,16核相比12核的处理器会有更快的速度和更好的性能表现。

计划构建3个虚拟化的集群,因此至少设置CPU的内核总数为4,此处根据自己电脑性能来自行设置,为了提高性能,我此处将设置16核

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_02

 

 

虚拟机内存设置至少8个G,可根据自己电脑配置设置,由于我电脑内存是64G,我这里给虚拟机分配设置16G内存

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_03

 

8个G的内存,建议虚拟机的磁盘空间设置为50G

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_04

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_05

 

系统分区设置

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_06

 设置静态ip地址

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_07

虚拟机配置阿里镜像

使用wget从指定的路径下载镜像文件

[root@localhost ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_08

 

更新虚拟机上的软件包,更新过程中有两次输入y,总更新文件数625个,所以如果你虚拟硬盘空间不够,就先别操作了

注意:

yum update是yum命令的一个选项,用于更新系统中的所有已安装的软件包到最新版本。

当执行yum update命令时,yum会先检查可用的软件包,确定哪些软件包需要更新,并将它们的最新版本下载到系统中。这个过程中,yum会自动检查所有软件包的依赖关系,并在必要时同时更新依赖关系。更新完成后,yum还会重新配置系统中的软件包,以确保它们都能够正常工作。

yum update的底层原理是基于yum的软件包仓库的工作原理,yum会从远程的yum软件包仓库中获取软件包的信息,包括软件包的版本、依赖关系等,并与本地系统上已安装的软件包进行比较,确定需要更新哪些软件包。更新软件包的过程中,yum会在本地缓存中保存软件包,以便在需要时再次使用,以减少下载时间和网络流量。

yum update的好处是可以方便地更新所有已安装的软件包,以保证系统的安全性和稳定性。但需要注意的是,更新软件包可能会带来一些风险,例如更新后可能会出现兼容性问题,因此在更新之前最好备份系统或测试更新效果,以避免数据丢失或系统崩溃等问题。

[root@localhost ~]# yum update
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_09

 .......中间执行过程省略,625行太多了

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_10

 ......中间执行过程省略,625行太多了

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_11

 

3、安装Docker

先删除docker,执行以下脚本

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_12

 docker的安装步骤参考我站内帖子的步骤,此处不在演示,链接如下:

 

4、拉取镜像

(1)搜索镜像hadoop的基础集群镜像

[root@localhost ~]# docker search hadoop-base
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_13

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_14

 

(2)拉取镜像hadoop-base镜像

[root@localhost ~]# docker pull bde2020/hadoop-base:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_15

 

(3)拉取hadoop-namenode镜像

[root@localhost ~]# docker pull bde2020/hadoop-namenode:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_16

 

(4)拉取hadoop-datanode镜像

[root@localhost ~]# docker pull bde2020/hadoop-datanode:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_17

 

(5)拉取hadoop-resourcemanager镜像

[root@localhost ~]# docker pull bde2020/hadoop-resourcemanager:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_18

 

(6)拉取hadoop-nodemanager镜像

[root@localhost ~]# docker pull bde2020/hadoop-nodemanager:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_19

 

(7)拉取hadoop-historyserver镜像

[root@localhost ~]# docker pull bde2020/hadoop-historyserver:2.0.0-hadoop3.2.1-java8
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_20

 

 

5.运行容器

(1)指定docker内部网络

查看子网ip地址和网关地址

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_21

 

指定docker的桥接网络模式,docker网络是为了让容器和容器之前通信的

创建时最好指定容器端口号映射。10000端口为hiveserver端口,后面本地客户端要通过beeline连接hive使用,有其他组件要安装的话可以提前把端口都映射出来,毕竟后面容器运行后再添加端口还是有点麻烦的。

[root@localhost ~]# docker network create --driver=bridge --subnet=192.168.124.0/16  hadoop
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_22

 要删除构建的网络可以通过docker network rm 网络名称

 (2)建立Master容器

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_23

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_24

 退出容器指令:ctrl+d

进入容器:docker exec -it 容器名 bash

(3)建立Slave1容器

[root@localhost ~]# docker run -it --network hadoop -h Slave1 --name Slave1 bde2020/hadoop-base  bash
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_25

 

(4)建立Slave2容器

[root@localhost ~]# docker run -it --network hadoop -h Slave2 --name Slave2 bde2020/hadoop-base bash
  • 1.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_26

 

(5)查看所有构建的容器

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_27

 

(6)三台机器修改hosts

第一种脚本直接编辑方法:

[root@localhost ~]# vim /etc/hosts

//修改为以下格式
192.168.124.3    Master
192.168.124.4    Slave1
192.168.124.5    Slave2
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_28

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_29

 

第二种finalshell快捷工具编辑模式:

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_30

 提示:每个容器的ip都需要通过命令ifconfig查看,或者在创建的时候通过‘ --ip ’指定ip地址

 (7)查看运行中的容器

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_31

 由于容器是退出状态,没有启动,因此我们可以先启动容器

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_32

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_33

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_34

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_java_35

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_36

 

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_docker_37

【1】基于docker搭建hadoop+hive+spark+hbase+zookeeper+scale集群_hadoop_38

 

 

(8) 启动容器

 

 

 

 

 

 

 

 

 

 

hadoop集群搭建(docker)

1.准备安装包(hadoop-3.3.2.tar.gz和jdk-8u371-linux-x64.tar.gz)

2.创建Dockerfile文件:

复制代码
# 镜像源
FROM centos:7

# 添加元数据
LABEL author="作者" date="2023/05/30"

# 安装openssh-server和sudo软件包,并且将sshd的UsePAM参数设置成no
RUN yum install -y openssh-server sudo
RUN sed -i 's/UsePAM yes/UsePAM no/g' /etc/ssh/sshd_config

# 安装openssh-clients
RUN yum install -y openssh-clients

# 安装which
RUN yum install -y which

# 添加测试用户root,密码root,并且将此用户添加到sudoers
RUN echo "root:root" | chpasswd
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

#启动sshd服务并且暴露22端口
RUN mkdir /var/run/sshd
EXPOSE 22

# 拷贝并解压jdk
ADD jdk-8u371-linux-x64.tar.gz /usr/local/
RUN mv /usr/local/jdk1.8.0_371 /usr/local/jdk1.8
ENV JAVA_HOME /usr/local/jdk1.8
ENV PATH $JAVA_HOME/bin:$PATH

# 拷贝并解压hadoop
ADD hadoop-3.3.2.tar.gz /usr/local
RUN mv /usr/local/hadoop-3.3.2 /usr/local/hadoop
ENV HADOOP_HOME /usr/local/hadoop
ENV PATH $HADOOP_HOME/bin:$PATH
ENV LANG="en_US.utf8" # 设置容器启动命令 CMD ["/usr/sbin/sshd", "-D"]
复制代码

3.构建并配置镜像

hadoop和jdk安装包要和Dockerfile文件放在同一目录,然后构建镜像

docker build -t hadoop-test .

构建容器:

docker run -d --name hadoop-test hadoop-test

进入容器:

docker exec -it hadoop-test bash

切换到hadoop配置目录:

cd /usr/local/hadoop/etc/hadoop/

配置hadoop环境变量:

vi hadoop-env.sh

追加以下内容:

复制代码
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
export JAVA_HOME=/usr/local/jdk1.8
复制代码

配置核心参数:

vi core-site.xml

添加以下内容:

复制代码
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
    </property>
    <!-- default 4096(4M) -->
    <property>
        <name>io.file.buffer.size</name>
        <value>131702</value>
    </property>
    <!-- unit: minute, default 0 -->
    <property>
        <name>fs.trash.interval</name>
        <value>1440</value>
    </property>
</configuration>
复制代码

配置hdfs:

vi hdfs-site.xml

添加以下内容:

复制代码
<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop/hdfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop/hdfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
</configuration>
复制代码

配置资源管理:

vi yarn-site.xml

添加以下内容:

复制代码
<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</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>640800</value>
    </property>
</configuration>
复制代码

配置分布式计算:

vi mapred-site.xml

添加以下内容:

复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master: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>
</configuration>
复制代码

配置子节点:

vi workers

把默认的localhost改为datanode的hostname:

#localhost
slave1
slave2

退出并关闭容器:

exit
docker stop hadoop-test

把容器保存为新的镜像:

docker commit hadoop-test hadoop:base

4.搭建集群

创建network:

docker network create --subnet=192.168.0.0/24 hadoop

构建master、slave1、slave2三个容器:

docker run -d --name master --hostname master --network hadoop --ip 192.168.0.10 -P -p 8088:8088 -p 9870:9870 -p 19888:19888 hadoop:base
docker run -d --name slave1 --hostname slave1 --network hadoop --ip 192.168.0.11 -P hadoop:base
docker run -d --name slave2 --hostname slave2 --network hadoop --ip 192.168.0.12 -P hadoop:base

配置node免密登录:

进入master容器:

docker exec -it master bash

生成密钥,一直回车就行:

ssh-keygen

把密钥分发给其它node,需要输入yes和密码,密码是Dockerfile中配置的root:

ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2

进入其它datanode做同样的操作。

在master容器中启动服务:

格式化hdfs(第一次需要格式化,后续不需要):

hdfs namenode -format

启动服务:

$HADOOP_HOME/sbin/start-all.sh

启动历史日志服务:

$HADOOP_HOME/bin/mapred --daemon start historyserver

查看启动的服务:

jps

如下所示:

 进入slave1、slave2容器,

查看启动的服务:

jps

 如下所示:

 关闭服务:

$HADOOP_HOME/bin/mapred --daemon stop historyserver
$HADOOP_HOME/sbin/stop-all.sh

5.hadoop测试

在master容器新建一个文件,随便输入一些内容,保存:

vi test.txt
welcome hadoop

把文件保存到hdfs根目录:

hdfs dfs -put test.txt /

查看hdfs根目录:

hadoop fs -ls /

可以看到以下内容:

 也可以访问浏览器页面localhost:9870,如下所示:

 mapreduce服务测试:

切换到hadoop计算样例目录:

cd $HADOOP_HOME/share/hadoop/mapreduce

运行测试样例,调用jar包计算pi的值,计算100次:

hadoop jar hadoop-mapreduce-examples-3.3.2.jar pi 3 100

可以通过浏览器页面localhost:8088查看任务情况和日志等。

运行完的任务可以到浏览器页面localhost:19888查看,如下所示:

 

 

标签:容器,--,hadoop,集群,yum,docker,root,搭建
From: https://www.cnblogs.com/xinxihua/p/18556597

相关文章

  • XXL-JOB快速入门(什么是XXL-JOB、部署XXL-JOB、在SpringBoot项目中接入XXL-JOB、XXL-JO
    文章目录1.分布式任务调度2.@Scheduled注解的局限3.什么是XXL-JOB4.通过源码部署调度中心4.1下载源码4.2源码说明4.3运行数据库脚本4.4补充:xxl_job数据库中八张表的作用4.5调度中心配置4.5.1数据库相关配置4.5.2日志相关配置4.6启动调度中心4.7访问调度中......
  • 如何使用docker去对sftp去做容器化部署?
    安装过程中遇到的问题:1.0拉取sftp的镜像失败怎么办?(后续:这个地址拉取镜像失败.)sudodockerpullatmoz/sftp解决:配置Docker使用阿里云镜像源:sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF'{"registry-mirrors":["https://fecfboad.mir......
  • 关于Docker
    如果你熟悉VMware等类似虚拟化平台,可以暂时把Docker理解为轻量化的VMware,但又不完全相同,区别如下:虚拟化级别:VMware:VMware工作在硬件虚拟化级别,它通过模拟整个硬件环境来运行完整的操作系统。这意味着每个虚拟机(VM)都有自己的操作系统副本。Docker:Docker工作在操作系统级别,它使......
  • ESP32初学教程Python版-从环境搭建到完成控制LED灯闪烁 | 幽络源
    环境前提有Python环境,然后版本必须得大于或等于3.8有PIP,且最好配置了国内镜像这两个环境很简单,不懂的可以加入我们的网络技术交流QQ群询问:307531422前言幽络源站长使用的ESP32是WROMM的,当然,其他的大同小异大致步骤1.安装驱动2.下载MicroPython固件到ESP323.准备烧录固......
  • 1000+节点、200+集群,Slack如何利用Karpenter降本增效?
    原文首发于云妙算Slack是一款AI工作管理和协作平台。随着业务需求的增长,Slack对其内部计算编排平台进行了重大改造,以增强可扩展性、提高效率并降低成本。该内部平台的代号为“Bedrock”,基于AmazonEKS和Karpnter构建。通过利用Bedrock,Slack将容器部署和管理简化为单......
  • 从零搭建UVM验证平台 简介
    搭建UVM流程:定义interface。Interface是连接DUT和验证平台的桥梁,根据DUT的输入输出参数定义interface,在top_tb里连接interface和DUT。加入transaction。transaction是一个数据包,transaction由sequence产生,通过sequencer传递给driver。加入driver。Driver负责将接收到的tr......
  • 快速创建可移植的深度学习Docker环境
    0镜像拉取首先拉取带有cuda的镜像:nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu18.04现在镜像被ban了,推荐使用国内镜像站,这里我用的nvcr.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu18.04dockerpullnvcr.io/nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu18.04当然也可以......
  • Nginx Proxy Manager:小白也能轻松搭建反向代理
    在现代网络环境中,越来越多的服务需要在同一个服务器上运行,如何合理地管理这些服务,并确保它们能够安全高效地互通,是许多站长和开发者面临的难题。NginxProxyManager(简称NPM)正是为了解决这个问题而生,它提供了一个简单、直观的界面来管理反向代理和SSL证书配置,使得网站、......
  • 使用脚手架搭建React项目
    ​......
  • 如何利用Spring Boot搭建Web应用来获取和整合数据?
    以下是利用SpringBoot搭建Web应用来获取和整合数据的基本步骤:创建SpringBoot项目•可以通过SpringInitializr(在线工具或者集成在IDE中的插件)创建项目,选择需要的依赖,比如Web依赖(包含SpringMVC等用于构建Web应用的关键组件),还有对应数据库连接的依赖(如使用MySQL就添加MySQL......