大数据分析与应用实验(黑龙江大学)

实验一 Hadoop伪分布式实验环境搭建与WordCount程序

一、实验目的

1、学习搭建Hadoop伪分布式实验环境

2、在伪分布式实验环境下运行WordCount程序

二、实验内容

1、搭建Hadoop伪分布式实验环境,并安装Eclipse。

2、在Eclipse环境下,编写并执行WordCount程序。

三、实验步骤

1.创建hadoop用户

sudo useradd -m hadoop -s /bin/bash

sudo passwd hadoop

sudo adduser hadoop sudo

2.更新ubuntu软件包

sudo apt-get update

3.安装vim

sudo apt install vim

安装软件时若需要确认,在提示处输入 y 即可

vim的常用模式有分为命令模式,插入模式,可视模式,正常模式。本教程中,只需要用到正常模式和插入模式。二者间的切换即可以帮助你完成本指南的学习。

(1)正常模式

正常模式主要用来浏览文本内容。一开始打开vim都是正常模式。在任何模式下按下Esc键就可以返回正常模式

(2)插入编辑模式

插入编辑模式则用来向文本中添加内容的。在正常模式下,输入i键即可进入插入编辑模式

(3)退出vim

如果有利用vim修改任何的文本,一定要记得保存。Esc键退回到正常模式中,然后输入:wq即可保存文本并退出vim

4.安装SSH、配置SSH无密码登陆

sudo apt-get install openssh-server

ssh localhost

首先退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:

exit                 # 退出刚才的 ssh localhost

cd ~/.ssh/           # 若没有该目录,请先执行一次ssh localhost     

ssh-keygen -t rsa    # 会有提示,都按回车就可以

cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

5.安装Java环境

cd /usr/lib

sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件

cd ~ #进入hadoop用户的主目录

cd Downloads  #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u371-linux-x64.tar.gz上传到该目录下

sudo tar -zxvf ./jdk-8u371-linux-x64.tar.gz -C /usr/lib/jvm  #把JDK文件解压到/usr/lib/jvm目录下

JDK文件解压缩以后,可以执行如下命令到/usr/lib/jvm目录查看一下:

cd /usr/lib/jvm

ls

可以看到,在/usr/lib/jvm目录下有个jdk1.8.0_371目录。

下面继续执行如下命令,设置环境变量:

cd ~

vim ~/.bashrc

打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_371

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

source ~/.bashrc

查看是否安装成功

java -version

6.安装 Hadoop3.3.5

将 Hadoop 安装至 /usr/local/ 中:

sudo tar -zxvf ~/下载/hadoop-3.3.5.tar.gz -C /usr/local  

 # 解压到/usr/local中

cd /usr/local/

sudo mv ./hadoop-3.3.5/ ./hadoop   # 将文件夹名改为hadoop

sudo chown -R hadoop ./hadoop      # 修改文件权限

Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

cd /usr/local/hadoop

./bin/hadoop version

7.Hadoop伪分布式配置

修改配置文件 core-site.xml (通过 gedit 编辑会比较方便: gedit ./etc/hadoop/core-site.xml)

<configuration>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>file:/usr/local/hadoop/tmp</value>

        <description>Abase for other temporary directories.</description>

    </property>

    <property>

        <name>fs.defaultFS</name>

        <value>hdfs://localhost:9000</value>

    </property>

</configuration>

修改配置文件 hdfs-site.xml:

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:/usr/local/hadoop/tmp/dfs/name</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:/usr/local/hadoop/tmp/dfs/data</value>

    </property>

</configuration>

配置完成后,执行 NameNode 的格式化:

cd /usr/local/hadoop

./bin/hdfs namenode -format

接着开启 NameNode 和 DataNode 守护进程:

cd /usr/local/hadoop

./sbin/start-dfs.sh

四、实验结果

cd /usr/local/hadoop

./sbin/start-dfs.sh

jps

访问web页面

