使用 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

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/64679.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/64679.shtml
英文地址,請注明出處:http://en.pswp.cn/web/64679.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【每日學點鴻蒙知識】廣告ID、NFC手機充值、CSS支持語法、PC與模擬器交互、SO熱更新等

1、HamonyOS 樣機獲取成功返回Oaid為00000000-0000-0000-0000-000000000000&#xff1f; 請求授權時需要觸發動態授權彈窗,看一下是不是沒有觸發授權彈窗。 可以參考以下代碼以及文檔&#xff1a; // ets import identifier from ohos.identifier.oaid; import hilog from oh…

【YOLO 項目實戰】(12)紅外/可見光多模態目標檢測

歡迎關注『youcans動手學模型』系列 本專欄內容和資源同步到 GitHub/youcans 【YOLO 項目實戰】&#xff08;10&#xff09;YOLO8 環境配置與推理檢測 【YOLO 項目實戰】&#xff08;11&#xff09;YOLO8 數據集與模型訓練 【YOLO 項目實戰】&#xff08;12&#xff09;紅外/可…

logback日志框架源碼分析

目錄 (一)入口:slf4j選擇日志框架 (二)日志框架初始化 (1)logback的3種配置方式 a、BasicConfigurator默認配置 b、SPI方式配置的Configurator實現類 c、通過配置文件初始化 (2)xml配置文件初始化 (三)Logger的創建 (四)打印日志 本文源碼基于:logback版…

國產數據庫OceanBase從入門到放棄教程

1. 介紹 是由螞蟻集團&#xff08;Ant Group&#xff0c;原螞蟻金服&#xff09;自主研發的分布式關系型數據庫。它旨在解決海量數據存儲和高并發訪問的問題&#xff0c;特別適合金融級應用場景&#xff0c;如支付寶等對數據一致性、可靠性和性能有極高要求的服務。以下是關于…

連接Milvus

連接到Milvus 驗證Milvus服務器正在偵聽哪個本地端口。將容器名稱替換為您自己的名稱。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用瀏覽器訪問連接地址htt…

機器學習中的欠擬合

當模型不能夠準確地表達輸入與輸出的關系時&#xff0c;就是欠擬合。它在訓練集和未見過的數據都會產生高誤差率。過度擬合則在訓練集表現出低誤差率&#xff0c;只有對未見過的數據表現出高誤差率。 當模型太過于簡單時&#xff0c;它需要更多的訓練時間、更多的輸入特征、更…

安卓入門二 Kotlin基礎

Kotlin Kotlin的歷史 Kotlin由Jet Brains公司開發設計&#xff0c;2011年公布第一版&#xff0c;2012年開源。 2016年發布1.0正式版&#xff0c;并且Jet Brains在IDEA加入對Kotlin的支持&#xff0c;安卓自此又有新的選擇。 2019年谷歌宣布Kotlin成為安卓第一開發語言&#x…

淺談Cocos2djs逆向

前言 簡單聊一下cocos2djs手遊的逆向&#xff0c;有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念&#xff1a; Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio&#xff0c;區別是前者是cocos2djs專用的開發工具&#xff0c;後者則是coco…

STM32驅動NRF24L01

一、NRF24L01的相關介紹 1.2 引腳的介紹 關于SPI的引腳就不再說了&#xff0c;這里介紹其余的兩個引腳&#xff1a; CE 模塊控制引腳&#xff1a;芯片開啟信號&#xff0c;激活RX或TX模式 IRQ 模塊中斷信號輸出引腳&#xff1a;其低電平有效&#xff0c;也就是中斷時變為低電平…

【Python】 glob批處理模塊的學習

1.什么是glob模塊&#xff1f; 在 Python 中&#xff0c;glob模塊是一個用于文件路徑名的模式匹配的工具。它使用簡單的通配符規則來匹配文件和目錄的路徑&#xff0c;這些通配符規則類似于在命令行中使用的文件搜索規則。這使得在處理文件系統中的多個文件或目錄時非常方便&am…

Android 系統 AlarmManager 系統層深度定制

