当前位置: 首页 > news >正文

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台

1.1.1. 启用功能

启用 WSL并使用 Moba 连接-CSDN博客

1.2 安装 Docker Desktop

最新版本链接:Docker Desktop: The #1 Containerization Tool for Developers | Docker

指定版本链接:Docker Desktop release notes | Docker Docs

(1)安装好 Docker Desktop,接受相关协议后,进入主界面。如果有 docker hub 帐户就用帐户登录,否则就选没有帐号继续即可。

(2)测试 Docker Desktop 是否安装成功?可以在命令行或终端中输入命令:

docker -v
# 或者
docker info

1.3. Docker 常用设置

(1)镜像源设置

这里找的是阿里云的镜像源,链接:容器镜像服务 (aliyun.com)

进入 Docker Desktop 主界面 → 设置(Settings) → Docker 引擎(Docker Engine)

添加如下内容:

"registry-mirrors": ["https://ib71hsz9.mirror.aliyuncs.com"]

如图所示:

(2) 修改 Docker Desktop 分发存储路径

先查看所有已安装的 Windows Subsystem for Linux (WSL) 发行版的详细列表

wsl --list --all -v

在这里插入图片描述

而 Docker Desktop 默认将所有的 WSL2 分发所对应的 vhdx 硬盘映像文件存到路径:C:\Users\用户名\AppData\Local\Docker 下。为了数据安全性及 重用性,一般将上述文件迁移到其它硬盘中。 最新的 Docker Desktop 已支持在设置界面中直接修改 “Resources->Disk image location”,应用并重新启动即可。如下图所示:

执行后,应该可以看到在新的目标文件夹中有 data 与 main 两个子文件夹, 里面分别存放 Docker Desktop 系统及数据。 后面如果重新安装系统或者重新安装了 Docker Desktop,只要保留这两个目 录下的文件,则原来的所有配置及数据都可以还原。可按如下步骤进行:

查看当前分发命令为:

wsl -l --all -v

停止并注销分发(注意,关闭 Docker Desktop 管理端)命令为:

wsl -t docker-desktop
wsl --unregister docker-desktop 
wsl -t docker-desktop-data
wsl --unregister docker-desktop-data

导入分发令为:

wsl --import-in-place docker-desktop-data  D:\WSL\DockerDesktopWSL\data\ext4.vhdx 
wsl --import-in-place docker-desktop  D:\WSL\DockerDesktopWSL\main\ext4.vhdx

重新打开 Docker Desktop 管理端

1.4. 基本镜像制作

为了减少重复工作,可以将集群存储与计算环境中的常用组件全部安装好, 并提交到 Docker Server 中,后续容器在些镜像上创建。

(1) 创建网络

不管是分布式存储还是分布式计算,集群的搭建必须保证在同一个网络中, 让集群内的所有计算机都可以相互访问。为此,我们通过 docker 单独创建一个集群网络,后续所有容器都在这个网络中运行。 查看当前网络命令:

docker network ls

类似结果:

NETWORK ID     NAME      DRIVER    SCOPE
3a6370a8f8eb   bridge    bridge    local
583559d99159   host      host      local
80f6ea320f3b   none      null      local

创建集群网络命令:

docker network create -d bridge cluster

其中参数 -d bridge 表示连接方式为网桥,cluster 表示网络名称

查看网络信息命令:

docker network inspect cluster

(2) 搜索镜像

docker search debian

(3) 拉取镜像

docker pull debian

如果拉取失败可能是镜像源问题,尝试其他镜像源。

1.5. 制作镜像(跳过)

(1)Dockerfile 操作指令

