自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决

自制Apache-Doris 2.0.4镜像Docker部署一Fe和一Be集群及遇到的问题解决

文章目录

  • 1.前言
  • 2.doris是什么?
    • 2.1简介
    • 2.2介绍
    • 2.3使用场景
    • 2.4架构
  • 3.官网
  • 4.构建部署
    • 4.1 构建环境
    • 4.2 doris2.0.4的fe和be镜像构建
      • 4.2.1 fe2.0.4镜像构建脚本
      • 4.2.2 be2.0.4镜像构建
      • 4.2.3 启动脚本如下
      • 4.2.4 fe挂载文件如下
      • 4.2.5 be挂载文件如下
      • 4.2.6 fe启动日志
      • 4.2.7 be启动日志
  • 5.问题及解决
    • 5.1解决办法
      • 5.1.1 进入be容器启动be
      • 5.1.2进入fe容器手动注册be
  • 6.doris后台
  • 7.使用navicat客户端连接如下
  • 8.本地构建的镜像推送到阿里云镜像仓库如下
  • 6.doris官方管理平台
  • 7.总结

1.前言

    由于之前学习了下doris,看了下官网,然后就自己根据官网提供的构建镜像的步骤,构建了docker镜像,然后就遇到了Be镜像启动不会自动注册到Fe的问题,解决办法是去be里面手动注册即可。本来说搞个docker镜像拉起来耍一耍,没想到遇到了这个奇葩的问题,找了官方的大佬看了下,大佬说估计是be的启动sh脚本有点问题,后面我在doris交流群里面问那个官方大佬,他没有回我,所以不知道后面版本有没有解决了这个问题,我还给官方提了一个问题,地址如下:

https://ask.selectdb.com/questions/D1A3/zi-zhi-doris2-0-4-jing-xiang-docker-bu-shu-yi-fe-he-yi-be-ji-qun-be-qi-dong-bu-hui-zi-dong-zhu-ce-dao-fe

    之前本来说研究下doris的,后面遇到这个问题去联系官方,官方也没有回复,后面就没有搞了,然后就想了下,把之前搞的这个过程记录下,以便后面更好的入门和快速上手。

2.doris是什么?

2.1简介

    Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景,这个简短的指南将告诉你如何下载 Doris 最新稳定版本,在单节点上安装并运行它,包括创建数据库、数据表、导入数据及查询等。

2.2介绍

    Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库,以极速易用的特点被人们所熟知,仅需亚秒级响应时间即可返回海量数据下的查询结果,不仅可以支持高并发的点查询场景,也能支持高吞吐的复杂分析场景。基于此,Apache Doris 能够较好的满足报表分析、即席查询、统一数仓构建、数据湖联邦查询加速等使用场景,用户可以在此之上构建用户行为分析、AB 实验平台、日志检索分析、用户画像分析、订单分析等应用。

    Apache Doris 最早是诞生于百度广告报表业务的 Palo 项目,2017 年正式对外开源,2018 年 7 月由百度捐赠给 Apache 基金会进行孵化,之后在 Apache 导师的指导下由孵化器项目管理委员会成员进行孵化和运营。目前 Apache Doris 社区已经聚集了来自不同行业数百家企业的 400 余位贡献者,并且每月活跃贡献者人数也超过 100 位。 2022 年 6 月,Apache Doris 成功从 Apache 孵化器毕业,正式成为 Apache 顶级项目(Top-Level Project,TLP)

    Apache Doris 如今在中国乃至全球范围内都拥有着广泛的用户群体,截止目前, Apache Doris 已经在全球超过 2000 家企业的生产环境中得到应用,在中国市值或估值排行前 50 的互联网公司中,有超过 80% 长期使用 Apache Doris,包括百度、美团、小米、京东、字节跳动、腾讯、网易、快手、微博、贝壳等。同时在一些传统行业如金融、能源、制造、电信等领域也有着丰富的应用。

2.3使用场景

    如下图所示,数据源经过各种数据集成和加工处理后,通常会入库到实时数仓 Doris 和离线湖仓(Hive, Iceberg, Hudi 中),Apache Doris 被广泛应用在以下场景中。

