当前位置: 首页 > 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;并让…...

【设计模式-5】设计模式的总结

说明&#xff1a;介绍完所有的设计模式&#xff0c;本文做一下总结 设计模式介绍 博主写的设计模式博客如下&#xff1a; 【设计模式-1】UML和设计原则 【设计模式-2.1】创建型——单例模式 【设计模式-2.2】创建型——简单工厂和工厂模式 【设计模式-2.3】创建型——原型…...

Spark 之 AQE

个人其他链接 AQE 执行顺序https://blog.csdn.net/zhixingheyi_tian/article/details/125112793 AQE 产生 AQE 的 循环触发点 src/main/scala/org/apache/spark/sql/execution/adaptive/AdaptiveSparkPlanExec.scala override def doExecute(): RDD[InternalRow] = {withFin…...

natapp 内网穿透失败

连不上网络错误调试排查详解 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 如何将DNS服务器修改为114.114.114.114_百度知道 连不上/错误信息等问题解决汇总 - NATAPP-内网穿透 基于ngrok的国内高速内网映射工具 nslookup auth.natapp.cnping auth.natapp.cn...

从零开始的python学习(七)P102+P103+P104+P105+P106+P107

本文章记录观看B站python教程学习笔记和实践感悟&#xff0c;视频链接&#xff1a;【花了2万多买的Python教程全套&#xff0c;现在分享给大家&#xff0c;入门到精通(Python全栈开发教程)】 https://www.bilibili.com/video/BV1wD4y1o7AS/?p6&share_sourcecopy_web&v…...

安全访问家中 Linux 服务器的远程方案 —— 专为单用户场景设计

在现代远程办公与频繁差旅的背景下&#xff0c;许多人需要从外地访问家中的 Linux 文件服务器&#xff0c;以获取重要文件。在涉及敏感数据&#xff08;如客户资料、财务信息&#xff09;时&#xff0c;数据的安全性成为首要考虑因素。以下内容将聚焦于如何在仅有一台笔记本电脑…...

React 基础入门笔记

一、JSX语法规则 1. 定义虚拟DOM时&#xff0c;不要写引号 2.标签中混入JS表达式时要用 {} &#xff08;1&#xff09;.JS表达式与JS语句&#xff08;代码&#xff09;的区别 &#xff08;2&#xff09;.使用案例 3.样式的类名指定不要用class&#xff0c;要用className 4.内…...

04 Deep learning神经网络编程基础 梯度下降 --吴恩达

梯度下降在深度学习的应用 梯度下降是优化神经网络参数的核心算法,通过迭代调整参数最小化损失函数。 核心公式 参数更新规则: θ t + 1 = θ t − η ∇ J ( θ...

【Visual Studio 2022】卸载安装,ASP.NET

Visual Studio 2022 彻底卸载教程 手动清理残留文件夹 删除C:\Program Files\Microsoft Visual Studio 是旧版本 Visual Studio 的残留安装目录 文件夹名对应的 Visual Studio 版本Microsoft Visual Studio 9.0Visual Studio 2008Microsoft Visual Studio 10.0Visual Studio…...

嵌入式面试高频!!!C语言(四)(嵌入式八股文,嵌入式面经)

更多嵌入式面试文章见下面连接&#xff0c;会不断更新哦&#xff01;&#xff01;关注一下谢谢&#xff01;&#xff01;&#xff01;&#xff01; ​​​​​​​https://blog.csdn.net/qq_61574541/category_12976911.html?fromshareblogcolumn&sharetypeblogcolumn&…...

46、web实验-遍历数据与页面bug修改

46、web实验-遍历数据与页面bug修改 在Web开发中&#xff0c;遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解&#xff1a; ### 一、遍历数据 **目的**&#xff1a;在页面上动态展示数据&#xff0c;例如用户列表、商品信息等。 **常用方法**&#xff1a; ####…...