localhost:9870

详细可参考

厦门大学林子雨教授安装教程

https://dblab.xmu.edu.cn/blog/2441/

词频统计

https://dblab.xmu.edu.cn/blog/4289/

实验二 Hadoop二次排序程序

一、实验目的

1、掌握大数据排序程序的原理

2、掌握大数据二次排序程序的设计方法

二、实验内容

1、设计一个关于温度的二次排序程序。

2、设计一个关于时间序列数据的二次排序程序(选作)。

三、实验步骤

1、启动HDFS文件系统,并将输入数据上传到HDFS文件系统中。

2、利用eclipse建立一个Hadoop工程,编写程序代码,设计一个关于温度的二次排序程序。

3、实验参考数据

输入数据:

2000,12,04,10

2000,11,01,20

2000,12,02,-20

2000,11,07,30

2000,11,24,-40

2012,12,21,30

2012,12,22,-20

2012,12,23,60

2012,12,24,70

2012,12,25,10

2013,01,23,90

2013,01,24,70

2013,01,20,-10

输出数据

201301  90, 70, -10

201212  70, 60, 30, 10, -20

200012  10, -20

      200011  30, 20, -40

四、实验代码

DateTemperatureGroupingComparator类
package twosort;import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.io.WritableComparator;//分组比较器
// 根据DateTemperaturePair对象的YearMonth字段进行比较,
// 确保具有相同YearMonth的键值对被分到同一个Reducer进行处理,
// 以便在Reducer阶段对具有相同日期的数据进行分组聚合
public class DateTemperatureGroupingComparator extends WritableComparator {public DateTemperatureGroupingComparator() {super(DateTemperaturePair.class, true);}// 重写的compare方法中,首先将参数wc1和wc2强制转换为DateTemperaturePair对象,// 然后通过比较这两个对象的YearMonth字段来确定它们的顺序。// 最终返回比较结果,用于确定键值对在Reducer阶段的分组。@Overridepublic int compare(WritableComparable wc1, WritableComparable wc2) {DateTemperaturePair pair = (DateTemperaturePair) wc1;DateTemperaturePair pair2 = (DateTemperaturePair) wc2;return pair.getYearMonth().compareTo(pair2.getYearMonth());}
}/*分区器会根据映射器的输出键来决定哪个映射器的输出发送到哪个规约器。为此我们需要定义两个插件类首先需要一个定制分区器控制哪个规约器处理哪些键,另外还要定义一个定制比较器对规约器值排序。这个定制比较器对规约器值排序,它会控制哪些键要分组到一个Reducer.reduce()函数调用*/
DateTemperaturePair类
package twosort;import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.Writable;
import org.apache.hadoop.io.WritableComparable;import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;//DateTemperaturePair是自定义的数据类型,用于存储日期和温度信息。
//在Map阶段,将输入数据解析为DateTemperaturePair对象
//在Reduce阶段,作为中间结果的键值对进行传递//组合键数据结构
public class DateTemperaturePair implements Writable, WritableComparable<DateTemperaturePair> {//年月private final Text yearMonth = new Text();//日private final Text day = new Text();//温度private final IntWritable temperature = new IntWritable();public DateTemperaturePair() {}public DateTemperaturePair(String yearMonth, String day, int temperature) {this.yearMonth.set(yearMonth);this.day.set(day);this.temperature.set(temperature);}// 用于从输入流中读取数据并返回DateTemperaturePair对象public static DateTemperaturePair read(DataInput in) throws IOException {DateTemperaturePair pair = new DateTemperaturePair();pair.readFields(in);return pair;}// 将对象的数据写入输出流@Overridepublic void write(DataOutput out) throws IOException {yearMonth.write(out);day.write(out);temperature.write(out);}// 从输入流中读取数据并设置对象的属性@Overridepublic void readFields(DataInput in) throws IOException {yearMonth.readFields(in);day.readFields(in);temperature.readFields(in);}// 比较两个DateTemperaturePair对象的年月和温度信息,用于排序// 根据年月和温度进行比较,实现二次排序@Overridepublic int compareTo(DateTemperaturePair pair) {int compareValue = this.yearMonth.compareTo(pair.getYearMonth());if (compareValue == 0) {//如果年月相等,再比较温度compareValue = temperature.compareTo(pair.getTemperature());}return -1 * compareValue;}public Text getYearMonthDay() {return new Text(yearMonth.toString() + day.toString());}public Text getYearMonth() {return yearMonth;}public Text getDay() {return day;}public IntWritable getTemperature() {return temperature;}public void setYearMonth(String yearMonthAsString) {yearMonth.set(yearMonthAsString);}public void setDay(String dayAsString) {day.set(dayAsString);}public void setTemperature(int temp) {temperature.set(temp);}@Overridepublic boolean equals(Object o) {if (this == o) {return true;}if (o == null || getClass() != o.getClass()) {return false;}DateTemperaturePair that = (DateTemperaturePair) o;if (temperature != null ? !temperature.equals(that.temperature) : that.temperature != null) {return false;}if (yearMonth != null ? !yearMonth.equals(that.yearMonth) : that.yearMonth != null) {return false;}return true;}@Overridepublic int hashCode() {int result = yearMonth != null ? yearMonth.hashCode() : 0;result = 31 * result + (temperature != null ? temperature.hashCode() : 0);return result;}@Overridepublic String toString() {StringBuilder builder = new StringBuilder();builder.append("DateTemperaturePair{yearMonth=");builder.append(yearMonth);builder.append(", day=");builder.append(day);builder.append(", temperature=");builder.append(temperature);builder.append("}");return builder.toString();}
}
DateTemperaturePartitioner类
package twosort;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Partitioner;// 分区器类
// 根据DateTemperaturePair的YearMonth字段的哈希值来选择分区,
// 以确保相同YearMonth的键值对被分配到相同的分区。
// 这有助于在Reducer阶段对相同日期的数据进行聚合处理。
public class DateTemperaturePartitioner extends Partitioner<DateTemperaturePair, Text> {//首先,通过pair.getYearMonth().hashCode()获取YearMonth的哈希值,然后取绝对值以确保分区数是非负的。//接着,通过取哈希值与分区数取模的方式,将键值对映射到具体的分区。//最后,返回计算得到的分区号作为结果。@Overridepublic int getPartition(DateTemperaturePair pair, Text text, int numberOfPartitions) {return Math.abs(pair.getYearMonth().hashCode() % numberOfPartitions);}
}/** 定制分区器* 分区器会根据映射器的输出键来决定哪个映射器的输出发送到哪个规约器。为此我们需要定义两个插件类* 首先需要一个定制分区器控制哪个规约器处理哪些键,另外还要定义一个定制比较器对规约器值排序。* 这个定制分区器可以确保具有相同键(自然键,而不是包含温度值的组合键)的所有数据都发送给同一个规约器。* 定制比较器会完成排序,保证一旦数据到达规约器,就会按自然键对数据分组。*/
SecondarySortDriver类
package twosort;import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.log4j.Logger;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.Configuration;//SecondarySortDriver是驱动程序,用于配置和运行MapReduce任务。
//在Driver中设置Mapper、Reducer、Partitioner、GroupingComparator等组件。
//配置作业的输入输出路径,以及其他相关参数。
//最终启动整个MapReduce作业的运行。
public class SecondarySortDriver extends Configured implements Tool {private static final String INPATH = "input/twosort.txt";// 输入文件路径private static final String OUTPATH = "output/sample_output";// 输出文件路径private static Logger theLogger = Logger.getLogger(SecondarySortDriver.class);@SuppressWarnings("deprecation")@Overridepublic int run(String[] args) throws Exception {Configuration conf = getConf();Job job = new Job(conf);job.setJarByClass(SecondarySortDriver.class);job.setJobName("SecondarySortDriver");FileInputFormat.setInputPaths(job, new Path(args[0]));FileOutputFormat.setOutputPath(job, new Path(args[1]));job.setOutputKeyClass(DateTemperaturePair.class);job.setOutputValueClass(Text.class);job.setMapperClass(SecondarySortMapper.class);job.setReducerClass(SecondarySortReducer.class);job.setPartitionerClass(DateTemperaturePartitioner.class);job.setGroupingComparatorClass(DateTemperatureGroupingComparator.class);FileOutputFormat.setOutputPath(job, new Path(args[1]));// 为map-reduce任务设置OutputFormat实现类// 设置输出路径FileSystem fs = FileSystem.get(conf);Path outPath = new Path(OUTPATH);if (fs.exists(outPath)) {fs.delete(outPath, true);}boolean status = job.waitForCompletion(true);theLogger.info("run(): status=" + status);return status ? 0 : 1;}public static void main(String[] args) throws Exception {args = new String[2];args[0] = INPATH;args[1] = OUTPATH;// Make sure there are exactly 2 parametersif (args.length != 2) {theLogger.warn("SecondarySortDriver <input-dir> <output-dir>");throw new IllegalArgumentException("SecondarySortDriver <input-dir> <output-dir>");}int returnStatus = submitJob(args);theLogger.info("returnStatus=" + returnStatus);System.exit(returnStatus);}public static int submitJob(String[] args) throws Exception {int returnStatus = ToolRunner.run(new SecondarySortDriver(), args);return returnStatus;}
}
SecondarySortMapper类
package twosort;import java.io.IOException;import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;// 该Mapper类将输入的数据解析成年月日和温度信息,
// 然后创建一个DateTemperaturePair对象来存储这些信息,并将温度信息存储在Text对象中。
// 最后,将DateTemperaturePair对象作为键,温度信息作为值输出到Reducer阶段进行进一步处理。
public class SecondarySortMapper extends Mapper<LongWritable, Text, DateTemperaturePair, Text> {private final Text theTemperature = new Text();private final DateTemperaturePair pair = new DateTemperaturePair();// 重写了Mapper类的map方法,实现了具体的映射逻辑。// 在该方法中,首先将输入的Text类型的数据转换为字符串,并进行处理。// 然后根据逗号分割字符串得到年、月、日和温度信息,分别设置到pair对象中。// 接着将温度信息设置到theTemperature对象中,并通过context.write方法输出键值对。@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {String line = value.toString().trim();String[] tokens = line.split(",");// YYYY = tokens[0]// MM = tokens[1]// DD = tokens[2]// temperature = tokens[3]String yearMonth = tokens[0] + tokens[1];String day = tokens[2];int temperature = Integer.parseInt(tokens[3]);pair.setYearMonth(yearMonth);pair.setDay(day);pair.setTemperature(temperature);theTemperature.set(tokens[3]);context.write(pair, theTemperature);}
}
SecondarySortReducer类
package twosort;import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;import java.io.IOException;//具有相同年月的温度值连接成一个字符串,并以年月作为键,连接后的字符串作为值输出
public class SecondarySortReducer extends Reducer<DateTemperaturePair, Text, Text, Text> {@Overrideprotected void reduce(DateTemperaturePair key, Iterable<Text> values, Context context)throws IOException, InterruptedException {StringBuilder builder = new StringBuilder();for (Text value : values) {builder.append(value.toString());builder.append(",");}context.write(key.getYearMonth(), new Text(builder.toString()));}
}/*
规约器
对于已经按年-月分区,分区内按温度排好序的键和值集合,
进行规约,即按顺序写成一行*/

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>TwoSortDemo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies></project>