指令含义
FROM 镜像指定新镜像所基于的镜像,第一条指令必须为FROM指令,每创建一个镜像就需要一条FROM指令
MAINTAINER 名字说明新镜像的维护人信息
RUN命令在所基于的镜像上执行命令,并提交到新的镜像中
CMD [“要运行的程序”,“参数1”,“参数2”]指令启动容器时要运行的命令或者脚本,Dockerfile只能有一条CMD命令, 如果指定多条则只能最后一条被执行
EXPOSE 端口号指定新镜像加载到Docker时要开启的端口
ENV 环境变量 变量值设置一个环境变量的值,会被后面的RUN使用
ADD 源文件/目录目标文件/目录将源文件复制到目标文件,源文件要与Dockerfile位于相同目录中,或者是一个URL
COPY 源文件/目录目标文件/目录将本地主机上的文件/目录复制到目标地点,源文件/目录要与Dockerfile在相同的目录中
VOLUME [“目录”]在容器中创建一个挂载点
USER 用户名/UID指定运行容器时的用户
WORKDIR 路径(类似cd)为后续的RUN、CMD、ENTRYPOINT指定工作自录
ONBUILD 命令指定所生成的镜像作为一个基础镜像时所要运行的命令
HEALTHCHECK健康检查

1.6. 创建容器

(1)创建网桥

docker network create hadoop
docker network ls

在这里插入图片描述

(2)创建容器

docker run -itd --name hadoop102 --network hadoop -p 8088:8088 -p 50070:50070 debian

参数说明:--name,表示容器名称;--network 表示使用的网络;-p 表示映射窗口,8088:8088 表示将容器中的 8088 端口映射到主机的 8088 端口;debian,表示创建容器时使用的镜像名,也可镜像 ID(docker image list 查看);

如果之前创建失败过会出现容器已存在,这时候使用 docker rm 把他删了重新创建就好了

(3)查看容器

docker ps

(4)查看网桥

docker network inspect hadoop

1.7. 进入容器搭建集群

1.7.1. 登录容器

1)如果容器已经关闭,重新启动一下

docker start hadoop102

进入容器。

docker exec -it hadoop102 bash

表示以交互的方式附加到正在运行的容器,并执行容器中命令:bash

2)给 root 设置密码

passwd root

1.7.2. 安装软件

在安装基本软件后,可以 Debian 的软件源切换到国内,以提高后续软件安装的速度,减少等待时间,提高效率。下面以阿里云为例,地理位置也可切换为其它的源,例如腾讯,华为,清华。

# 1. 更新系统
apt update# 2. 安装网络工具
apt install -y net-tools# 3. 安装 ping
apt install -y iputils-ping# 4. 安装 vim 工具
apt install -y vim# 5. 安装 ssh
yum install -y openssh
apt install -y openssh-server
apt install -y openssh-client# 6. 安装 https 组件
apt install -y apt-transport-https# 7. 安装 rsync
apt install -y rsync

【可选】更换软件源,以阿里云为例

备份原文件

cd /etc/apt
mv sources.list sources.list.bak

编辑源配置文件命令为:

vim sources.list

在该文件的最上面加入如下内容:

deb https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye main non-free contrib
deb-src https://mirrors.aliyun.com/debian-security/ bullseye-security main
deb-src https://mirrors.aliyun.com/debian/ bullseye-updates main non-free contrib
deb-src https://mirrors.aliyun.com/debian/ bullseye-backports main non-free contrib

更新软件库清单

apt-get update
apt-get upgrade

1.7.3. 搭建集群

安装 JDK 和 Hadoop

1)在容器中创建安装包目录

mkdir /opt/software
mkdir /opt/module

在本地主机上执行,将 JDK 压缩包复制到 Docker 容器中

# docker cp /本地主机路径/JDK 包 容器 ID:/opt/software/
docker cp jdk-8u144-linux-x64.tar.gz f889ba1fb3d2:/opt/software/
docker cp hadoop-3.3.1.tar.gz f889ba1fb3d2:/opt/software/

在这里插入图片描述

2)在容器中解压 JDK 压缩包

tar -zxvf /opt/software/jdk-8u144-linux-x64.tar.gz -C /opt/module/
tar -zxvf /opt/software/hadoop-3.3.1.tar.gz -C /opt/module/

更改文件夹名称

cd /opt/module/
mv jdk1.8.0_144 jdk

3)配置环境变量

vim /etc/profile

在末尾添加内容如下:

export JAVA_HOME=/opt/module/jdk
export PATH=$JAVA_HOME/bin:$PATH
export HADOOP_HOME=/opt/module/hadoop-3.3.1
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

使环境变量立即生效

source /etc/profile

检测是否配置成功(查看 Java 版本)

java -version
# output
java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

4)创建 HDFS 工作目录和 LOG 目录

创建 HDFS 的 NN 和 DN 工作主目录,创建 Hadoop 的 log 日志文件目录(建议将文件放在 /var 目录下,放别的地方也行)

mkdir -p /var/big_data /var/log_hadoop
配置 Hadoop 集群环境

首先,进入$HADOOP_HOME/etc/hadoop目录

cd $HADOOP_HOME/etc/hadoop

1)为 Hadoop 提供 JAVA 解释器路径信息,主要目的是解决远程访问 hadoop 时候JAVA_HOME无法继承的问题,同时将 Hadoop 的日志存储路径修改/var/log_hadoop路径下,其默认在$HADOOP_HOME/etc/hadoop/logs下,一般情况下建议重新指定路径。

vim hadoop-env.sh

添加内容如下:(找到对应位置,没有就加在最后;命令模式下,输入 😒 回车,光标就会定位到最后一行,按 O 在下一行输入内容)

export JAVA_HOME=/opt/module/jdk
export HADOOP_LOG_DIR=/var/log_hadoop

2)为 Yarn 任务、资源管理器提供 Java 运行环境

vim yarn-env.sh

添加内容如下:

export JAVA_HOME=/opt/module/jdk

3)配置 HDFS 主节点信息、持久化和数据文件的主目录

vim core-site.xml

添加如下内容:

	<property><!-- 指定NameNode的地址 --><name>fs.defaultFS</name><value>hdfs://hadoop102:9000</value></property><property><!-- 指定hadoop数据的存储目录 --><name>hadoop.tmp.dir</name><value>/var/big_data</value></property>

4)配置 HDFS 默认的数据存放策略

vim hdfs-site.xml

添加如下内容:

    <property><!-- DataNode存储block的副本量,不大于DataNode的个数--><name>dfs.replication</name><value>3</value></property><property><!-- 2nn web端访问地址--><name>dfs.namenode.secondary.http-address</name><value>hadoop104:9868</value></property><property><!-- 禁用 HDFS ACL(简单权限)--><name>dfs.permissions</name><value>false</value></property>

5)配置 Mapreduce 任务调度策略

vim mapred-site.xml

添加如下内容:

    <property><!-- 指定MapReduce程序运行在Yarn上 --><name>mapreduce.framework.name</name><value>yarn</value></property><property><!-- 历史服务器端地址 --><name>mapreduce.jobhistory.address</name><value>hadoop103:10020</value></property><property><!-- 历史服务器web端地址 --><name>mapreduce.jobhistory.webapp.address</name><value>hadoop103:19888</value></property>

6)配置 YARN 资源管理角色的信息

vim yarn-site.xml

添加如下内容:

	<property><!-- 指定MR走shuffle --><name>yarn.nodemanager.aux-services</name><value>mapreduce_shuffle</value></property><property><!-- 指定ResourceManager的地址--><name>yarn.resourcemanager.hostname</name><value>hadoop102</value></property>

7)配置 DataNode 节点信息

vim workers

添加如下内容(删除原有内容,不要留任何空格):

hadoop102
hadoop103
hadoop104

8)配置主机名对应 IP

vim /etc/hosts

添加如下内容:

172.19.0.2	hadoop102
172.19.0.3	hadoop103
172.19.0.4	hadoop104

9)退出容器,在本地主机上执行

保存镜像

docker commit hadoop102 hadoop

在这里插入图片描述

克隆多个容器(以三台服务器集群为例)

docker run -itd --name hadoop103 --network hadoop hadoop
docker run -itd --name hadoop104 --network hadoop hadoop

进入三台机子

docker exec -it hadoop102 bash
docker exec -it hadoop103 bash
docker exec -it hadoop104 bash
配置 SSH 免密登录

