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 这个文件夹下一份。

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

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

相关文章

C#速成(GID+图形编程)

常用类 类说明Brush填充图形形状,画刷GraphicsGDI绘图画面&#xff0c;无法继承Pen定义绘制的对象直线等&#xff08;颜色&#xff0c;粗细&#xff09;Font定义文本格式&#xff08;字体&#xff0c;字号&#xff09; 常用结构 结构说明Color颜色Point在平面中定义点Rectan…

【STM32 Modbus编程】-作为从设备读取保持-输入寄存器

作为从设备读取保持-输入寄存器 文章目录 作为从设备读取保持-输入寄存器1、硬件准备与连接1.1 RS485模块介绍1.2 硬件配置与接线1.3 软件准备1.4 STM32基础代码准备2、读取保持寄存器3、读取输入寄存器在本文中,我们将STM32单片作为ModBus的从设备,实现保持寄存器和输入寄存…

简单的多网卡选择指定网卡ip注册

简单的多网卡选择指定网卡ip注册 我们公司服务器上面有多个网卡&#xff0c;多网卡则本地ip有多个ip,我们启动服务的时候需要选定他特定的ip&#xff0c;我们服务需要特定的ip进行注册&#xff0c;才能进行正常的通讯功能&#xff0c;我们需要使用如下配置进行特定ip选择&…

泷羽sec-burp(6)暴力破解与验证码识别绕过(下,验证码识别绕过0) 学习笔记

声明&#xff01; 学习视频来自B站up主 **泷羽sec** 有兴趣的师傅可以关注一下&#xff0c;如涉及侵权马上删除文章&#xff0c;笔记只是方便各位师傅的学习和探讨&#xff0c;文章所提到的网站以及内容&#xff0c;只做学习交流&#xff0c;其他均与本人以及泷羽sec团队无关&a…

spark如何自定义函数

UDF&#xff1a;一对一的函数【User Defined Functions】 substr、split、concat、instr、length、from_unixtime UDAF&#xff1a;多对一的函数【User Defined Aggregation Functions】 聚合函数 count、sum、max、min、avg、collect_set/list UDTF&#xff1a;一对多的函…

Python高性能web框架-FastApi教程:(2)路径操作装饰器方法

路径操作装饰器方法 1. fastapi支持的各种请求方式 app.get() app.post() app.put() app.patch() app.delete() app.options() app.head() app.trace()2. 定义不同请求方式的路由 # 定义GET请求的路由 app.get(/get) def get_test():return {method: get方法} app.get(/get)…

Python知识分享第二十七天-贪心算法

贪心算法 什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 这么说有点抽象&#xff0c;来举一个例子&#xff1a; 例如&#xff0c;有一堆钞票&#xff0c;允许你拿走十张&#xff0c;如果想达到最大的金额&#xff0c;你要怎么拿&#xff1f;…

网络安全之信息收集

域名扫描工具 oneforall 特点&#xff1a;相对较慢&#xff0c;相对较全&#xff0c;误报率高 subDomainsBrute 2、服务器信息收集 pin 域名 网站归属信息ip138.com CDN 内容分发网络 绕过cdn访问真实ip方法&#xff1a; &#xff08;1&#xff09;超级ping 使用所在全…

NLP论文速读(ICML 2024)|面相对齐大语言模型的迁移和合并奖励模型方法

论文速读|Transforming and Combining Rewards for Aligning Large Language Models 论文信息&#xff1a; 简介&#xff1a; 本文探讨了如何使大型语言模型&#xff08;LLMs&#xff09;与人类偏好对齐。传统的对齐方法是先从偏好数据中学习一个奖励模型&#xff0c;然后使用这…

Docker 中使用 PHP 通过 Canal 同步 Mysql 数据到 ElasticSearch

一、Mysql 的安装和配置 1.使用 docker 安装 mysql&#xff0c;并且映射端口和 root 账号的密码 # 获取镜像 docker pull mysql:8.0.40-debian# 查看镜像是否下载成功 docker images# 运行msyql镜像 docker run -d -p 3388:3306 --name super-mysql -e MYSQL_ROOT_PASSWORD12…