包结构

五、操作步骤

1.首先启动Hadoop

2.查看自己/user/hadoop/目录下有没有input、output文件夹,有的话删除。

 3.重新创建input文件夹

4.查看input文件夹是否创建出来

5.编辑测试用例的文件twosort.txt

twosort.txt内容为:

2000,12,04,10

2000,11,01,20

2000,12,02,-20

2000,11,07,30

2000,11,24,-40

2012,12,21,30

2012,12,22,-20

2012,12,23,60

2012,12,24,70

2012,12,25,10

2013,01,23,90

2013,01,24,70

2013,01,20,-10

6.将文件上传到input文件夹

 7.利用idea将代码打成jar包,将jar包放在/usr/local/hadoop/myapp目录下

8.运行jar包

9.查看结果

实验三 Hadoop TopN程序

一、实验目的

1、掌握大数据多个MapReduce任务程序的设计方法

2、掌握大数据TopN程序的设计方法

二、实验内容

1、设计一个关于TopN的程序。

三、实验步骤

1、启动HDFS文件系统,并将输入数据上传到HDFS文件系统中。

2、利用eclipse建立一个Hadoop工程,编写程序代码,设计一个关于TopN的程序。

3、实验参考数据

输入数据:

A,1

B,24

C,33

D,24

E,13