1)免密登录原理,如下图所示

2)查看 ssh 服务状态(以下 ssh 有关所以命令均需在三台机器上执行)

service ssh status

如果没有运行,使用以下命令启动它

service ssh start

如果不是默认启动,设置SSH服务为开机自启:

systemctl enable ssh

3)生成公钥和私钥,注意下面的指令要求3台机器都要执行,Mobaxterm可以使用MultiExec功能开启多执行模式,让三台机器同时执行。

ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

如果使用的是 root 用户,需要修改权限

vim /etc/ssh/sshd_config

修改如下内容:

PermitRootLogin yes

重新启动 ssh 服务

service ssh restart

4)将公钥拷贝到要免密登录的目标机器上,各自文件下(不知道密码使用 passwd root 重新设置)

ssh-copy-id hadoop102
ssh-copy-id hadoop103
ssh-copy-id hadoop104

.ssh文件夹下(~/.ssh)的文件功能解释

文件名含义
known_hosts记录ssh访问过计算机的公钥(public key)
id_rsa生成的私钥
id_rsa.pub生成的公钥
authorized_keys存放授权过得无密登录服务器公钥

1.7.4. 集群启停方式

1)各个模块分开启停(配置ssh是前提)

(1)如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode

hdfs namenode -format

(2)整体启停 HDFS/YARN

start-dfs.sh
stop-dfs.sh
start-yarn.sh
stop-yarn.sh

或者

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/stop-dfs.sh
$HADOOP_HOME/etc/hadoop/sbin/start-yarn.sh
$HADOOP_HOME/etc/hadoop/sbin/stop-yarn.sh

如果使用的 hadoop 版本为 3.x 应该会出现在下述类型报错,显然是参数没有被定义

Starting namenodes on [hadoop102]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [hadoop104]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operati

下面我们需要在定义这些参数

方法一:/etc/profile 文件内配置参数

vim /etc/profile

内容如下:

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

方法二: 修改 start-dfs.shstop-dfs.shstart-yarn.shstop-yarn.sh 四个文件

修改 HDFS 文件

vim $HADOOP_HOME/sbin/start-dfs.sh
vim $HADOOP_HOME/sbin/stop-dfs.sh

在顶部添加以下参数

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

修改 YARN 文件

vim $HADOOP_HOME/sbin/start-yarn.sh
vim $HADOOP_HOME/sbin/stop-yarn.sh

在顶部添加以下参数

YARN_RESOURCEMANAGER_USER=root
HDFS_DATANODE_SECURE_USER=yarn
YARN_NODEMANAGER_USER=root

2)各个服务组件逐一启动/停止

(1)启停 HDFS 组件

hdfs --daemon start/stop namenode/datanode/secondarynamenode

(2)启停 YARN

yarn --daemon start/stop resourcemanager/nodemanager

(3)启停 JobHistory

mr-jobhistory-daemon.sh start historyserver
mr-jobhistory-daemon.sh stop historyserver

3.x 版本的应该会出现下述警告

WARNING: Use of this script to start the MR JobHistory daemon is deprecated.
WARNING: Attempting to execute replacement "mapred --daemon start" instead.

不想看到的话,可以改为使用下述命令

mapred --daemon start historyserver
mapred --daemon stop historyserver

1.7.5. 编写集群常用脚本

集群启停脚本
vim myhadoop.sh

添加内容如下:

#!/bin/bashif [ $# -lt 1 ]
thenecho "No Args Input..."exit ;
ficase $1 in
"start")echo "=========== 启动 hadoop 集群 ==========="echo "----------- 启动 hdfs -----------------"ssh hadoop102 "$HADOOP_HOME/sbin/start-dfs.sh"echo "----------- 启动 yarn -----------------"ssh hadoop102 "$HADOOP_HOME/sbin/start-yarn.sh"echo "----------- 启动 historyserver --------"ssh hadoop103 "$HADOOP_HOME/bin/mapred --daemon start historyserver"
;;
"stop")echo "=========== 关闭 hadoop 集群 ==========="echo "----------- 关闭 historyserver --------"ssh hadoop103 "$HADOOP_HOME/bin/mapred --daemon stop historyserver"echo "----------- 关闭 yarn -----------------"ssh hadoop102 "$HADOOP_HOME/sbin/stop-yarn.sh"echo "----------- 关闭 hdfs -----------------"ssh hadoop102 "$HADOOP_HOME/sbin/stop-dfs.sh"
;;
*)echo "Input Args Error..."
;;
esac