在这里插入图片描述

  • 报表分析
    • 实时看板 (Dashboards)
    • 面向企业内部分析师和管理者的报表
    • 面向用户或者客户的高并发报表分析(Customer Facing Analytics)。比如面向网站主的站点分析、面向广告主的广告报表,并发通常要求成千上万的 QPS ,查询延时要求毫秒级响应。著名的电商公司京东在广告报表中使用 Apache Doris ,每天写入 100 亿行数据,查询并发 QPS 上万,99 分位的查询延时 150ms。
  • 即席查询(Ad-hoc Query):面向分析师的自助分析,查询模式不固定,要求较高的吞吐。小米公司基于 Doris 构建了增长分析平台(Growing Analytics,GA),利用用户行为数据对业务进行增长分析,平均查询延时 10s,95 分位的查询延时 30s 以内,每天的 SQL 查询量为数万条。
  • 统一数仓构建 :一个平台满足统一的数据仓库建设需求,简化繁琐的大数据软件栈。海底捞基于 Doris 构建的统一数仓,替换了原来由 Spark、Hive、Kudu、Hbase、Phoenix 组成的旧架构,架构大大简化。
  • 数据湖联邦查询:通过外表的方式联邦分析位于 Hive、Iceberg、Hudi 中的数据,在避免数据拷贝的前提下,查询性能大幅提升。

2.4架构

    Doris整体架构如下图所示,Doris 架构非常简单,只有两类进程

  • Frontend(FE),主要负责用户请求的接入、查询解析规划、元数据的管理、节点管理相关工作。
  • Backend(BE),主要负责数据存储、查询计划的执行。

    这两类进程都是可以横向扩展的,单集群可以支持到数百台机器,数十 PB 的存储容量。并且这两类进程通过一致性协议来保证服务的高可用和数据的高可靠。这种高度集成的架构设计极大的降低了一款分布式系统的运维成本。

在这里插入图片描述

    在使用接口方面,Doris 采用 MySQL 协议,高度兼容 MySQL 语法,支持标准 SQL,用户可以通过各类客户端工具来访问 Doris,并支持与 BI 工具的无缝对接。Doris 当前支持多种主流的 BI 产品,包括不限于 SmartBI、DataEase、FineBI、Tableau、Power BI、SuperSet 等,只要支持 MySQL 协议的 BI 工具,Doris 就可以作为数据源提供查询支持。

    在存储引擎方面,Doris 采用列式存储,按列进行数据的编码压缩和读取,能够实现极高的压缩比,同时减少大量非相关数据的扫描,从而更加有效利用 IO 和 CPU 资源。

    Doris 也支持比较丰富的索引结构,来减少数据的扫描:

  • Sorted Compound Key Index,可以最多指定三个列组成复合排序键,通过该索引,能够有效进行数据裁剪,从而能够更好支持高并发的报表场景
  • Min/Max :有效过滤数值类型的等值和范围查询
  • Bloom Filter :对高基数列的等值过滤裁剪非常有效
  • Invert Index :能够对任意字段实现快速检索

    在存储模型方面,Doris 支持多种存储模型,针对不同的场景做了针对性的优化:

  • Aggregate Key 模型:相同 Key 的 Value 列合并,通过提前聚合大幅提升性能
  • Unique Key 模型:Key 唯一,相同 Key 的数据覆盖,实现行级别数据更新
  • Duplicate Key 模型:明细数据模型,满足事实表的明细存储

    Doris 也支持强一致的物化视图,物化视图的更新和选择都在系统内自动进行,不需要用户手动选择,从而大幅减少了物化视图维护的代价。

查询引擎方面,Doris 采用 MPP 的模型,节点间和节点内都并行执行,也支持多个大表的分布式 Shuffle Join,从而能够更好应对复杂查询。

在这里插入图片描述

    Doris 查询引擎是向量化的查询引擎,所有的内存结构能够按照列式布局,能够达到大幅减少虚函数调用、提升 Cache 命中率,高效利用 SIMD 指令的效果。在宽表聚合场景下性能是非向量化引擎的 5-10 倍。