Android 系統 AlarmManager 系統層深度定制 目錄 引言AlarmManager 概述AlarmManager 系統架構AlarmManager 核心代碼解讀AlarmManager 深度定制方法 修改 AlarmManagerService 修改定時任務調度策略增加定時任務類型定制內核層 修改定時觸發精度增加定時觸發類型優化定時任務…

解決vue-i18n在非.vue文件中,在其他js文件中無法使用的問題

其實很簡單&#xff0c;把i18n直接掛載到window上&#xff0c;全局可使用。下面請看詳細。 一、安裝 npm install vue-i18n9二、在vue的main.js中引入 import Vue from "vue" import VueI18n from vue-i18n Vue.use(VueI18n)//注入到所有的子組件&#xff0c;就是…

線性代數期末復習 [基礎篇]

關于第六點: AXB 在期末考試中一般A都是可逆的 我們可以先把A的逆求出來,X A ? 1 B A^-1B A?1B,或者 (A,B) -> r (E, A ? 1 B A^-1B A?1B) 如果A矩陣不可逆,轉變為方程組求解問題,假設都是二維矩陣 A(x1,x2) (b1,b2) Ax1 b1,Ax2 b2 XAB 如果A可逆,直接XB A ? 1 A^-…

C++ —— 數據類型轉換和數據類型的別名

數據類型轉換 引言自動類型轉換強制類型轉換數據類型的別名 引言 計算機進行運算時&#xff0c;要求各操作數的數據類型、大小和存儲方式都要相同。&#xff08;例如&#xff1a;8字節的整數和8字節的浮點數&#xff0c;雖然占用內存大小一樣&#xff0c;但是存儲方式不同&…

Kali 自動化換源腳本編寫與使用

1. 背景與需求 在使用 Kali Linux 的過程中&#xff0c;軟件源的配置對系統的更新與軟件安裝速度至關重要。 Kali 的默認官方源提供了安全且最新的軟件包&#xff0c;但有時由于網絡條件或地理位置的限制&#xff0c;使用官方源可能會出現速度較慢的問題。 為了解決這一問題&a…

設計模式-創建型-工廠方法模式

什么是工廠方法模式&#xff1f; 工廠方法模式&#xff08;Factory Method Pattern&#xff09;是 創建型設計模式之一&#xff0c;目的是通過定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪個類。簡而言之&#xff0c;工廠方法模式通過延遲對象的創建過程到子類來…

【Unity3D】ECS入門學習(十二)IJob、IJobFor、IJobParallelFor

IJob&#xff1a;開啟單個線程進行計算&#xff0c;線程內不允許對同一個數據進行操作&#xff0c;也就是如果你想用多個IJob分別計算&#xff0c;將其結果存儲到同一個NativeArray<int>數組是不允許的&#xff0c;所以不要這樣做&#xff0c;如下例子就是反面教材&#…

Spring 創建和管理 Bean 的原理,以及Spring 的單例模式是否線程安全?(有無狀態Bean)

Spring 是一個輕量級的開源框架&#xff0c;廣泛應用于 Java 企業級應用的開發。它提供了一個全面的、基于 IOC&#xff08;控制反轉&#xff09;和 AOP&#xff08;面向切面編程&#xff09;的容器&#xff0c;可以幫助開發者更好地管理應用程序中的對象。 Spring 創建和管理…

Docker容器鏡像制作

Docker鏡像的基本概念 1. 什么是Docker鏡像&#xff1f; Docker鏡像是一種輕量級、可執行的軟件包&#xff0c;包含運行某個應用所需的所有代碼、庫、依賴項和配置文件。它的形成是一種“打包”和“快照”過程&#xff0c;使得應用能夠在不同環境中保持一致的功能表現。 2. …

InfoNCE Loss詳解(上)

引言 InfoNCE對比學習損失是學習句嵌入繞不開的知識點&#xff0c;本文就從頭開始來探討一下它是怎么來的。 先驗知識 數學期望與大數定律 期望(expectation&#xff0c;expected value&#xff0c;數學期望&#xff0c;mathematical expectation)是隨機變量的平均值&#…