修改脚本执行权限

chmod 777 myhadoop.sh
查看集群所有服务器进程脚本 jpsall
vim jpsall

添加内容如下:

#!/bin/bashfor host in hadoop102 hadoop103 hadoop104
doecho =============== $host ===============ssh $host jps 
done

修改脚本执行权限

chmod 777 jpsall
集群分发脚本 xsync

/usr/local/bin 目录下创建 xsync 文件

cd /usr/local/bin
vim xsync

添加内容如下:

#!/bin/bash#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); thenecho no args;exit;
fi#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir#4 获取当前用户名称
user=`whoami`#5 循环
for i in hadoop102 hadoop103 hadoop104
doecho ------------------- $i --------------rsync -rvl $pdir/$fname $user@$i:$pdir
done

修改脚本执行权限

chmod 777 xsync

1.7.6. 脚本使用

1)启停 Hadoop 集群全部模块

./myhadoop.sh start
./myhadoop.sh stop

2)查看 Hadoop 集群所有进程

./jpsall

运行代码可以看到 hdfs,yarm,historyserver 三个模块全部启动

如果无法使用可能环境变量问题(把 /etc/profile 里的 java 环境变量添加到 ~/.bashrc

vim ~/.bashrc
source ~/.bashrc

查看三台机器所有进程:

hadoop102:NameNode,DataNode,ResourceManager,NodeManager,Jps
hadoop103:DataNode,NodeManager,JobHistoryServer,Jps
hadoop104:DataNode,SecondaryNameNode,NodeManager,Jps

3)分发文件

退回根目录,准备一个 test.txt 文件,

xsync test.txt

在另外两个服务器的根目录下存在 test.txt 即分发成功。

备注

每次重启容器需要重新启动 ssh 服务,同时容器的 IP 与其启动顺序有关会出现不对应的情况,可以自行写一个 shell 文件每次启动完运行一下,例如:

# 找到并打开文件/root/.bashrc
$ vim /root/.bashrc
# 在.bashrc末尾添加如下代码
$ service ssh start

相关文章:

使用 Docker 搭建 Hadoop 集群

1.1. 启用 WSL 与虚拟机平台 1.1.1. 启用功能 启用 WSL并使用 Moba 连接-CSDN博客 1.2 安装 Docker Desktop 最新版本链接&#xff1a;Docker Desktop: The #1 Containerization Tool for Developers | Docker 指定版本链接&#xff1a;Docker Desktop release notes | Do…...

optuna和 lightgbm

文章目录 optuna使用1.导入相关包2.定义模型可选参数3.定义训练代码和评估代码4.定义目标函数5.运行程序6.可视化7.超参数的重要性8.查看相关信息9.可视化的一个完整示例10.lightgbm实验 optuna使用 1.导入相关包 import torch import torch.nn as nn import torch.nn.functi…...

Android 设置铃声和闹钟

Android设置铃声和闹钟使用的方法是一样的&#xff0c;但是要区别的去获取对应的权限。 统一权限&#xff0c;不管是设置闹钟还是铃声&#xff0c;他们都需要一个系统设置权限如下: //高版本需要WRITE_SETTINGS权限//此权限是敏感权限&#xff0c;无法动态申请&#xff0c;需要…...

自动化测试模型(一)

8.8.1 自动化测试模型概述 在自动化测试运用于测试工作的过程中&#xff0c;测试人员根据不同自动化测试工具、测试框架等所进行的测试活动进行了抽象&#xff0c;总结出线性测试、模块化驱动测试、数据驱动测试和关键字驱动测试这4种自动化测试模型。 线性测试 首先&#…...