在这里插入图片描述

    Doris 采用了 Adaptive Query Execution 技术, 可以根据 Runtime Statistics 来动态调整执行计划,比如通过 Runtime Filter 技术能够在运行时生成 Filter 推到 Probe 侧,并且能够将 Filter 自动穿透到 Probe 侧最底层的 Scan 节点,从而大幅减少 Probe 的数据量,加速 Join 性能。Doris 的 Runtime Filter 支持 In/Min/Max/Bloom Filter。

    在优化器方面 Doris 使用 CBO 和 RBO 结合的优化策略,RBO 支持常量折叠、子查询改写、谓词下推等,CBO 支持 Join Reorder。目前 CBO 还在持续优化中,主要集中在更加精准的统计信息收集和推导,更加精准的代价模型预估等方面。

3.官网

    官方的文档中文支持友好且非常的详细,仔细研读基本可以学会

https://doris.apache.org/zh-CN/docs/dev/get-starting/quick-start

4.构建部署

4.1 构建环境

    环境使用的是window10专业版安装的 Docker Desktop在wsl2子系统用的是CentOs7.x

4.2 doris2.0.4的fe和be镜像构建

    下载最新的二进制包解压

https://doris.apache.org/download/

4.2.1 fe2.0.4镜像构建脚本

# 选择基础镜像
FROM openjdk:8u342-jdk# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/"
PATH="/opt/apache-doris/fe/bin:$PATH"# 下载软件至镜像内,可根据需要替换
COPY ./resource/fe /opt/feRUN apt-get update &&
apt-get install -y default-mysql-client &&
apt-get clean &&
mkdir /opt/apache-doris &&
cd /opt &&
mv ./fe/ /opt/apache-doris/RUN chmod 755 /opt/apache-doris/fe/bin/init_fe.shENTRYPOINT ["/bin/bash","/opt/apache-doris/fe/bin/init_fe.sh"]

    resource下放的是2.0.4源码包中的fe文件夹

image.png

    且在fe的bin目录中放入了:

https://ask.selectdb.com/uploads/post/56j2kyebhoC.png

4.2.2 be2.0.4镜像构建

# 选择基础镜像
FROM openjdk:8u342-jdk# 设置环境变量
ENV JAVA_HOME="/usr/local/openjdk-8/"
PATH="/opt/apache-doris/be/bin:$PATH"# 下载软件至镜像内,可根据需要替换
COPY ./resource/be /opt/beRUN apt-get update &&
apt-get install -y default-mysql-client &&
apt-get clean &&
mkdir /opt/apache-doris &&
cd /opt &&
mv ./be/ /opt/apache-doris/RUN chmod 755 /opt/apache-doris/be/bin/init_be.shENTRYPOINT ["/bin/bash","/opt/apache-doris/be/bin/init_be.sh"]

    同fe一样在reource里放入:

https://ask.selectdb.com/uploads/post/56j2vgD4RaJ.png

    be的bin下放入:

https://ask.selectdb.com/uploads/post/56j2yruDhou.png

    fe和be中的init脚本是从2.0.4的源码包中:

https://github.com/apache/doris/releases

https://ask.selectdb.com/uploads/post/56j4ksSZBzj.png

https://ask.selectdb.com/uploads/post/56j4ng9EATs.png

    拷贝到上面的构建文件中的
    如果是在windows下直接打开复制过去的,会有让shell文件的格式有问题,镜像运行的时候报初始化脚本\r问题,所以需要在wsl进入centOs子系统中执行如下:
sed -i ‘s/\r$//’ filename
将init_fe.sh/init_be.sh格式转为linux下的格式

4.2.3 启动脚本如下

docker network create --subnet=172.10.70.0/24 doris-networkdocker network rm doris-network 这个命令不执行,用于删除自定义的docker网卡,执行其它几个命令即可docker run --privileged -itd --name=fe --env FE_SERVERS="fe1:172.10.70.2:9010" --env FE_ID=1 -p 8030:8030 -p 9030:9030 -v D:\doris\fe\doris-meta:/opt/apache-doris/fe/doris-meta -v D:\doris\fe\log:/opt/apache-doris/fe/log -v D:\doris\fe\conf\fe.conf:/opt/apache-doris/fe/conf/fe.conf --network=doris-network --ip=172.10.70.2 apache-doris:2.0.4-fedocker run --privileged -itd --name=be --env FE_SERVERS="fe1:172.10.70.2:9010" --env BE_ADDR="172.10.70.3:9050" -p 8040:8040 -v D:\doris\be\storage:/opt/apache-doris/be/storage -v D:\doris\be\log:/opt/apache-doris/be/log -v D:\doris\be\conf\be.conf:/opt/apache-doris/be/conf/be.conf --network=doris-network --ip=172.10.70.3 apache-doris:2.0.4-be