G,25

Z,100

输出数据:

100 Z

73 A

37 C

29 G

27 B

四、实验代码

package topn;import java.io.IOException;
import java.util.TreeMap;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;public class TopN {public static class TopNMapper extends Mapper<Object, Text, IntWritable, Text> {private TreeMap<Integer, String> topNMap = new TreeMap<>();public void map(Object key, Text value, Context context) throws IOException, InterruptedException {String[] tokens = value.toString().split(",");String word = tokens[0];int count = Integer.parseInt(tokens[1]);topNMap.put(count, word);}public void cleanup(Context context) throws IOException, InterruptedException {for (Integer key : topNMap.descendingKeySet()) {context.write(new IntWritable(key), new Text(topNMap.get(key)));}}}public static class TopNReducer extends Reducer<IntWritable, Text, IntWritable, Text> {private TreeMap<Integer, String> topNMap = new TreeMap<>();public void reduce(IntWritable key, Iterable<Text> values, Context context) throws IOException, InterruptedException {String word = "";int count = key.get();for (Text value : values) {word = value.toString();}topNMap.put(count, word);if (topNMap.size() > 5) {topNMap.remove(topNMap.firstKey());}}public void cleanup(Context context) throws IOException, InterruptedException {for (Integer key : topNMap.descendingKeySet()) {context.write(new IntWritable(key), new Text(topNMap.get(key)));}}}public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job job = Job.getInstance(conf, "TopN");job.setJarByClass(TopN.class);job.setMapperClass(TopNMapper.class);job.setReducerClass(TopNReducer.class);job.setMapOutputKeyClass(IntWritable.class);job.setMapOutputValueClass(Text.class);job.setOutputKeyClass(IntWritable.class);job.setOutputValueClass(Text.class);FileInputFormat.addInputPath(job, new Path("input/topn.txt"));FileOutputFormat.setOutputPath(job, new Path("output"));System.exit(job.waitForCompletion(true) ? 0 : 1);}
}

pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>TopN</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>3.1.3</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.30</version></dependency></dependencies>
</project>

五、操作步骤

1.首先启动Hadoop

2.查看自己/user/hadoop/目录下有没有input、output文件夹,有的话删除。

3.重新创建input文件夹

4.查看input文件夹是否创建出来

5.编辑测试用例的文件topn.txt

topn.txt内容为:

A,1

B,24

C,33

D,24

E,13

G,25

Z,100

6.将文件上传到input文件夹

7.利用idea将代码打成jar包,将jar包放在/usr/local/hadoop/myapp目录下

8.运行jar包

9.查看结果

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

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

相关文章

MongoDB的安装(Linux环境)

登录到Linux服务器执行 lsb_release -a &#xff0c;即可得知服务器的版本信息为&#xff1a;CentOS 7。 # CentOS安装lsb_release包 [rootlinux100 ~]# sudo yum install redhat-lsb# 查看Linux版本 [rootlinux100 ~]# lsb_release -a LSB Version: :core-4.1-amd64:core-…

网络服务SSH-远程访问及控制

一.SSH远程管理 1.SSH介绍 SSH&#xff08;Secure Shell&#xff09;是一种安全通道协议&#xff0c;最早是由芬兰的一家公司开发出来&#xff0c;并且在IETF &#xff08;Internet Engineering Task Force&#xff09;的网络草案基础上制定而成的标准协议。主要用来实现字符…