搭建springmvc项目

什么是springmvc MVC它是一种设计理念。把程序按照指定的结构来划分: Model模型 View视图 Controller控制层 springmvc框架是spring框架的一个分支。它是按照mvc架构思想设计的一款框架。 springmvc的主要作用: 接收浏览器的请求数据&#xff0c;对数据进行处理&#xff0c;…

学习笔记069——Java集合框架

文章目录 集合1、List 接口2、Set 接口3、Map3.1、Map 常用实现类 集合 需要创建多个对象&#xff0c;但是数量和类型不确定。 集合是 Java 提供的一种类型&#xff0c;功能和数组类似&#xff0c;但是长度和数据类型都是动态。 集合框架&#xff08;包括很多类和接口&#…

【Linux】基础IO(内存文件)

目录 一、预备知识二、复习常见C语言的文件接口2.1 文件接口的说明2.1.1 fopen函数2.1.2 fputs函数2.1.3 fclose函数 2.2 文件接口的使用 三、认识操作文件的系统调用3.1 系统调用的说明3.1.1 open函数3.1.1.1 Linux中常用的传参方法 3.1.2 write函数3.1.3 close函数 3.2 系统调…

基础开发工具-编辑器vim

vim操作键盘图 下图是比较基础的vim操作键盘图 &#xff08;IDE例子&#xff09; vi/vim的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是vim是vi的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;⽽且还有⼀些新的特性在⾥⾯。例如语法加亮&a…

RT-DETR融合[CVPR2024]Starnet中的star block取模块

RT-DETR使用教程&#xff1a; RT-DETR使用教程 RT-DETR改进汇总贴&#xff1a;RT-DETR更新汇总贴 《Rewrite the Stars》 一、 模块介绍 论文链接&#xff1a;https://arxiv.org/abs/2403.19967 代码链接&#xff1a;https://github.com/ma-xu/Rewrite-the-Stars/tree/main 论…

使用webrtc-streamer查看实时监控

摄像头配置&#xff08;海康摄像头为例&#xff09; 摄像头视频编码应改成H264格式 webrtc-streamer下载 webrtc-streamer下载地址 下载后解压出来双击运行&#xff0c;端口默认8000 VUE2项目引入文件 在项目静态文件“public”中需引入两个js文件“webrtcstreamer.js”与“…

04面向对象篇(D4_OOT(D1_OOT - 面向对象测试))

目录 一、 面向对象影响测试 1. 封装性影响测试 2. 继承性影响测试 3. 多态性影响测试 二、 面向对象测试模型 三、 面向对象分析测试 1. 对象测试 2. 结构测试 3. 主题测试 4. 属性和实例关联测试 5. 服务和消息关联测试 四、面向对象设计测试 1. 对认定类测试 …

每天40分玩转Django:简介和环境搭建

Django简介和环境搭建 一、课程概述 学习项目具体内容预计用时Django概念Django框架介绍、MVC/MTV模式、Django特点60分钟环境搭建Python安装、pip配置、Django安装、IDE选择45分钟创建项目项目结构、基本配置、运行测试75分钟实战练习创建个人博客项目框架60分钟 二、Djang…

【CTF-Web】文件上传漏洞学习笔记(ctfshow题目)

文件上传 文章目录 文件上传 What is Upload-File&#xff1f;Upload-File In CTF Web151 考点&#xff1a;前端校验解题&#xff1a; Web152 考点&#xff1a;后端校验要严密解题&#xff1a; Web153 考点&#xff1a;后端校验 配置文件介绍解题&#xff1a; Web154 考点&am…

uniappp配置导航栏自定义按钮(解决首次加载图标失败问题)

1.引入iconfont的图标&#xff0c;只保留这两个文件 2.App.vue引入到全局中 import "./static/fonts/iconfont.css"3.pages.json中配置text为图标对应的unicode {"path": "pages/invite/invite","style": {"h5": {"…