4.2.4 fe挂载文件如下

image.png

https://ask.selectdb.com/uploads/post/56j57ZzBSCG.png

4.2.5 be挂载文件如下

https://ask.selectdb.com/uploads/post/56j5c9cVNKj.png

https://ask.selectdb.com/uploads/post/56j5dtVeEgb.png

    fe.conf和be.conf都是从容器中没有挂载启动起来,然后下载下来放到上面的挂载路径中的

4.2.6 fe启动日志

https://ask.selectdb.com/uploads/post/56j5teKP4JG.png

4.2.7 be启动日志

image.png

5.问题及解决

    be日志一直是打印的是be自动注册fe失败

5.1解决办法

5.1.1 进入be容器启动be

    进入be命令行也执行了:
    sysctl -w vm.max_map_count=2000000
    启动bex需要先将swapoff关闭
    swapoff -a

    执行/opt/apache-doris/be/bin/start_be.sh --daemon

5.1.2进入fe容器手动注册be

    进入fe命令行执行了:
    sysctl -w vm.max_map_count=2000000

    进入fe命令行手动注册be如下:
    # 进入一台有mysql的服务器,端口9093,账号root,默认密码是空
    mysql -h 172.10.70.2 -P9030 -uroot
    # 注册be
    ALTER SYSTEM ADD BACKEND “172.10.70.3:9050”;
    # 查看be Alive属性如果是true就ok了
    show PROC ‘/backends’;

±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+
| BackendId | Host | HeartbeatPort | BePort | HttpPort | BrpcPort | LastStartTime | LastHeartbeat | Alive | SystemDecommissioned | TabletNum | DataUsedCapacity | TrashUsedCapcacity | AvailCapacity | TotalCapacity | UsedPct | MaxDiskUsedPct | RemoteUsedCapacity | Tag | ErrMsg | Version | Status | HeartbeatFailureCounter | NodeRole |
±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+
| 10114 | 172.10.70.3 | 9050 | 9060 | 8040 | 8060 | 2024-02-28 01:10:51 | 2024-02-28 01:13:39 | true | false | 14 | 0.000 | 0.000 | 8.397 GB | 57.028 GB | 85.28 % | 85.28 % | 0.000 | {“location” : “default”} | | doris-2.0.4-rc06-003a815b63 | {“lastSuccessReportTabletsTime”:“2024-02-28 01:13:03”,“lastStreamLoadTime”:-1,“isQueryDisabled”:false,“isLoadDisabled”:false} | 0 | mix |
±----------±------------±--------------±-------±---------±---------±--------------------±--------------------±------±---------------------±----------±-----------------±-------------------±--------------±--------------±--------±---------------±-------------------±-------------------------±-------±----------------------------±------------------------------------------------------------------------------------------------------------------------------±------------------------±---------+

6.doris后台

image.png

7.使用navicat客户端连接如下

    使用的地址是127.0.0.1/localhost/wifi地址是可以连上的,但是使用docker的桥接内网地址172.10.70.2是连不上的,端口是9030

image.png

image.png

    到此我这种方式是不是就已经将doris镜像构建和部署1fe和1be集群搞好了?

8.本地构建的镜像推送到阿里云镜像仓库如下

registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:apache-doris-2.0.4-fe
registry.cn-hangzhou.aliyuncs.com/bigfei/zlf:apache-doris-2.0.4-be

6.doris官方管理平台

    doris官方提供了一个运维管理doris集群的平台工具

    Cluster Manager for Apache Doris(以下简称 Doris Manager)是 SelectDB 推出的管理运维 Apache Doris、SelectDB Doris 集群的工具

https://docs.selectdb.com/docs/enterprise/cluster-manager-guide/deployment-guide/deployment-guide-23.x