IP地址的定位精度及其影响因素

IP地址作为互联网通信的基础&#xff0c;其定位精度对于许多应用至关重要&#xff0c;如网络安全、市场营销和用户定位等。然而&#xff0c;IP地址的定位精度受到多种因素的影响&#xff0c;本文将探讨这些因素以及它们对IP地址定位精度的影响。 IP地址查询&#xff1a;IP66_i…

windows ubuntu sed,awk,grep篇,8,Awk 语法和基础命令

目录 51.Awk 命令语法 52.Awk 程序结构(BEGIN,body,END)区域 53.打印命令 54.模式匹配 Awk 是一个维护和处理文本数据文件的强大语言。在文本数据有一定的格式&#xff0c;即每行数据包 含多个以分界符分隔的字段时&#xff0c;显得尤其有用。即便是输入文件没有一定的格式&a…

sCrypt全新上线RUNES功能

sCrypt智能合约平台全新上线一键etch/mint RUNES功能&#xff01; 请访问 https://runes.scrypt.io/ 或点击阅读原文体验&#xff01; 关于sCrypt sCrypt是BSV区块链上的一种智能合约高级语言。比特币使用基于堆栈的Script语言来支持智能合约&#xff0c;但是用原生Script编…

微信小程序实时日志使用,setFilterMsg用法

实时日志 背景 为帮助小程序开发者快捷地排查小程序漏洞、定位问题&#xff0c;我们推出了实时日志功能。开发者可通过提供的接口打印日志&#xff0c;日志汇聚并实时上报到小程序后台。开发者可从We分析“性能质量->实时日志->小程序日志”进入小程序端日志查询页面&am…

《异常检测——从经典算法到深度学习》27 可执行且可解释的在线服务系统中重复故障定位方法

《异常检测——从经典算法到深度学习》 0 概论1 基于隔离森林的异常检测算法 2 基于LOF的异常检测算法3 基于One-Class SVM的异常检测算法4 基于高斯概率密度异常检测算法5 Opprentice——异常检测经典算法最终篇6 基于重构概率的 VAE 异常检测7 基于条件VAE异常检测8 Donut: …

AI 工具合集

以下工具来源于互联网&#xff0c;可能会失效&#xff0c;请参考使用 网红工具 名称链接说明GPT-4https://chat.openai.com/ 需要梯子&#xff0c;需要付费。功能最强大的聊天机 器人。 文心一言https://yiyan.baidu.com/welcome 国内版 GPT&#xff0c;需要申请账号。回答问…

ChromaDB教程

使用 Chroma DB&#xff0c;管理文本文档、将文本嵌入以及进行相似度搜索。 随着大型语言模型 &#xff08;LLM&#xff09; 及其应用的兴起&#xff0c;我们看到向量数据库越来越受欢迎。这是因为使用 LLM 需要一种与传统机器学习模型不同的方法。 LLM 的核心支持技术之一是…

IDEA使用技巧(常用设置、快捷键等)

IDEA使用技巧 一、IDEA常用基本设置设置代码背景颜色/主题/字体Ctrl鼠标滚轮缩放字体大小设置字符编码左右两侧的Project&#xff0c;Structure&#xff0c;Maven等按钮消失新增类似sout,psvm的模版切换某个模块编译的JDK版本 二、常用快捷键CtrlAltT包裹代码Alt回车联想补全Ct…