解决nuxt3下载慢下载报错问题

在下载nuxt3时总是下不下来&#xff0c;最后还报错了。即使改成国内镜像源也不行。 解决方法&#xff1a; 直接去github上下载 https://github.com/nuxt/starter/tree/v3 解压后得到如下目录&#xff1a; 手动修改项目名和文件夹名 安装依赖 npm install可能会比较慢或下不…...

Ubuntu修改swap大小

查看swap位置和大小&#xff1a; swapon -s 方案一&#xff1a;修改原有文件大小方式 第一步&#xff1a;进入系统根目录cd /; 第二步&#xff1a;执行&#xff1a;sudo dd if/dev/zero of/swap bs1M count16384 //每段块1M 共16384块&#xff0c;即16G 第三步&#xff1a;执行…...

[C#] 复数乘法的跨平台SIMD硬件加速向量算法(不仅支持X86的Sse、Avx、Avx512,还支持Arm的AdvSimd)

文章目录 一、简单算法二、向量算法2.1 算法思路2.1.1 复数乘法的数学定义2.1.2 复数的数据布局2.1.3 第1步&#xff1a;计算 (a*c) (-b*d)i2.1.4 第2步&#xff1a;计算 (a*d) (b*c)i2.1.5 第3步&#xff1a;计算结果合并 2.2 算法实现&#xff08;UseVectors&#xff09;2.…...

C#WPF基础介绍/第一个WPF程序

什么是WPF WPF&#xff08;Windows Presentation Foundation&#xff09;是微软公司推出的一种用于创建窗口应用程序的界面框架。它是.NET Framework的一部分&#xff0c;提供了一套先进的用户界面设计工具和功能&#xff0c;可以实现丰富的图形、动画和多媒体效果。 WPF 使用…...

强大的接口测试可视化工具:Postman Flows

Postman Flows是一种接口测试可视化工具&#xff0c;可以使用流的形式在Postman工作台将请求接口、数据处理和创建实际流程整合到一起。如下图所示 Postman Flows是以API为中心的可视化应用程序开发界面。它提供了一个无限的画布用于编排和串连API&#xff0c;数据可视化来显示…...

系统设计及解决方案

发送验证码 1&#xff1a;根据手机号从Redis中获取value(验证码_时间戳) 2&#xff1a;如果value不为空&#xff0c;并且时间戳与当前时间戳的间隔小于60秒&#xff0c;则返回一个错误信息 3&#xff1a;生成随机验证码 4&#xff1a;调用阿里云短信服务API给用户发送短信验证码…...

从0入门自主空中机器人-2-2【无人机硬件选型-PX4篇】

1. 常用资料以及官方网站 无人机飞控PX4用户使用手册&#xff08;无人机基本设置、地面站使用教程、软硬件搭建等&#xff09;&#xff1a;https://docs.px4.io/main/en/ PX4固件开源地址&#xff1a;https://github.com/PX4/PX4-Autopilot 飞控硬件、数传模块、GPS、分电板等…...

Linux之ARM(MX6U)裸机篇----2.汇编LED驱动实验

一&#xff0c;alpha的LED灯硬件原理分析 STM32 IO初始化流程 ①&#xff0c;使能GPIO时钟 ②&#xff0c;设置IO复用&#xff0c;复用为GPIO ③&#xff0c;配置GPIO的电气属性推挽&#xff0c;上拉下拉 ④&#xff0c;使用GPIO&#xff0c;输出高/低电平 MX6ULL IO初始化…...

e3 1220lv3 cpu-z分数

e3 1220lv3 双核四线程&#xff0c;1.1G频率&#xff0c;最低可在800MHZ运行&#xff0c;TDP 13W。 使用PE启动后测试cpu-z分数。 现在e3 1220lv3的价格落到69元。...

HTML5适配手机

要使 HTML5 网站适配手机设备&#xff0c;您可以遵循以下几个步骤和最佳实践&#xff1a; 1. 使用视口&#xff08;Viewport&#xff09; 在 HTML 文档的 <head> 部分添加视口元标签&#xff0c;以确保页面在移动设备上正确缩放和显示&#xff1a; <meta name"…...

C# 中使用 MassTransit

在生产环境中使用 MassTransit 时&#xff0c;通常需要进行详细的配置&#xff0c;包括设置连接字符串、配置队列、配置消费者、处理重试和错误队列等。以下是一个完整的示例&#xff0c;展示了如何在 ASP.NET Core 应用程序中配置 MassTransit&#xff0c;包括请求/响应模式和…...

网络编程 实现联网 b+Tree

网络编程是客户端和服务器之间通信的基础&#xff0c;也是现代应用开发中不可或缺的技能。在 Unity 中实现网络功能&#xff0c;需要结合计算机网络原理、数据结构与算法&#xff0c;以及网络协议的实际应用。以下是对这一块内容的详细介绍&#xff0c;包括每个涉及到的知识点&…...

zentao ubuntu上安装

#下载ZenTaoPMS-21.2-zbox_amd64.tar.gz&#xff08;https://www.zentao.net/downloads.html&#xff09; https://dl.zentao.net/zentao/21.2/ZenTaoPMS-21.2-zbox_amd64.tar.gzcd /opt tar -zxvf ZenTaoPMS-21.2-zbox_amd64.tar.gz#启动 /opt/zbox/zbox start /opt/zbox/zbox…...

Java 网络原理 ①-IO多路复用 || 自定义协议 || XML || JSON

这里是Themberfue 在学习完简单的网络编程后&#xff0c;我们将更加深入网络的学习——HTTP协议、TCP协议、UDP协议、IP协议........... IO多路复用 ✨在上一节基于 TCP 协议 编写应用层代码时&#xff0c;我们通过一个线程处理连接的申请&#xff0c;随后通过多线程或者线程…...

Bash Shell知识合集

1. chmod命令 创建一个bash shell脚本 hello.sh ~script $ touch hello.sh脚本创建完成后并不能直接执行&#xff0c;我们要用chmod命令授予它可执行的权限&#xff1a; ~script $ chmod 755 hello.sh授权后的脚本可以直接执行&#xff1a; ~script $ ./hello.sh2.指定运行…...

从0入门自主空中机器人-1【课程介绍】

关于本课程&#xff1a; 本次课程是一套面向对自主空中机器人感兴趣的学生、爱好者、相关从业人员的免费课程&#xff0c;包含了从硬件组装、机载电脑环境设置、代码部署、实机实验等全套详细流程&#xff0c;带你从0开始&#xff0c;组装属于自己的自主无人机&#xff0c;并让…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

JVM垃圾回收机制全解析

Java虚拟机&#xff08;JVM&#xff09;中的垃圾收集器&#xff08;Garbage Collector&#xff0c;简称GC&#xff09;是用于自动管理内存的机制。它负责识别和清除不再被程序使用的对象&#xff0c;从而释放内存空间&#xff0c;避免内存泄漏和内存溢出等问题。垃圾收集器在Ja…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

C++中string流知识详解和示例

一、概览与类体系 C 提供三种基于内存字符串的流&#xff0c;定义在 <sstream> 中&#xff1a; std::istringstream&#xff1a;输入流&#xff0c;从已有字符串中读取并解析。std::ostringstream&#xff1a;输出流&#xff0c;向内部缓冲区写入内容&#xff0c;最终取…...

ardupilot 开发环境eclipse 中import 缺少C++

目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...

AI编程--插件对比分析:CodeRider、GitHub Copilot及其他

AI编程插件对比分析&#xff1a;CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展&#xff0c;AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者&#xff0c;分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

JVM虚拟机:内存结构、垃圾回收、性能优化

1、JVM虚拟机的简介 Java 虚拟机(Java Virtual Machine 简称:JVM)是运行所有 Java 程序的抽象计算机,是 Java 语言的运行环境,实现了 Java 程序的跨平台特性。JVM 屏蔽了与具体操作系统平台相关的信息,使得 Java 程序只需生成在 JVM 上运行的目标代码(字节码),就可以…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...