7.总结

    在传统业务中,基本使用的是万年的mysql,一个mysql数据库撸所有,但是在数据量非常庞大的数据体量下,mysql的能力变得越来越垃圾,所以数据量大,查询灰常灰常慢,基本嗝屁了,所以数据就变成了负债,而没有发挥数据真真的价值,此时就需要寻找代替mysql数据库的方案,由于接触到了Apache Doris,它及支持事务,又有强大的数据查询分析能力,数据join能力也挺强的,且支持mysql的协议,可以对海量的数据做存储分析,查询响应在亚秒级(快),它可以代替mysql、ES(es不支持事务,关联查询能力弱,宽表能力强),它是一款新星的开源数据库,性能强悍,功能强大,也可以替换ELK日志手机存储的替代方案,它是java和C++的混合产品,它是一款前沿大数据领域的开源产品,它的生态活跃,支持各种数据产品数据的CDC连接器丰富,支持 Spark、Flink、hive、kafa等大数据领域的组件,还有一款很猛的开源产品,跟doris的架构很相似,它就是StarRocks,这里简单的提一下StarRocks(快得飞起)这个新的技术名词,后面有机会在分享。

https://docs.starrocks.io/zh/docs/introduction/StarRocks_intro/

    Spark、doris、StarRocks及ES这三个都是MPP架构(大规模并行处理),Hadoop就是一种常见的MPP存储与分析工具。以后有机会在项目中使用这两款新大数据产品解决业务问题,到时候我会分享研究学习运用等经验,这里只是做一个简单的分享。到此我的分享结束了,希望对你有所启发和帮助,请一键三连,么么么哒!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/2454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OSINT技术情报精选·2024年4月第3周

