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

Hadoop其一,介绍本地模式,伪分布模式和全分布搭建

目录

一、Hadoop介绍

二、HDFS的本地模式

三、伪分布模式

四、Hdfs中的shell命令

五、全分布搭建

六、使用Java代码操作HDFS

1、环境准备

2、单元测试(Junit)​编辑


一、Hadoop介绍

Hadoop 分为三部分 :  Common、HDFS 、Yarn、MapReduce(有点过时了)
Hadoop生态圈:除了hadoop技术以外,还有hive、zookeeper、flume、sqoop、datax、azkaban等一系列技术。Hadoop 是 道格·卡丁  本身他是Lucene的创始人。
Lucene 其实是一个jar包。检索现在主流的是Solr以及ES(Elastic Search)。
比如现在每一个网站,都有一个检索的输入框,底层技术: Solr (稍微有点过时了) ,  ES (正在流行中)首先面临的问题是:海量数据如何存储?
根据谷歌推出的三篇论文:
BigTable    -- HBase
GFS         -- HDFS
MapReduce   -- MapReduce并将这些技术统称为 Hadoop (Logo 大象)。Hadoop的三个版本:
Apache 版本(开源版本)    3.3.1 非常的新了
Cloudera 版本--商⽤版(道格·卡丁) CDH
Hortonworks  --hadoop的代码贡献者在这家公司非常的多。
现在各个大公司都在推出自己的大数据平台--> 大数据平台开发工程师
DataLight  --> 国产的CDH平台

二、HDFS的本地模式

hdfs: 分布式文件管理系统

海量数据存储的终极解决方案:整出来一个平台,这个平台的服务器可以无限扩展。

HDFS : 解决海量数据的存储问题 1p = 1024 T

Yarn : 计算的资源基础,所有的MR任务需要运行在Yarn上。

MapReduce:解决计算问题,它是一个计算框架(需要写代码的)

思考一个问题:

淘宝平台:拥有海量商户,每一个商户都有很多商品,每一个商品需要上传很多照片,照片得高清,一张照片5M左右。淘宝如何解决海量图片的储存问题?-- 淘宝拥有一个技术 FastDFS,搭建一个图片集群,这个集群中的服务器,可以无限拓展。而且一张照片存3份。

人类的思想拓展非常快,数据存储在哪里是安全的?任何一家公司都不靠谱,政府不靠谱。全人类最靠谱,能不能将全人类的硬盘全部连起来,变成一个大硬盘。假如一个人贡献自己的硬盘,假如我在你的电脑上放了数据,我就会给你奖励。假如你使用了别人的硬盘,需要付费。 --国家定义为基础设施。

使用虚拟货币结算,而且只支持 fil 这个币。

HDFS三种模式:本地模式,伪分布模式,全分布模式

HDFS-- 分布式文件存储系统
Fil币挖矿FastDFS(阿里巴巴)
原理都是一样的。
都是将多台电脑,硬盘组合在一起,形成一个文件存储系统,任何人都可以上传下载文件到这个平台上,数据自动备份,自动容灾。
如果文件系统空间不够了,直接添加电脑即可,完美对接之前的服务器。
如果中间服务器坏掉了,也不影响数据的完整性。

配置:

使用一下hadoop这个软件(案例WordCount):

词频统计就是我们大数据中的HelloWorld!在 /home 下创建了一个文件 wc.txt   命令: touch wc.txt需要统计的词如下:
hello world spark flink
hello cfxj 2202 laolv
hello suibian suibian hello接着使用自动的wordCount工具进行统计:
hadoop jar /opt/installs/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /home/wc.txt /home/outputhadoop jar   执行某个jar包(其实就是java代码)/opt/installs/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar  这个是jar的地址/home/wc.txt   要统计的文件
/home/output   统计结果放哪里

如果统计的结果文件夹已经存在,会报错。

上面总结一下:

数据在本地磁盘上  /home/wc.txt
计算的结果也是在本地磁盘上 /home/ouput

案例二:PI的计算

hadoop jar /opt/installs/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar pi 10 10010 代表10个任务
100 代表的是100次/每个任务

三、伪分布模式

伪分布:按照分布式的步骤搭建,但是呢,服务器只有一台。

只能用于开发、和学习用。

比如我想搭建一个集群,将集群中的所有磁盘连接在一起形成一个云端的hdfs.
但是公司就买了一台服务器。所以搭建出来的就是伪分布模式。
伪分布的意思:按照全分布的步骤搭建的集群,但是linux服务器只有一台。

进行搭建之前的一些准备工作:

配置开始:

位置: /opt/installs/hadoop/etc/hadoop

以下圈住的都是重要的文件:

<configuration><!-- 设置namenode节点 --><!-- 注意: hadoop1.x时代默认端⼝9000 hadoop2.x时代默认端⼝8020 hadoop3.x时 代默认端⼝ 9820 --><property><name>fs.defaultFS</name><value>hdfs://bigdata01:9820</value></property><!-- hdfs的基础路径,被其他属性所依赖的⼀个基础路径 --><property><name>hadoop.tmp.dir</name><value>/opt/installs/hadoop/tmp</value></property>
</configuration>
<configuration><property><!--备份数量--><name>dfs.replication</name><value>1</value></property><!--secondarynamenode守护进程的http地址:主机名和端⼝号。参考守护进程布局 --><property><name>dfs.namenode.secondary.http-address</name><value>bigdata01:9868</value></property><!-- namenode守护进程的http地址:主机名和端⼝号。参考守护进程布局 --><property><name>dfs.namenode.http-address</name><value>bigdata01:9870</value></property>
</configuration>
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=rootexport JAVA_HOME=/opt/installs/jdk

修改workers 文件:

vi workers
修改里面的内容为: bigdata01 保存

对整个集群记性namenode格式化:

hdfs namenode -format

格式化其实就是创建了一系列的文件夹:

这个文件夹的名字是 logs tmp

假如你想格式化第二次,需要先删除这两个文件夹,然后再格式化

启动集群:

start-dfs.sh

通过网址访问hdfs集群:

http://192.168.233.128:9870/

如果访问不到:检查防火墙是否关闭。

测试一下这个hdfs的文件系统:

目前搭建的这个到底是hdfs的伪分布还是hadoop伪分布?

答案是 hdfs的伪分布,但是hdfs 也是hadoop的一部分。

真正的hadoop伪分布还需要配置yarn 才算真正的伪分布。

使用这个文件系统:

1、将要统计的内容上传至hdfs文件系统hdfs dfs -mkdir /homehdfs dfs -put /home/wc.txt /home
2、使用wordcount统计wc.txthadoop jar /opt/installs/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /home/wc.txt /home/ouput3、查看统计结果
hdfs dfs -cat /ouput/*

假如你的环境是伪分布式模式,那么本地模式直接被替换了,回不去了。

此模式跟本地模式有何区别?
这两种方式,首选统计的代码都在本地,但是本地模式,数据和统计的结果都在本地。
伪分布模式,它的数据来源在 hdfs 上,统计结果也放在 hdfs上。

如果此时再执行以前的workcount就会报错,原因是以前是本地模式,现在是伪分布模式,伪分布模式,只会获取hdfs上的数据,将来的结果也放入到hdfs上,不会获取本地数据:

四、Hdfs中的shell命令

假如你想通过web界面查看一个文件的内容,点击报错:

Couldn't preview the file. NetworkError: Failed to execute 'send' on 'XMLHttpRequest': Failed to load 'http://bigdata01:9864/webhdfs/v1/output/part-r-00000?op=OPEN&namenoderpcaddress=bigdata01:9820&offset=0&_=1692068863115'.默认是要报错的,因为这是一种安全机制,可以修改一下:
在hdfs-site.xml 中添加如下配置:<property><name>dfs.webhdfs.enabled</name><value>true</value>
</property>在windows本机,修改hosts映射关系。
C:\Windows\System32\drivers\etc\hosts
修改内容如下:
192.168.233.128 bigdata01

关于hdfs文件系统,有三种操作方式:
1、图形化界面    比如 http://IP地址:9870
2、shell命令操作  比如 hdfs dfs -put 上传  -cat 查看
3、通过java代码操作

shell命令操作:东西特别的多,只学其中一些。

hdfs dfs -moveFromLocal 本地文件  hdfs的路径   
跟put上传不一样的是,move结束后,本地文件会消失

hdfs dfs -get hdfs的路径 本地文件      此操作要谨慎

hdfs dfs -cp /log.txt /ouput  将hdfs上的一个文件拷贝到另一个文件夹
hdfs dfs -chmod 777 /wc.txt   hdfs上的文件也可以赋权限

五、全分布搭建

全分布模式:必须至少有三台以上的Linux。

前期准备工作:

1、准备三台服务器

目前有两台,克隆第二台(因为第二台没有安装mysql), 克隆结束后,进行修复操作

1) 修改IP 2) 修改主机名 3)修改映射文件hosts

检查是否满足条件:

环境准备⼯作:

1、安装了jdk

2、设置host映射

192.168.32.128 bigdata01

192.168.32.129 bigdata02

192.168.32.130 bigdata03

远程拷贝:

scp -r /etc/hosts root@bigdata02:/etc/

scp -r /etc/hosts root@bigdata03:/etc/

3、免密登录

bigdata01 免密登录到bigdata01 bigdata02 bigdata03

ssh-copy-id bigdata03

4、第一台安装了hadoop

5、关闭了防⽕墙

systemctl status firewalld

6、修改linux的⼀个安全机制

vi /etc/selinux/config

修改⾥⾯的 SELINUX=disabled

一定要确保三台电脑上的hosts文件都是:

192.168.32.128 bigdata01
192.168.32.129 bigdata02
192.168.32.130 bigdata03

修改一台,长拷贝到其他两台:

scp -r /etc/hosts root@bigdata01:/etc
scp -r /etc/hosts root@bigdata02:/etc

2、检查各项内容是否到位

如果以前安装的有伪分布模式,服务要关闭。 stop-dfs.sh

3、修改bigdata01配置文件

路径:/opt/installs/hadoop/etc/hadoop

跟伪分布一样:不需要修改

<configuration><!-- 设置namenode节点 --><!-- 注意: hadoop1.x时代默认端⼝9000 hadoop2.x时代默认端⼝8020 hadoop3.x时 代默认端⼝ 9820 --><property><name>fs.defaultFS</name><value>hdfs://bigdata01:9820</value></property><!-- hdfs的基础路径,被其他属性所依赖的⼀个基础路径 --><property><name>hadoop.tmp.dir</name><value>/opt/installs/hadoop/tmp</value></property>
</configuration>
<configuration><property><name>dfs.replication</name><value>3</value></property><!--secondarynamenode守护进程的http地址:主机名和端⼝号。参考守护进程布局 --><property><name>dfs.namenode.secondary.http-address</name><value>bigdata02:9868</value></property><!-- namenode守护进程的http地址:主机名和端⼝号。参考守护进程布局 --><property><name>dfs.namenode.http-address</name><value>bigdata01:9870</value></property>
</configuration>

跟伪分布一样,不需要修改

export JAVA_HOME=/opt/installs/jdk
# Hadoop3中,需要添加如下配置,设置启动集群⻆⾊的⽤户是谁
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

修改workers

bigdata01
bigdata02
bigdata03

修改完了第一台的配置文件,开始分发到其他两台上去。

假如以前没有将bigdata01上的hadoop 拷贝给 02 和 03

那么就远程拷贝:

scp -r /opt/installs/hadoop/ bigdata02:/opt/installs/

scp -r /opt/installs/hadoop/ bigdata03:/opt/installs/

如果以前已经拷贝过了,只需要拷贝刚修改过的配置文件即可:

只需要复制配置文件即可

scp -r /opt/installs/hadoop/etc/hadoop/ bigdata02:/opt/installs/hadoop/etc/

scp -r /opt/installs/hadoop/etc/hadoop/ bigdata03:/opt/installs/hadoop/etc/


拷贝环境变量:
scp -r /etc/profile root@bigdata02:/etc/
scp -r /etc/profile root@bigdata03:/etc/在02 和 03 上刷新环境变量  source /etc/profile

4、格式化namenode

hdfs namenode -format

5、启动hdfs                  

只在第一台电脑上启动
start-dfs.sh

启动后jps,看到

bigdata01

bigdata02

bigdata03

namenode

secondaryNameNode

x

datanode

datanode

datanode

web访问:namenode 在哪一台,就访问哪一台。http://bigdata01:9870

总结:

1、start-dfs.sh 在第一台启动,不意味着只使用了第一台,而是启动了集群。

stop-dfs.sh 其实是关闭了集群

2、一台服务器关闭后再启动,上面的服务是需要重新启动的。

这个时候可以先停止集群,再启动即可。也可以使用单独的命令,启动某一个服务。

hadoop-daemon.sh start namenode				# 只开启NameNode
hadoop-daemon.sh start secondarynamenode	# 只开启SecondaryNameNode
hadoop-daemon.sh start datanode				# 只开启DataNodehadoop-daemon.sh stop namenode				# 只关闭NameNode
hadoop-daemon.sh stop secondarynamenode		# 只关闭SecondaryNameNode
hadoop-daemon.sh stop datanode				# 只关闭DataNode

3、namenode 格式化有啥用

相当于在整个集群中,进行了初始化,初始化其实就是创建文件夹。创建了什么文件夹:

logs  tmp
你的hadoop安装目录下。

六、使用Java代码操作HDFS

上传文件,创建文件夹,删除文件,下载等等

1、环境准备

1)解压hadoop的安装包

2)配置环境变量

;%HADOOP_HOME%\bin;%HADOOP_HOME%\sbin;

如果你出现了如下错误:

他的意思是你的java_home ,需要修改一个地方:

在 /etc/hadoop 下的  hadoop-env.cmd 中大约25行set JAVA_HOME=C:\PROGRA~1\Java\jdk1.8.0_144一定确保你的jdk路径是正确的。  
Program Files  == PROGRA~1黑窗口先关闭,再打开即可。

最后一项:

粘贴一个补丁文件:

另外,假如你的 java 版本有问题,也会报这个错误,比如我们需要 64 位的操作软件,你安装了一个 32 位的,请卸载 jdk,并重新安装和配置环境变量。

2、单元测试(Junit)

类似于Main方法。

首先需要导入Junit包:

Welcome to Apache Maven – Maven

<dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency>

第二步:写单元测试代码

最好写在test 文件夹下(专门写测试的文件夹)

单元测试方法:
1、方法上必须有@Test注解
2、方法必须是public void 开头
3、方法没有参数
4、不要将类名写成Test,后果自负
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class TestUnit {@Before  // 每次单元测试方法执行前都会执行该方法  该方法一般存放一些初始化的代码public void init(){System.out.println("我是开始代码");}@After// 每次单元测试方法执行后都会执行该方法  该方法一般都是存放一些连接关闭等收尾工作public void destory(){System.out.println("我是结束代码");}@Test // 该方法即一个单元测试方法,这个方法是一个独立的方法,类似于Main方法。public void testA(){System.out.println("Hello World!");}@Testpublic void testB(){System.out.println("Hello World!");}
}

以下是通过chatgpt帮我生成的代码:

import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class MyUnitTest {@Beforepublic void setUp() {// 在每个测试方法之前执行的准备工作System.out.println("setUp() method called");}@Afterpublic void tearDown() {// 在每个测试方法之后执行的清理工作System.out.println("tearDown() method called");}@Testpublic void testMethod1() {// 测试方法1System.out.println("testMethod1() called");// 添加测试逻辑和断言}@Testpublic void testMethod2() {// 测试方法2System.out.println("testMethod2() called");// 添加测试逻辑和断言}
}

第三步:使用java代码连接hdfs

获取hdfs连接的四种方法:

首先导入需要的jar包:

      <dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.3.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-hdfs</artifactId><version>3.3.1</version></dependency>

代码演示:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.junit.Test;import java.io.IOException;
import java.net.URI;public class Demo01 {@Testpublic void test01() throws IOException {// 配置的意思Configuration configuration = new Configuration();// hdfs的连接地址configuration.set("fs.defaultFS","hdfs://192.168.32.128:9820");FileSystem fileSystem = FileSystem.get(configuration);System.out.println(fileSystem);}@Testpublic void test02() throws Exception {//  URL  和  URI//  URL  和  URI//  URL = 中华人民共和国// 指的是互联网上比较具体的第一个内容,地址//  URI = 共和国   员工的编号9527//  cookie  sessionFileSystem fileSystem = FileSystem.get(new URI("hdfs://192.168.32.128:9820"), new Configuration());System.out.println(fileSystem);}@Testpublic void test03() throws Exception {// 配置的意思Configuration configuration = new Configuration();// hdfs的连接地址configuration.set("fs.defaultFS","hdfs://192.168.32.128:9820");FileSystem fileSystem = FileSystem.newInstance(configuration);System.out.println(fileSystem);}@Testpublic void test04() throws Exception {// 配置的意思Configuration configuration = new Configuration();FileSystem fileSystem = FileSystem.newInstance(new URI("hdfs://192.168.32.128:9820"),configuration);System.out.println(fileSystem);}
}

通过代码上传一个文件到hdfs上。

public class Demo02 {@Testpublic void testUpload() throws Exception {System.setProperty("HADOOP_USER_NAME","root");Configuration configuration = new Configuration();configuration.set("fs.defaultFS","hdfs://192.168.32.128:9820");FileSystem fileSystem = FileSystem.get(configuration);Path localPath = new Path("D:\\a.txt");Path hdfsPath = new Path("/");fileSystem.copyFromLocalFile(localPath,hdfsPath);System.out.println("上传成功!");}
}

System.setProperty("HADOOP_USER_NAME","root");

package com.bigdata;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;import java.io.IOException;public class HdfsUtils {private FileSystem fileSystem;@Beforepublic void setUp() throws IOException {System.setProperty("HADOOP_USER_NAME","root");// 在每个测试方法之前执行的准备工作Configuration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://bigdata01:9820"); // 设置 HDFS 地址fileSystem = FileSystem.get(conf);}@Afterpublic void tearDown() throws IOException {// 在每个测试方法之后执行的清理工作fileSystem.close();}@Testpublic void testUploadFile() throws IOException {String localFilePath = "C:\\Users\\admin\\Desktop\\edip";String hdfsFilePath = "/";fileSystem.copyFromLocalFile(new Path(localFilePath), new Path(hdfsFilePath));}@Testpublic void testCreateFile() throws IOException {String hdfsFilePath = "/newfile.txt";fileSystem.createNewFile(new Path(hdfsFilePath));}@Testpublic void testDownloadFile() throws IOException {String hdfsFilePath = "/newfile.txt";String localFilePath = "C:\\Users\\admin\\Desktop\\file.txt";fileSystem.copyToLocalFile(new Path(hdfsFilePath), new Path(localFilePath));}@Testpublic void testDeleteFile() throws IOException {String hdfsFilePath = "/newfile.txt";fileSystem.delete(new Path(hdfsFilePath), false);}@Testpublic void testMkDir() throws IOException {fileSystem.mkdirs(new Path("/input"));System.out.println("创建文件夹成功");}@Testpublic void testRename() throws IOException {fileSystem.rename(new Path("/edip"),new Path("/aaa.txt"));}// 打印 一个目录下的所有文件,包含文件夹中的文件@Testpublic void testLs() throws Exception {// rm -rRemoteIterator<LocatedFileStatus> iterator = fileSystem.listFiles(new Path("/"), true);while(iterator.hasNext()){LocatedFileStatus locatedFileStatus = iterator.next();System.out.println(locatedFileStatus.getPath().getName());}}// 返回当前目录下的所有文件以及文件夹@Testpublic void testList2() throws Exception {FileStatus[] fileStatuses = fileSystem.listStatus(new Path("/"));for (FileStatus fileStatus : fileStatuses) {System.out.println(fileStatus.getPath().getName());}}
}

下载中如果报错了:

需要将hadoop.dll 拷贝到 C:\windows\system32 这个文件夹下一份。

相关文章:

Hadoop其一,介绍本地模式,伪分布模式和全分布搭建

目录 一、Hadoop介绍 二、HDFS的本地模式 三、伪分布模式 四、Hdfs中的shell命令 五、全分布搭建 六、使用Java代码操作HDFS 1、环境准备 2、单元测试&#xff08;Junit&#xff09;​编辑 一、Hadoop介绍 Hadoop 分为三部分 &#xff1a; Common、HDFS 、Yarn、MapRe…...

蓝桥杯刷题——day3

蓝桥杯刷题——day3 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 每张票据有唯一的 ID 号&#xff0c;全年所有票据的 ID 号是连续的&#xff0c;但 ID 的开始数码是随机选定的。因为工作人员疏忽&#xff0c;在录入 ID 号的时候发生了一处错误&#xff0c;造…...

【Leecode】Leecode刷题之路第79天之单词搜索

题目出处 79-单词搜索-题目出处 题目描述 个人解法 思路&#xff1a; todo代码示例&#xff1a;&#xff08;Java&#xff09; todo复杂度分析 todo官方解法 79-单词搜索-官方解法 方法1&#xff1a;回溯 思路&#xff1a; 代码示例&#xff1a;&#xff08;Java&#xff…...

海康威视监控web实时预览解决方案

海康威视摄像头都试rtsp流&#xff0c;web页面无法加载播放&#xff0c;所以就得转换成web页面可以播放的hls、rtmp等数据流来播放。 一&#xff1a;萤石云 使用萤石云平台&#xff0c;把rtsp转化成ezopen协议&#xff0c;然后使用组件UIKit 最佳实践 萤石开放平台API文档 …...

virtualbox 搭建ubuntu

环境&#xff1a;VirtualBox-6.1.32 1、下载安装virtualbox 略 2、新建ubuntu 3、配置ubuntu 选择虚拟盘 4、安装ubuntu 5、安装ssh sudo apt install openssh-server openssh-client 查看ip 6、安装samba sudo apt install samba 查看ssh启动状态 sudo systemctl stat…...

RK3588开发笔记-Buildroot编译Qt5WebEngine-5.15.10

目录 前言 一、Qt5WebEngine简介 二、Qt5WebEngine编译 总结 前言 Rockchip RK3588是一款强大的多核处理器,广泛应用于边缘计算、人工智能、嵌入式系统等领域。为了在RK3588上运行自定义的Linux系统,并使用Qt5WebEngine进行Web内容渲染,Buildroot是一个非常合适的工具。本…...

FedAdam算法:供给方信用,数据质量;更新一致性

FedAdam算法:供给方信用,数据质量;更新一致性 FedAdam算法概述 FedAdam是一种联邦学习(Federated Learning)算法。联邦学习是一种机器学习技术,它允许在多个设备或数据中心(称为客户端)上训练模型,而无需将数据集中到一个中央服务器,从而保护数据隐私。FedAdam主要用于…...

webrtc音频模块(三) windows Core Audio API及声音的播放

在前面介绍了ADM(Audio Device Module)&#xff0c;它用于抽象音频设备管理和音频数据采集/播放接口。windows的实现是AudioDeviceWinowCode&#xff0c;它封装了Core Audio APIs实现了对音频设备的操作。 Core Audio APIs windows提供了多种音频操作API&#xff0c;比如最常…...

使用ERA5数据绘制风向玫瑰图的简易流程

使用ERA5数据绘制风向玫瑰图的简易流程 今天需要做一个2017年-2023年的平均风向的统计,做一个风向玫瑰图&#xff0c;想到的还是高分辨率的ERA5land的数据&#xff08;0.1分辨率&#xff0c;逐小时分辨率&#xff0c;1950年至今&#xff09;。 风向&#xff0c;我分为了16个&…...

深度优先遍历(DFS)

深度优先遍历&#xff08;DFS&#xff09; 1. 计算布尔二叉树的值2. 求根节点到叶节点数字之和3.二叉树剪枝4.验证二叉搜索树5. 二叉搜索树中第 K 小的元素6. 二叉树的所有路径 深度优先遍历&#xff08;DFS&#xff0c;全称为Depth First Traversal&#xff09;&#xff0c;是…...

国科大网络协议安全期末

完整资料仓库地址&#xff1a;https://gitee.com/etsuyou/UCAS-Network-Protocol-Security 部分题目&#xff1a; 六 论述题10*220 试讨论IPv6解决了IPv4的哪些“痛点”&#xff0c;以及IPv6存在的安全问题试比较IPsec与SSL的安全性 五 简答题5*315 简述MAC欺骗和ARP欺骗的…...

开源密码管理器 Bitwarden 一站式管理所有密码以及 2FA

本文首发于只抄博客&#xff0c;欢迎点击原文链接了解更多内容。 前言 随着注册的平台越来越多&#xff0c;管理密码的难度也越来越高了。要是把密码都设置成一样的&#xff0c;担心哪天某个平台泄露被一锅端&#xff0c;而每个平台单独一个密码又不太好记&#xff0c;这时候就…...

Python爬虫之Selenium的应用

【1】Selenium基础介绍 1.什么是selenium&#xff1f; &#xff08;1&#xff09;Selenium是一个用于Web应用程序测试的工具。 &#xff08;2&#xff09;Selenium 测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。 &#xff08;3&#xff09;支持通过各种driv…...

华为无线AC、AP模式与上线解析(Huawei Wireless AC, AP Mode and Online Analysis)

华为无线AC、AP模式与上线解析 为了实现fit 瘦AP的集中式管理&#xff0c;我们需要统一把局域网内的所有AP上线到AC&#xff0c;由AC做集中式管理部署。这里我们需要理解CAPWAP协议&#xff0c;该协议分为两种报文&#xff1a;1、管理报文 2、数据报文。管理报文实际在抓包过程…...

k8s中用filebeat文件如何收集不同service的日志

以下是一个详细的从在 Kubernetes 集群中部署 Filebeat&#xff0c;到实现按web-oper、web-api微服务分离日志并存储到不同索引的完整方案&#xff1a; 理解需求&#xff1a;按服务分离日志索引 在 Kubernetes 集群中&#xff0c;有web-oper和web-api两种微服务&#xff0c;希…...

linux常用命令(cd、ls)

命令cd cd 是 Linux 系统中用于改变当前工作目录的命令。它是 "change directory" 的缩写。以下是关于 cd 命令的详细解释和使用方法&#xff1a; 基本用法 cd [目录路径]&#xff1a;将当前工作目录切换到指定的目录路径。 常用选项与示例 ‌1、切换到指定目录 …...

Java实现一个带头节点的单链表

什么是单链表&#xff1f; 单链表是一种基础的数据结构&#xff0c;其中每个节点都包含两部分&#xff1a; 数据域&#xff1a;存储节点数据。指针域&#xff1a;存储指向下一个节点的引用。 为什么使用头节点&#xff1f; 头节点的存在简化了操作逻辑&#xff1a; 统一操作…...

代码随想录-算法训练营-番外(图论01:图论理论基础,所有可到达的路径)

day01 图论part01 今日任务:图论理论基础/所有可到达的路径 代码随想录图论视频部分还没更新 https://programmercarl.com/kamacoder/图论理论基础.html#图的基本概念 day01 所有可达路径 邻接矩阵 import java.util.Scanner;import java.util.List;import java.util.ArrayL…...

js:我要在template中v-for循环遍历这个centrerTopdata,我希望自循环前面三个就可以了怎么写

问&#xff1a; 我按在要在template中v-for循环遍历这个centrerTopdata&#xff0c;我希望自循环前面三个就可以了怎么写&#xff1f; 回答&#xff1a; 问&#xff1a; <div v-for"(item, index) in centrerTopdata.slice(0, 3)" :key"index"> d…...

软考高级架构 - 10.5 软件架构演化评估方法

10.4 软件架构演化原则总结 本节提出了18条架构演化的核心原则&#xff0c;并为每条原则设计了简单而有效的度量方法&#xff0c;用于从系统整体层面提供实用信息&#xff0c;帮助评估和指导架构演化。 演化成本控制&#xff1a;成本小于重新开发成本&#xff0c;经济高效。进…...

40 list类 模拟实现

目录 一、list类简介 &#xff08;一&#xff09;概念 &#xff08;二&#xff09;list与string和vector的区别 二、list类使用 &#xff08;一&#xff09;构造函数 &#xff08;二&#xff09;迭代器 &#xff08;三&#xff09;list capacity &#xff08;四&#x…...

【原生js案例】如何实现一个穿透字体颜色的导航

普通的导航大家都会做&#xff0c;像这种穿透字体的导航应该很少见吧。高亮不是通过单独设置一个active类来设置字体高亮颜色&#xff0c;鼠标滑过导航项&#xff0c;字体可以部分是黑色&#xff0c;不分是白色&#xff0c;这种效果的实现 感兴趣的可以关注下我的系列课程【we…...

(RHCE)工程师学习考证

如果你像我一样&#xff0c;非科班出身且对 IT 行业知识储备几乎为零&#xff0c;却立志考取 RHCE 红帽工程师证书&#xff0c;那么以下这份学习教程或许能助你一臂之力。 首先&#xff0c;要对 RHCE 有个基本的认识。RHCE 是红帽企业级 Linux 认证&#xff0c;它侧重于实际操作…...

Nuxt3 axios封装 使用axios接口请求

一、先安装axios npm install add axios 封装请求request.ts文件 import axios from axios import { ElMessage, Message } from "element-plus" import {getToken} from ./token.js const service axios.create({baseURL:/api,//本地使用 }) service.interceptor…...

东方通TongWeb替换Tomcat的踩坑记录

一、背景 由于信创需要&#xff0c;原来项目的用到的一些中间件、软件都要逐步替换为国产品牌&#xff0c;决定先从web容器入手&#xff0c;将Tomcat替换掉。在网上搜了一些资料&#xff0c;结合项目当前情况&#xff0c;考虑在金蝶AAS和东方通TongWeb里面选择&#xff0c;后又…...

引用类型集合的深拷贝,无需手动写循环:Apache Commons Lang (SerializationUtils)

在java中&#xff0c;我们如果想要对引用类型的集合进行深拷贝。有一种方式&#xff0c;就是调用SerializationUtils Apache Commons Lang (SerializationUtils) Apache Commons Lang 提供了 SerializationUtils 类&#xff0c;可以利用 Java 的序列化机制来进行集合及其元素…...

高阶函数:JavaScript 编程中的魔法棒

在JavaScript的世界里&#xff0c;高阶函数是一种强大的工具&#xff0c;它允许我们将函数作为参数传递或将函数作为返回值。这种特性使得JavaScript代码更加灵活和强大。本文将深入探讨高阶函数的定义、用法以及在实际项目中的最佳实践&#xff0c;帮助大家更好地理解和应用这…...

HuggingGPT Solving AI Tasks with ChatGPT and its Friends in Hugging Face 论文解读

1. 引言 近年来&#xff0c;大型语言模型&#xff08;LLMs&#xff09;如ChatGPT在自然语言处理领域取得了惊人的进展&#xff0c;展现出强大的语言理解、生成和推理能力。然而&#xff0c;当前的LLMs仍然存在一些局限性&#xff0c;例如无法处理复杂信息&#xff08;如视觉和…...

使用 ADB (Android Debug Bridge) 工具来截取 Android 设备的屏幕截图

可以使用 ADB (Android Debug Bridge) 工具来截取 Android 设备的屏幕截图。以下是具体的操作步骤&#xff1a; 1. 连接设备 确保 Android 设备通过 USB 或网络连接到电脑&#xff0c;并运行以下命令检查连接状态&#xff1a; adb devices2. 截取屏幕截图 运行以下命令将设…...

router.resolve 方法

router.resolve 方法在前端路由库&#xff08;如 Vue Router&#xff09;中用于解析路由信息。它接受一个路由对象或路径&#xff0c;并返回一个包含解析后的路由信息的对象。这个对象通常包含 href、route、location 等属性。 用法总结 方法签名&#xff1a; router.resolve(…...

linux 安装 Jenkins 教程

前言 Jenkins 是一个开源的自动化服务器&#xff0c;广泛用于持续集成&#xff08;Continuous Integration&#xff0c;CI&#xff09;和持续交付&#xff08;Continuous Delivery&#xff0c;CD&#xff09;领域。它帮助开发者自动化软件构建、测试、部署等过程&#xff0c;从…...

Vue3 使用 render 渲染函数透传组件

背景 我们透传组件的时候可能会用 slot&#xff0c;本文讲述的是另一种方式 props render 函数方式。当然具体的看业务场景。 实现 父组件 <AComp customComponent: () > {return h(UserAuthorization) }> </AComp>子孙组件 // 定义 render 组件&#xff…...

MongoDB 分片

MongoDB 分片 MongoDB 分片是一种数据库架构&#xff0c;用于将大量数据分布存储在多个服务器上。这种设计允许数据库扩展&#xff0c;以处理大量数据和高吞吐量操作。分片通过将数据集分割成小块&#xff0c;称为分片&#xff0c;并将这些分片分布到多个服务器上来工作。每个…...

Chrome webdriver下载-避坑

WebDriver以原生的方式驱动浏览器&#xff0c;不需要调整环境变量。 一、window版 1.chrome和chromedriver下载地址&#xff1a; Chrome for Testing availability 我下载的是如下两个安装包&#xff0c;解压即可。 2.导包 pip install selenium然后用python代码引用即可…...

【MFC】如何读取rtf文件并进行展示

tf是微软的一个带格式的文件&#xff0c;比word简单&#xff0c;我们可以用写字板等程序打开编辑。下面以具体实例讲解如何在自己程序中展示rtf文件。 首先使用VS2022创建一个MFC的工程。 VIEW类需要选择richview类&#xff0c;用于展示&#xff0c;如下图&#xff1a; 运行效…...

基于wifipumpkin3的AP伪造

一、软硬件需求 利用wifipumpkin-3进行AP伪造需要kali系统&#xff0c;还需要一张支持在kali的环境下能够支持AP伪造的无线网卡&#xff0c;如果是针对特定的无线网的话&#xff0c;再来第二张网卡的话更好用来转发流量更好。对于wifipumpkin-3的安装使用可以分为两种方式&…...

docker xxxx is using its referenced image ea06665f255d

Error response from daemon: conflict: unable to remove repository reference “registrxxxxxx” (must force) - container 9642fd1fd4a0 is using its referenced image ea06665f255d 这个错误表明你尝试删除的镜像正在被一个容器使用&#xff0c;因此无法删除。要解决这…...

svm支持向量机

支持向量机&#xff08;SVM&#xff09; 1. SVM 的核心思想 支持向量机&#xff08;Support Vector Machine, SVM&#xff09;是一种监督学习算法&#xff0c;用于分类和回归任务。其目标是找到一个超平面&#xff0c;将数据点分为不同类别&#xff0c;同时 最大化分类间隔&a…...

MySQL数据类型

MySQL数据库中的常用数据类型 数值型&#xff1a; ①整型 ②小数类型 定点型 浮点型 字符型&#xff1a; ①短的文本:char varchar ②长的文本:text blob(二进制) 日期型 ①数值型 整数应该知道的知识点 ①设置无符号和有符号 create table t_int( t1 int; #②默认有符…...

【深度学习】热力图绘制

热力图&#xff08;Heatmap&#xff09;是一种数据可视化方法&#xff0c;通过颜色来表示数据矩阵中的数值大小&#xff0c;以便更直观地展示数据的分布和模式。热力图在许多领域中都有应用&#xff0c;尤其在统计分析、机器学习、数据挖掘等领域&#xff0c;能够帮助我们快速识…...

高效Python开发工具PyCharm v2024.3全新发布,进一步提升编码体验!

JetBrains PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 立即获取PyCharm v2024.3正式版 Python 针对dataclass_transfor…...

Ubuntu 安装 Samba Server

在 Mac 上如何能够与Ubuntu 服务器共享文件夹&#xff0c;需要在 Ubuntu 上安装 Samba 文件服务器。本文将介绍如何在 Ubuntu 上安装 Samba 服务器从而达到以下目的&#xff1a; Mac 与 Ubuntu 共享文件通过用户名密码访问 安装 Samba 服务 sudo apt install samba修改配置文…...

WPF 实现 鼠标点击 取消 TextBox 光标

WPF 实现 鼠标点击 取消 TextBox 光标 原始需求&#xff1a;TextBox 控件光标取消后运行特定功能函数 所遇问题&#xff1a;若无相关事件&#xff0c;则除了点击其他控件等方式外&#xff0c;无法准确取消光标 解决思路&#xff1a;通过捕获 TextBox 控件外鼠标点击或鼠标移…...

cron服务执行定时任务

参考链接 cron表达式在线解析&#xff1a;quartz/Cron/Crontab表达式在线生成工具-BeJSON.com 定时任务运行时报错解决方法 运行脚本报 权限不够问题&#xff1a; 可以在脚本文件夹下直接执行 如下指令运行RequestAPI.sh 脚本 ./RequestAPI.sh 如果出现权限不够问…...

Go 语言与时间拳击理论下的结对编程:开启高效研发编程之旅

一、引言 结对编程作为一种软件开发方法&#xff0c;在提高代码质量、增强团队协作等方面具有显著优势。而时间拳击理论为结对编程带来了新的思考角度。本文将以 Go 语言为中心&#xff0c;深入探讨时间拳击理论下的结对编程。 在当今软件开发领域&#xff0c;高效的开发方法和…...

【收藏】Cesium 限制相机倾斜角(pitch)滑动范围

1.效果 2.思路 在项目开发的时候&#xff0c;有一个需求是限制相机倾斜角&#xff0c;也就是鼠标中键调整视图俯角时&#xff0c;不能过大&#xff0c;一般 pitch 角度范围在 0 至 -90之间&#xff0c;-90刚好为正俯视。 在网上查阅了很多资料&#xff0c;发现并没有一个合适的…...

PostgreSQL的学习心得和知识总结(一百六十四)|深入理解PostgreSQL数据库之在 libpq 中支持负载平衡

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…...

TÜLU 3: Pushing Frontiers inOpen Language Model Post-Training

模型&#xff1a;https://huggingface.co/allenai 技术报告&#xff1a;https://allenai.org/papers/tulu-3-report.pdf 数据集&#xff1a;https://huggingface.co/collections/allenai/tulu-3-datasets-673b8df14442393f7213f372 GitHub&#xff1a;https://github.com/al…...

Pytest-Bdd-Playwright 系列教程(14):Docstring 参数

Pytest-Bdd-Playwright 系列教程&#xff08;14&#xff09;&#xff1a;Docstring 参数 前言一、什么是docstring?二、基本语法三、主要特点四、实际例子五、注意事项六、使用建议总结 前言 在自动化测试的过程中&#xff0c;我们经常需要处理复杂的测试数据或需要输入多行文…...

Docker部署WebRTC-Streamer

文章目录 WebRTC-Streamer概述Docker部署WebRTC-StreamerVue使用WebRTC-Streamer一些问题 WebRTC-Streamer概述 WebRTC-Streamer是一个基于WebRTC技术的流媒体传输工具&#xff0c;它可以通过Web浏览器实现实时音视频流的传输和播放。它提供了一种简单而强大的方式&#xff…...