How to solve matplotlib Chinese garbled characters in Ubuntu 22.04

conda create -n huizhou python3.8conda activate huizhouconda install numpy matplotlibpip install mplfontsmplfonts init# 导入必要的库 import numpy as np import matplotlib.pyplot as plt# 创建角度数组&#xff0c;从0到2π x np.linspace(0, 2 * np.pi, 100)# 计算…

七、OSPF特殊区域及其特性

目录 OSPF区域分类 hello报文中option字段 1.末节区域&#xff08;Stub区域&#xff09; 2.完全末节区域&#xff08;Toally Stub区域&#xff09; 3.七类LSA 4.非完全末节区域&#xff08;NSSA区域&#xff09; 5.完全非完全末节区域&#xff08;Toally NSSA区域&#…

Windows Server配置网卡绑定:NIC组合

正文共&#xff1a;1024 字 12 图&#xff0c;预估阅读时间&#xff1a;1 分钟 在网络设备上&#xff0c;为了提高可靠性&#xff0c;一般会配置链路聚合&#xff08;Link Aggregation&#xff09;&#xff08;网络之路28&#xff1a;二层链路聚合&#xff09;&#xff0c;同样…

# 从浅入深 学习 SpringCloud 微服务架构(四)Ribbon

从浅入深 学习 SpringCloud 微服务架构&#xff08;四&#xff09;Ribbon 段子手168 一、ribbon 概述以及基于 ribbon 的远程调用。 1、ribbon 概述&#xff1a; Ribbon 是 Netflixfa 发布的一个负载均衡器,有助于控制 HTTP 和 TCP客户端行为。 在 SpringCloud 中 Eureka …

UE Snap03 启动参数设置

UE Snap03 启动参数设置 UE打包后传入自定义参数及解析。 void UGameInstance::StartGameInstance() {Super::StartGameInstance();UE_LOG(LogTemp, Warning, TEXT("--StartGameInstance--"));FString param;FParse::Value(FCommandLine::Get(), TEXT("-UserN…

【Ant-Desgin 头像上传框】限制数量为1张图片,base64,其他需求可以改我组件中的代码

Ant-Desgin 头像上传框 样式图参数主要代码UpLoad 组件父组件 样式图 图片数量限制为1&#xff0c;当选择了图片后&#xff0c;需要切换图像时需点击头像完成切换 参数 /*** description: 图片上传组件* param {*} action: 上传地址* param {*} width: 宽度* param {*} height…

flink Unsupported operand types: IF(boolean, NULL, String)

问题&#xff1a;业务方存储了NULL 字符串&#xff0c;需要处理为 null select if(anull&#xff0c;null&#xff0c;a); 结果遇到了 Unsupported operand types: IF(boolean, NULL, String)&#xff0c;根据报错反馈&#xff0c;很明显应该是没有对 null 自动转换&#xff…

应用层协议 -- HTTPS 协议

目录 一、了解 HTTPS 协议 1、升级版的 HTTP 协议 2、理解“加密” 二、对称加密 1、理解对称加密 2、对称加密存在的问题 三、非对称加密 1、理解非对称加密 2、中间人攻击 3、CA 证书和数字签名 四、总结 一、了解 HTTPS 协议 1、升级版的 HTTP 协议 HTTPS 也是…

untiy avpro播放超过8K视频的解决方案

安转LAV Filters解码器&#xff0c;然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

jasypt组件死锁bug案例分享

事故描述 1、上午9.55发布了一个Apollo动态配置参数&#xff1b; 2、片刻后&#xff0c;服务器接口开始出现大量的超时告警&#xff0c;似乎是某资源被耗尽不足分配&#xff1b; 3、正值业务请求高峰的上午十点&#xff08;平台上午10点会有一些活动会拉一波用户流量&#x…