OSINT技术情报精选2024年4月第3周 2024.4.22版权声明:本文为博主chszs的原创文章,未经博主允许不得转载。 1、斯坦福大学:《2024年人工智能指数报告》 最近,由李飞飞联合领导的斯坦福大学以人为本人工智能研究所(St…

FebHost:科技企业如何规划并注册.AI域名?

为确保企业使用.AI域名的方式准确反映其对人工智能技术的关注,企业应考虑以下步骤: 了解法律和合规要求: 第一步是了解与 .AI 域名相关的独特法律和合规要求。由于.AI域名源于安圭拉,企业必须遵守安圭拉的限制和法律规定。这包括…

K8S Centos7 安装 K8S 1.26单机版

文章目录 1.机器规划1.设置hostname2.编辑/etc/hosts3.安装ntpdate并同步时间4.关闭防火墙5.关闭selinux 2.安装 Docker1.安装Docker2.安装容器运行时cri-dockerd 3.安装K8S1.禁用swap2.安装Kubernetes相关软件3.所有master节点拉取k8s镜像4.初始化Kubernetes Master节点5.安装…

MySQL-用户管理

MySQL 用户分为 普通用户 和 root用户。root用户即超级管理员,拥有所有权限,包含创建,删除和修改用户等相关权限;普通用户只拥有被root用户授予的各种权限MySQL的安全性需要通过账户管理来实现 1、登录MySQL服务器 命令如下&…

Nginx七层负载均衡

1、七层负载均衡介绍 Nginx七层负载均衡是在应用层(HTTP/HTTPS)上进行的,可以根据HTTP请求的具体内容,如URL、Cookie、Header等,来决定将请求转发到哪个后端服务器。这种方式不仅能够均衡服务器的计算负载&#xff0c…

基于微信小程序的土地租赁的设计与实现

基于微信小程序的土地租赁的设计与实现 Design and Implementation of Land Leasing Based on WeChat Mini Program 完整下载链接:基于微信小程序的土地租赁的设计与实现 文章目录 基于微信小程序的土地租赁的设计与实现摘要第一章 绪论1.1 研究背景1.2 研究目的1.3 研究内容…

C语言 字符类型

下面 我们来说字符类型 我们来看这个 保险单 金额 和 总额 都可以用数字类型 而性别则需要字符型 字符数据的存储 – ASCI码 字符类型 char 就是专为存储字符(如字母,标点和数字)而设计的类型。 使用单引号包含单个字符或转义字符去表示一个 char 类型的常量。 …

Lua调用函数的方式汇总

在Lua脚本语言中,调用函数是一种基本的操作,它允许代码执行在函数定义中封装的操作。Lua 提供了几种灵活的方式来调用函数,以适应不同的场景和需求。以下是Lua中调用函数的几种常见方式: 1. 基本函数调用 最简单的调用方式是使用…

李沐56_门控循环单元——自学笔记

关注每一个序列 1.不是每个观察值都是同等重要 2.想只记住的观察需要:能关注的机制(更新门 update gate)、能遗忘的机制(重置门 reset gate) !pip install --upgrade d2l0.17.5 #d2l需要更新import torch from tor…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …

深入理解Java消息中间件-消息的可靠性

基石:在分布式系统中实现消息的可靠性及其原理 在构建现代的分布式系统时,能否可靠地传递消息是衡量系统成功与否的一个关键。本文章旨在讨论如何实现消息的可靠性及其背后的原理,帮助Java技术架构师和开发者构筑一个稳固的系统。 消息可靠…

关于上传自己本地项目到GitHub的相关命令

https://www.cnblogs.com/nature161/p/15014265.html 根据教程里的来,主要注意这个命令: $ git pull --rebase origin master # 对GitHub的仓库包含了readme.md文件的情况先要执行这个命令再pull 如果你的GitHub是main分支想上传到main分支&#xff0…

Opencv_10_自带颜色表操作

void color_style(Mat& image); Opencv_10_自带颜色表操作: void ColorInvert::color_style(Mat& image) { int colormap[] { COLORMAP_AUTUMN, COLORMAP_BONE , COLORMAP_JET , COLORMAP_WINTER, COLORMAP_RAINBOW , COLOR…

编译器的学习

常用的编译器: GCCVisual CClang(LLVM): Clang 可以被看作是建立在 LLVM 之上的一个项目, 实际上LLVM是clang的后端,clang作为前端前端生成LLVM IR,https://zhuanlan.zhihu.com/p/656699711MSVC &#xff…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

程序猿成长之路之数据挖掘篇——朴素贝叶斯

朴素贝叶斯是数据挖掘分类的基础&#xff0c;本篇文章将介绍一下朴素贝叶斯算法 情景再现 以挑选西瓜为例&#xff0c;西瓜的色泽、瓜蒂、敲响声音、触感、脐部等特征都会影响到西瓜的好坏。那么我们怎么样可以挑选出一个好的西瓜呢&#xff1f; 分析过程 既然挑选西瓜有多个…

Android Studio 报错:AVD Pixel_3a_API_30_x86 is already running

在我的Android Studio和虚拟机运行时&#xff0c;我的电脑不小心关机了&#xff0c;在启动后再次打开Android Studio并运行虚拟机时发现报错。 Error while waiting for device: AVD Pixel_3a_API_30_x86 is already running. If that is not the case, delete the files at C…

c++设计模式之桥接模式(拼接组合)

桥接模式&#xff1a;就是进行拼接组装 应用举例&#xff1a; 1.定义了形状&#xff0c;抽象形状接口&#xff0c;圆&#xff0c;矩形 2.定义了颜色&#xff0c;抽象颜色接口&#xff0c;红色&#xff0c;蓝色 3&#xff0c;怎么桥接&#xff0c;抽象具体形状和具体颜色的组合…

应用部署tomcat的三种方式

由于一直在用springboot框架&#xff0c;集成了tomcat&#xff0c;快忘记如何单独部署tomcat了&#xff0c;以下&#xff0c;记录一下&#xff1a; 部署tomcat有三种方式&#xff1a; 一、方式一&#xff1a;将war包丢进webapps 这是最简单粗暴的方式&#xff1a;将web工程打…

用现成的容器来创建一个镜像,或者说再克隆一个一模一样的容器

前言&#xff1a;我在centos系统中使用docker拉取了一个centos镜像&#xff0c;并用这个镜像创建了一个hadoop容器&#xff0c;但是后面我又需要一个相同版本的hadoop镜像来创建其他容器&#xff08;比如hive容器&#xff09;&#xff0c;但是这个时候docker官网并没有对应版本…