【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取,还涉及数据处理与分析。无论是新手小白还是进阶开发者,都能从中汲取知识,助力掌握爬虫核心技能,开拓技术视野。
目录
- 一、大数据处理框架初印象
- 1.1 Hadoop:大数据处理的基石
- 1.2 Spark:快速通用的计算引擎
- 二、分布式爬虫与大数据框架的集成
- 2.1 为什么要集成
- 2.2 集成方式与案例
- 三、海量数据的分析与挖掘
- 3.1 分析与挖掘的流程
- 3.2 案例实操
- 四、挑战与解决方案
- 4.1 数据一致性问题
- 4.2 性能优化
- 4.3 网络通信问题
- 4.4 系统监控与维护
- 五、总结与展望
一、大数据处理框架初印象
在当今数字化时代,数据呈爆炸式增长,如何高效地处理和分析海量数据成为了关键问题。大数据处理框架应运而生,它们为解决这些问题提供了强大的工具和平台。这里,我们将重点介绍两款广泛应用的大数据处理框架:Hadoop 和 Spark。
1.1 Hadoop:大数据处理的基石
Hadoop 是一个开源的分布式大数据处理框架,由 Apache 基金会支持和维护。它的核心组件包括 Hadoop 分布式文件系统(HDFS)和 MapReduce 算法 ,这两个组件相互协作,使得 Hadoop 能够处理大量数据,并在多个节点上并行处理数据,提高处理速度和效率。
HDFS 是 Hadoop 体系中数据存储管理的基础,是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。HDFS 采用主从结构,NameNode 作为主节点,负责存储文件系统的元数据,如文件名、权限、块的位置等;多个 DataNode 作为从节点,负责存储文件的实际数据块。客户端通过与 NameNode 和 DataNode 交互来访问 HDFS 中的文件。HDFS 具有高容错性,通过数据块的复制(通常为 3 个副本)来实现数据的冗余存储,当某个节点发生故障时,系统可以从其他副本中恢复数据;同时,它还提供高吞吐量的数据访问,适合大数据处理,尤其适合处理大文件(通常是 GB 到 TB 级别)。
MapReduce 是一种分布式并行处理算法,也是 Hadoop 的核心计算模型。它将应用划分为 Map 和 Reduce 两个主要步骤。Map 步骤将输入数据划分为多个部分,并在多个节点上并行处理,对数据集上的独立元素进行指定的操作,生成键 - 值对形式的中间结果;Reduce 步骤则对 Map 步骤输出的中间结果中相同 “键” 的所有 “值” 进行规约,以得到最终结果。这种功能划分非常适合在由大量计算机组成的分布式并行环境里进行数据处理。例如,在进行单词计数时,Map 阶段可以将每个文本块中的单词提取出来,并标记出现的次数,形成键值对(单词,1);Reduce 阶段则将相同单词的计数进行累加,得到每个单词在整个文本中的出现次数。
1.2 Spark:快速通用的计算引擎
Spark 是专为大规模数据处理而设计的快速通用的计算引擎,由加州大学伯克利分校的 AMPlab 开源。它拥有 Hadoop MapReduce 所具有的优点,同时又在许多方面进行了优化和改进,能够更好地适用于数据挖掘与机器学习等需要迭代计算的场景。
Spark 的核心抽象是弹性分布式数据集(RDD),它是分布在集群中的只读对象集合,由多个 Partition 构成,可以存储在磁盘或内存中,并且支持多种存储级别。RDD 通过并行 “转换” 操作构造,具有失效后自动重构的特性。Spark 提供了丰富的操作算子,包括 Transformation 和 Action。Transformation 操作会返回一个新的 RDD,例如 map、filter、groupBy、reduceBy 等,它们是延迟执行的,只有当遇到 Action 操作时,才会触发真正的计算;Action 操作则是通过 RDD 计算得到一个或者一组值,例如 count、collect、save 等。
除了 RDD,Spark 还引入了 DataFrame 和 Dataset,它们是更高级的抽象,提供了结构化和类型安全的编程接口。DataFrame 是一种以列方式组织的分布式数据集,类似于传统数据库中的表,它提供了更丰富的查询和分析功能,并且支持 SQL 查询。Dataset 则是强类型的、可编码的分布式数据集,它结合了 RDD 的灵活性和 DataFrame 的查询优化能力,在性能和类型安全性方面表现更出色。
Spark 的架构设计使其能够在内存中进行计算,大大提高了计算速度。它还支持多种运行模式,包括 Standalone、YARN 和 Mesos 等,可以方便地与现有的 Hadoop 集群集成,利用 Hadoop 的资源管理和调度功能。此外,Spark 还提供了丰富的组件库,如 Spark SQL 用于结构化数据处理和 SQL 查询,Spark Streaming 用于实时流处理,MLlib 用于机器学习,GraphX 用于图计算等,这些组件库使得 Spark 能够满足不同领域和场景的大数据处理需求。
二、分布式爬虫与大数据框架的集成
2.1 为什么要集成
在当今数字化时代,数据量呈爆炸式增长,单机爬虫在面对海量数据时显得力不从心。分布式爬虫虽然能够通过多台机器并行工作,提高数据采集的速度,但随着数据量的不断增加,如何存储和处理这些海量数据成为了新的挑战。这时候,将分布式爬虫与大数据处理框架集成就显得尤为重要。
从存储角度来看,分布式爬虫采集到的数据量可能会非常庞大,单机的存储系统难以满足存储需求。而大数据处理框架中的 Hadoop 分布式文件系统(HDFS),它可以将数据分布存储在多个节点上,通过数据块的复制实现高容错性,能够轻松应对海量数据的存储问题。例如,一个大型电商网站的商品数据,每天可能会产生数亿条记录,使用 HDFS 可以高效地存储这些数据,确保数据的安全性和可靠性。
从处理角度来说,分布式爬虫采集到的数据往往需要进行进一步的分析和挖掘,以提取有价值的信息。大数据处理框架如 Spark,具有强大的并行计算能力,能够快速处理大规模的数据。通过将分布式爬虫与 Spark 集成,可以在数据采集后立即对数据进行分析,大大提高了数据处理的效率。比如,在分析社交媒体数据时,需要对海量的用户评论、点赞、转发等数据进行情感分析和趋势预测,Spark 的分布式计算能力可以快速完成这些复杂的计算任务。
此外,集成还能提升爬虫系统的扩展性。随着业务的发展,数据采集的需求可能会不断增加,通过集成大数据处理框架,可以方便地扩展爬虫系统的规模,增加爬虫节点和数据处理节点,以适应不断增长的数据量和处理需求。
2.2 集成方式与案例
以将爬取数据导入 Hadoop 集群为例,以下是具体的实现步骤和代码示例。
首先,需要安装操作 Hadoop 的 Python 库,这里我们使用hdfs库,它提供了一组简单的接口,用于连接到 Hadoop 集群并执行文件操作。可以使用以下命令进行安装:
pip install hdfs
安装完成后,我们可以编写 Python 代码来连接到 Hadoop 集群。假设 Hadoop 集群的地址为hadoop-cluster,端口号为50070(这是 HDFS 的 Web UI 端口,用于与 Hadoop 集群进行交互),代码如下:
from hdfs import InsecureClient# 创建Hadoop客户端对象,这里使用InsecureClient表示不进行安全认证,适用于测试环境
# 如果Hadoop集群设置了安全认证,需要提供用户名和密码
client = InsecureClient('http://hadoop-cluster:50070')
接下来,我们可以使用client对象的upload方法将本地文件上传到 Hadoop 集群。假设我们已经通过分布式爬虫在本地生成了一个数据文件local_data.txt,要将其上传到 Hadoop 集群的/user/data/目录下,代码如下:
client.upload('/user/data/local_data.txt', 'local_data.txt')
在实际的分布式爬虫项目中,通常会在爬虫的管道(Pipeline)中进行数据上传操作。例如,使用 Scrapy 框架编写爬虫时,可以在pipelines.py文件中定义一个上传到 Hadoop 的管道类:
import scrapy
from hdfs import InsecureClientclass HadoopPipeline:def __init__(self, hadoop_url):self.hadoop_url = hadoop_urlself.client = None@classmethoddef from_crawler(cls, crawler):# 从Scrapy的设置中获取Hadoop的URLhadoop_url = crawler.settings.get('HADOOP_URL')return cls(hadoop_url)def open_spider(self, spider):# 在爬虫启动时创建Hadoop客户端连接self.client = InsecureClient(self.hadoop_url)def close_spider(self, spider):# 在爬虫关闭时关闭Hadoop客户端连接if self.client:self.client.close()def process_item(self, item, spider):# 将爬取到的数据转换为字符串形式,这里假设item是一个字典data_str = str(dict(item))# 生成一个唯一的文件名,例如使用时间戳import timefile_name = f'/user/data/{int(time.time())}.txt'# 上传数据到Hadoop集群self.client.write(file_name, data_str, encoding='utf-8')return item
然后,在settings.py文件中配置启用这个管道,并设置 Hadoop 的 URL:
ITEM_PIPELINES = {'your_project_name.pipelines.HadoopPipeline': 300,
}
HADOOP_URL = 'http://hadoop-cluster:50070'
这样,当分布式爬虫爬取到数据后,就会通过这个管道将数据上传到 Hadoop 集群中,实现了分布式爬虫与 Hadoop 的集成。
三、海量数据的分析与挖掘
当分布式爬虫与大数据处理框架成功集成后,我们就拥有了强大的数据采集和存储能力。接下来,如何从这些海量数据中挖掘出有价值的信息,成为了关键环节。利用大数据处理框架进行海量数据的分析与挖掘,能够帮助我们发现数据中的模式、趋势和关联,为决策提供有力支持。
3.1 分析与挖掘的流程
利用大数据处理框架进行海量数据分析与挖掘,一般遵循以下流程:
- 数据清洗:从分布式爬虫采集到的数据往往存在各种问题,如数据缺失、重复、错误、格式不一致等。数据清洗的目的就是去除这些噪声数据,提高数据质量,为后续的分析和挖掘工作奠定基础。例如,在爬取电商网站的商品数据时,可能会出现价格字段缺失、商品描述中包含特殊字符等问题,需要通过数据清洗来解决。在 Hadoop 生态系统中,可以使用 Pig 或 Hive 进行数据清洗操作。Pig 提供了丰富的函数和操作符,能够方便地对数据进行过滤、去重、转换等操作;Hive 则支持使用 SQL-like 语句进行数据处理,对于熟悉 SQL 的用户来说非常友好。
- 数据转换:将清洗后的数据转换为适合分析和挖掘的格式。这可能包括数据类型转换、数据归一化、特征提取等操作。例如,将文本数据转换为数值型特征,以便于机器学习算法处理;对数值型数据进行归一化处理,使其具有相同的尺度,提高模型的准确性和稳定性。在 Spark 中,可以使用 DataFrame 的各种函数和方法进行数据转换。例如,使用cast方法进行数据类型转换,使用minMaxScaler进行数据归一化,使用regexp_extract等函数进行特征提取。
- 数据分析:运用各种数据分析方法和工具,对转换后的数据进行深入分析,以发现数据中的规律和趋势。这可以包括统计分析、关联分析、聚类分析、分类分析等。例如,通过统计分析了解数据的基本特征,如均值、中位数、标准差等;通过关联分析发现数据之间的关联关系,如在电商购物篮分析中,发现用户经常同时购买的商品组合;通过聚类分析将数据分为不同的类别,以便更好地理解数据的分布情况;通过分类分析对数据进行分类预测,如预测客户是否会购买某产品、是否会流失等。在 Hadoop 和 Spark 中,都提供了丰富的数据分析库和工具。Hadoop 的 MapReduce 框架可以实现各种自定义的数据分析算法;Spark 的 MLlib 库则提供了大量的机器学习算法和工具,包括分类、回归、聚类、协同过滤等,能够方便地进行数据分析和挖掘。
- 数据可视化:将分析结果以直观的图表、图形等形式展示出来,便于用户理解和决策。常见的数据可视化工具包括 Tableau、PowerBI、Echarts 等。这些工具可以将数据分析结果转换为柱状图、折线图、饼图、地图等各种可视化形式,帮助用户更直观地观察数据的特征和趋势,发现数据中的异常点和规律。例如,通过柱状图展示不同地区的销售数据对比,通过折线图展示产品销量随时间的变化趋势,通过地图展示用户的地理位置分布等。
3.2 案例实操
为了更直观地展示如何使用 Hadoop 和 Spark 对爬取到的海量数据进行分析和挖掘,我们以一个电商数据的分析为例。
假设我们通过分布式爬虫爬取了某电商平台的用户购买记录,数据存储在 Hadoop 集群的 HDFS 中,格式为 CSV,包含以下字段:用户 ID、商品 ID、购买时间、购买数量、购买金额。
首先,使用 Hive 对数据进行清洗和转换。创建一个 Hive 表来存储数据:
CREATE TABLE ecomm_data (user_id STRING,product_id STRING,purchase_time STRING,quantity INT,amount DOUBLE
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS TEXTFILE;
然后,将 HDFS 中的数据加载到 Hive 表中:
LOAD DATA INPATH '/user/data/ecomm_data.csv' INTO TABLE ecomm_data;
接下来,进行数据清洗,去除重复记录和异常值。例如,假设购买金额为负数是异常数据,我们可以使用以下 SQL 语句进行清洗:
CREATE TABLE clean_ecomm_data AS
SELECT *
FROM ecomm_data
WHERE amount > 0AND NOT (user_id IS NULL OR product_id IS NULL OR purchase_time IS NULL OR quantity IS NULL OR amount IS NULL)AND NOT (user_id = '' OR product_id = '' OR purchase_time = '' OR quantity = 0 OR amount = 0);
清洗后的数据存储在clean_ecomm_data表中。
接下来,使用 Spark 进行数据分析。首先,创建一个 SparkSession:
from pyspark.sql import SparkSessionspark = SparkSession.builder \.appName("EcommDataAnalysis") \.getOrCreate()
读取 Hive 中的清洗后的数据:
df = spark.sql("SELECT * FROM clean_ecomm_data")
- 统计分析:计算每个用户的总购买金额和购买次数:
from pyspark.sql.functions import sum, countuser_summary = df.groupBy("user_id") \.agg(sum("amount").alias("total_amount"), count("*").alias("purchase_count")) \.orderBy("total_amount", ascending=False)user_summary.show()
- 机器学习模型训练:以预测用户是否会购买某商品为例,使用逻辑回归模型进行训练。首先,提取特征和标签,这里我们使用用户的购买次数和总购买金额作为特征,是否购买某商品作为标签(假设购买过该商品标签为 1,否则为 0)。
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.classification import LogisticRegression# 假设要预测用户是否会购买商品ID为'product_123'的商品
target_product_id = 'product_123'
target_df = df.filter(df.product_id == target_product_id)# 提取特征和标签
assembler = VectorAssembler(inputCols=["purchase_count", "total_amount"], outputCol="features")
feature_df = assembler.transform(target_df)
labeled_df = feature_df.withColumn("label", feature_df.product_id.isin(target_product_id).cast("int"))# 划分训练集和测试集
train_df, test_df = labeled_df.randomSplit([0.8, 0.2], seed=42)# 训练逻辑回归模型
lr = LogisticRegression(featuresCol="features", labelCol="label")
model = lr.fit(train_df)# 模型评估
predictions = model.transform(test_df)
predictions.select("prediction", "label", "features").show()
通过以上案例,我们展示了如何结合 Hadoop 和 Spark 对分布式爬虫采集到的海量数据进行分析和挖掘,从数据清洗、转换到统计分析和机器学习模型训练,充分发挥了大数据处理框架的强大能力。
四、挑战与解决方案
在分布式爬虫与大数据处理框架结合的过程中,尽管带来了强大的数据处理能力,但也面临着一系列挑战。
4.1 数据一致性问题
在分布式环境下,多个爬虫节点同时进行数据采集和存储,可能会导致数据一致性问题,例如重复存储或丢失数据。这是因为不同节点在处理数据时可能存在时间差,或者由于网络延迟、节点故障等原因,导致数据的更新和同步出现问题。
为了解决这个问题,可以使用分布式锁机制来确保数据的一致性。以 Redis 的分布式锁为例,它可以控制对共享资源的访问。在爬虫将数据存储到大数据处理框架之前,先获取分布式锁,只有获取到锁的爬虫节点才能进行数据存储操作,这样就避免了多个节点同时写入数据导致的冲突。另外,在数据库中使用唯一索引或主键来避免数据的重复存储。例如,在将爬取到的商品数据存储到 Hive 表中时,可以将商品 ID 设置为主键,这样如果有重复的商品数据尝试插入,数据库会自动拒绝,从而保证数据的一致性。
4.2 性能优化
随着数据量的不断增加和爬虫节点的增多,系统的性能可能会成为瓶颈。例如,消息队列在任务量较大时,可能会出现性能瓶颈,导致任务处理速度变慢;大数据处理框架在处理海量数据时,也可能会因为资源不足而导致处理效率低下。
针对消息队列性能瓶颈,可以考虑使用分布式消息队列,将消息队列拆分为多个分区,提高消息的处理能力。同时,调整消息队列的配置参数,如并发连接数、缓冲区大小等,以优化性能。在大数据处理框架方面,合理配置资源是关键。例如,在 Spark 中,可以根据集群的硬件资源和数据量,调整 Executor 的数量、内存大小以及 CPU 核心数等参数,以充分利用集群资源,提高数据处理效率。还可以采用数据分区、缓存等技术来优化数据处理流程。例如,对大规模的电商订单数据进行分析时,可以根据订单日期进行数据分区,这样在查询特定时间段的订单数据时,可以只读取相关分区的数据,减少数据扫描量,提高查询效率;对于频繁访问的数据,可以将其缓存到内存中,避免重复从磁盘读取,从而加快数据访问速度。
4.3 网络通信问题
分布式爬虫和大数据处理框架通常部署在多个节点上,节点之间的网络通信质量会直接影响系统的性能和稳定性。网络延迟、网络分区等问题可能导致数据传输缓慢、任务调度失败等情况。
为了降低网络通信问题的影响,可以采用一些优化策略。例如,使用高速稳定的网络设备和网络拓扑结构,减少网络延迟和丢包率。在软件层面,可以采用异步通信机制,如消息队列,来解耦不同组件之间的通信,提高系统的响应速度和可靠性。同时,设置合理的超时时间和重试机制,当网络通信出现故障时,能够自动进行重试,确保任务的顺利执行。比如,在爬虫节点向 Hadoop 集群上传数据时,如果遇到网络超时,可以设置重试次数和重试间隔时间,自动重新上传数据,直到上传成功为止。
4.4 系统监控与维护
分布式爬虫与大数据处理框架结合的系统较为复杂,涉及多个组件和大量节点,系统的监控与维护变得至关重要。如果不能及时发现和解决系统中的故障和性能问题,可能会导致数据丢失、任务失败等严重后果。
建立完善的监控系统是解决这一问题的关键。可以使用 Prometheus、Grafana 等工具对系统的各项指标进行实时监控,包括爬虫节点的运行状态、数据处理速度、网络带宽使用情况、大数据处理框架的资源利用率等。通过设置阈值和告警规则,当系统出现异常时,能够及时发送告警信息,通知管理员进行处理。同时,定期对系统进行维护和优化,如清理过期数据、优化数据库索引、更新软件版本等,以确保系统的长期稳定运行。例如,通过监控发现某个爬虫节点的 CPU 使用率持续过高,可能是由于该节点上的爬虫任务过多或者存在内存泄漏等问题,管理员可以及时调整任务分配或者对该节点进行排查和修复,保证系统的正常运行。
五、总结与展望
分布式爬虫与大数据处理框架的结合,为数据采集和分析带来了前所未有的便利和强大的能力。通过将分布式爬虫的高效数据采集与 Hadoop、Spark 等大数据处理框架的强大存储和计算能力相结合,我们能够应对海量数据的挑战,挖掘出数据背后的潜在价值。
这种结合不仅提高了数据处理的效率和准确性,还为各种领域的应用提供了有力支持。在互联网行业,能够帮助企业深入了解用户行为和市场趋势,从而优化产品和服务;在金融领域,可以进行风险评估和投资决策分析;在科研领域,有助于获取大量数据进行实验和研究。
展望未来,随着技术的不断发展,分布式爬虫和大数据处理框架将不断演进和完善。新的算法和技术将不断涌现,进一步提升数据处理的性能和效率。同时,随着数据安全和隐私保护的重要性日益凸显,如何在保证数据安全的前提下,充分发挥分布式爬虫与大数据处理框架的优势,将是未来研究和实践的重点方向。
希望读者通过本文的介绍,能够对分布式爬虫与大数据处理框架的结合有更深入的理解,并在实际工作和学习中积极探索和实践,利用这些技术解决实际问题,创造更大的价值。
相关文章:
【Python爬虫(45)】Python爬虫新境界:分布式与大数据框架的融合之旅
【Python爬虫】专栏简介:本专栏是 Python 爬虫领域的集大成之作,共 100 章节。从 Python 基础语法、爬虫入门知识讲起,深入探讨反爬虫、多线程、分布式等进阶技术。以大量实例为支撑,覆盖网页、图片、音频等各类数据爬取ÿ…...
网络安全科普系统开发与设计(springboot论文源码调试讲解)
第4章 总体设计 4.1系统目标 本系统旨在达到科普知识信息展示、案例分析信息查询、试题信息添加、评论、答题管理、信息分类等为一体,为用户和管理员提供服务。使管理员更加轻松的进行工作,使用户更加快速的解决自己的问题。本系统的设计界面丰富&#…...
前后端对接
前端与后端的对接主要通过 接口 进行数据交互,具体流程和方式如下: 1. 明确需求与接口定义 前后端协商:确定需要哪些接口、接口的功能、请求参数和返回格式。接口文档:使用工具(如 Swagger、Postman、Apifoxÿ…...
深入浅出 SQLSugar:快速掌握高效 .NET ORM 框架
SQLSugar 是一个高效、易用的 .NET ORM 框架,支持多种数据库(如 SQL Server、MySQL、PostgreSQL 等)。它提供了丰富的功能,包括 CRUD 操作、事务管理、动态表名、多表联查等,开发者可以通过简单的链式操作实现复杂的数…...
计算机专业知识【深入理解子网中的特殊地址:为何 192.168.0.1 和 192.168.0.255 不能随意分配】
在计算机网络的世界里,IP 地址是设备进行通信的关键标识。对于常见的子网,如 192.168.0.0/24,我们可能会疑惑为何某些地址不能分配给主机使用。接下来,我们就以 192.168.0.0/24 为例,详细解释为何 192.168.0.1 和 192.…...
网络安全与措施
🍅 点击文末小卡片 ,免费获取网络安全全套资料,资料在手,涨薪更快 # 网络安全问题概述 1) 数据安全 访问(授权访问);存储(容灾、备份或异地备份等) 2) 应用程序 不能…...
复刻Dummy机械臂保姆教程
一直想复刻稚晖君的Dummy机械臂,24年11月底终于开始行动,上网学习、材料准备、组装调试前后耗时1个多月,终于在春节前顺利完工,正好用它给大家拜个年。很多同学在咨询细节,这里就整理一份保姆式教程,其中学…...
|网络安全|网络安全学习方法
1、先网络后安全 很多初学者还没搞定网络看懂网络拓扑,就急着研究防火墙或VPN,其实这样就不清楚整个网络架构是如何安全演进的。正确的流程是:先通过网络协议和拓扑设计的学习,能独立搭建一个企业网/校园网,再引入局域…...
内外网隔离文件传输解决方案|系统与钉钉集成+等保合规,安全提升70%
一、背景与痛点 在内外网隔离的企业网络环境中,员工与外部协作伙伴(如钉钉用户)的文件传输面临以下挑战: 1. **安全性风险**:内外网直连可能导致病毒传播、数据泄露。 2. **操作繁琐**:传统方式需频繁切…...
EasyRTC:轻量化SDK赋能嵌入式设备,开启智能硬件音视频通讯新篇章
在智能硬件与物联网飞速发展的今天,嵌入式设备的音视频通讯能力正变得愈发重要。然而,受限于硬件资源,尤其是Flash存储空间的不足,传统音视频通讯方案往往难以在嵌入式设备上实现高效集成。EasyRTC凭借其轻量级SDK和先进的技术架构…...
如何使用3D高斯分布进行环境建模
使用3D高斯分布来实现建模,主要是通过高斯分布的概率特性来描述空间中每个点的几何位置和不确定性。具体来说,3D高斯分布被用来表示点云数据中的每一个点或体素(voxel)的空间分布和不确定性,而不是单纯地存储每个点的坐…...
Java 大视界 -- 总结与展望:Java 大数据领域的新征程与无限可能(96)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
从零开始:VirtualBox安装Ubuntu 24.04.1 LTS
博客系列:Ubuntu虚拟机搭建与Python开发环境配置全攻略 第一篇:从零开始:VirtualBox安装Ubuntu 24.04.1 LTS(当前)第二篇:解决VirtualBox卡顿问题:配置优化和常见错误排查第三篇:轻…...
使用大语言模型(Deepseek)构建一个基于 SQL 数据的问答系统
GitHub代码仓库 架构 从高层次来看,这些系统的步骤如下: 将问题转换为SQL查询:模型将用户输入转换为SQL查询。 执行SQL查询:执行查询。 回答问题:模型根据查询结果响应用户输入。 样本数据 下载样本数据…...
记录此刻:历时两月,初步实现基于FPGA的NVMe SSD固态硬盘存储控制器设计!
背景 为满足实验室横向项目需求,在2024年12月中下旬导师提出基于FPGA的NVMe SSD控制器研发项目。项目核心目标为:通过PCIe 3.0 x4接口实现单盘3000MB/s的持续读取速率。 实现过程 调研 花了半个月的时间查阅了一些使用FPGA实现NVME SSD控制器的论文、…...
【mysql】核心参数,SHOW VARIABLES
核心参数分类解析 SET GLOBAL slow_query_log = ON; 修改参数设置 一、核心参数分类解析 1. 连接和线程配置 max_connections (200):允许的最大并发连接数,超过会拒绝新连接。 wait_timeout (28800秒):非交互式连接的空闲超时时间(默认8小时)。 interactive_timeout (…...
centOS 7.9 安装JDK MYSQL
jdk: Java Archive Downloads - Java SE 17.0.12 and earlier CentOS安装JDK17教程(完整版) - 秦胜飞 - 博客园 sudo yum update wget https://download.oracle.com/java/17/archive/jdk-17.0.3.1_linux-x64_bin.rpm yum install ./jdk-17.0.3.1_linux…...
【OS安装与使用】part5-ubuntu22.04基于conda安装pytorch+tensorflow
文章目录 一、待解决问题1.1 问题描述1.2 解决方法 二、方法详述2.1 必要说明2.2 应用步骤2.2.1 明确pytorch安装依赖2.2.2 conda创建虚拟环境2.2.3 安装pytorch2.2.4 验证pytorch安装2.2.5 安装Tensorflow2.2.6 验证Tensorflow安装 三、疑问四、总结 一、待解决问题 1.1 问题…...
SVM 支持向量机
Owner: 潘达斯奈基 #数据科学/机器学习/SVM 一 支持向量机简介 支持向量机(Support Vector Machine, SVM)是一个二元分类算法,是对感知器算法模型的一种拓展,现在的SVM算法支持线性分类和非线性分类应用,…...
第1章大型互联网公司的基础架构——1.9 LSM Tree
**LSM Tree(Log-Structured Merge Tree)是一种对高并发写数据非常友好的键值存储模型,同时兼顾了查询效率。**LSMTree是我们下面将要介绍的NoSQL数据库所依赖的核心数据结构,例如BigTable.、HBase、 Cassandra、TiDB 等。 1.9.1 …...
053 性能压测 单机锁 setnx
文章目录 性能压测-压力测试索引thymeleafnginx减少数据库查询(代码有bug)缓存 安全单机锁(防止缓存击穿)setnx pom.xml 性能压测-压力测试 1 响应时间(Response Time: RT):响应时间指用户从客…...
眼见不一定为实之MySQL中的不可见字符
目录 前言 一、问题的由来 1、需求背景 2、数据表结构 二、定位问题 1、初步的问题 2、编码是否有问题 3、依然回到字符本身 三、深入字符本身 1、回归本质 2、数据库解决之道 3、代码层解决 四、总结 前言 在开始今天的博客内容之前,正在看博客的您先…...
【Java 面试 八股文】JVM 虚拟机篇
JVM 虚拟机篇 1. JVM组成1.1 JVM由那些部分组成,运行流程是什么?1.2 什么是程序计数器?1.3 你能给我详细的介绍Java堆吗?1.4 Java 虚拟机栈1.4.1 Java Virtual machine Stacks (java 虚拟机栈)1.4.2 栈和堆的区别1.4.3 垃圾回收是否涉及栈内…...
达梦数据库学习笔记@1
目录 达梦数据库学习笔记一、表空间管理(一)默认表空间(二)相关数据字典(三)表空间操作(四)临时表空间管理 二、重做日志管理(一)系统视图(二&…...
条款23:宁以non-member、non-friend替换member函数
1.使用场景举例 网络浏览器类 当然这一功能也可以由一个non-menber函数(更好的封装,本条款的核心立意)提供: 面向对象守则要求数据应该尽可能的被封装,然而与直观相反地,member函数clearEverything带来的封…...
代码审计初探
学会了基础的代码审计后,就该提高一下了,学一下一些框架的php代码审计 先从一些小众的、已知存在漏洞的cms入手 phpems php的一款开源考试系统 源码下载 https://down.chinaz.com/soft/34597.htm 环境部署 windows审计,把相关文件放到phps…...
2025前端框架最新组件解析与实战技巧:Vue与React的革新之路
作者:飞天大河豚 引言 2025年的前端开发领域,Vue与React依然是开发者最青睐的框架。随着Vue 3的全面普及和React 18的持续优化,两大框架在组件化开发、性能优化、工程化支持等方面均有显著突破。本文将从最新组件特性、使用场景和编码技巧三…...
Eclipse自动排版快捷键“按了没有用”的解决办法
快捷键按了没有用,通常是因为该快捷键方式被其他软件占用了,即别的软件也设置了这个快捷键,导致你按了之后电脑不知道该响应哪个软件。 解决办法:1.将当前软件的这个快捷键改了;2.找到占用的那个软件,把那…...
小型字符级语言模型的改进方向和策略
小型字符级语言模型的改进方向和策略 一、回顾小型字符级语言模型的处理流程 前文我们已经从零开始构建了一个小型字符级语言模型,那么如何改进和完善我们的模型呢?有哪些改进的方向?我们先回顾一下模型的流程: 图1 小型字符级语言模型的处理流程 (1)核心模块交互过程:…...
请简述一下Prefab(预制体)的本质是什么?
在 Unity 中,Prefab(预制体)是一种非常重要的资产类型。 Prefab 本质上是一个可重复使用(开发者可以在场景中多次实例化同一个预制体)的游戏对象模板(预制体就像一个模板,对预制体本身的修改会…...
【开源项目】分布式文本多语言翻译存储平台
分布式文本多语言翻译存储平台 地址: Gitee:https://gitee.com/dreamPointer/zza-translation/blob/master/README.md 一、提供服务 分布式文本翻译服务,长文本翻译支持流式回调(todo)分布式文本多语言翻译结果存储服…...
使用GPU训练模型
1.说明 本地训练模型可以用CPU和GPU,但是GPU的性能比CPU要好得多,所以如果有独立显卡的,尽量还是用GPU来训练模型。 使用GPU需要安装Cuda和Cudnn 2.安装Cuda 安装cuda之前,首先看一下显卡支持的cuda版本,在命…...
DPVS-3: 双臂负载均衡测试
测试拓扑 双臂模式, 使用两个网卡,一个对外,一个对内。 Client host是物理机, RS host都是虚拟机。 LB host是物理机,两个CX5网卡分别在两个子网。 配置文件 用dpvs.conf.sample作为双臂配置文件,其中…...
Spring Security+JWT+Redis实现项目级前后端分离认证授权
1. 整体概述 权限管理包括用户身份认证和授权两部分,简称认证授权。对于需要访问控制到资源,用户首先经过身份认证,认证通过后用户具有该资源的访问权限方可访问。 1.1 认证概述 认证是确认用户身份的过程,确保用户是谁。 1.1.1 …...
马斯克宣布Grok语音模式正式上线:早期测试版本 可能有一些问题
快科技2月23日消息,据报道,马斯克旗下xAI团队近期动作频频,继2月18日直播发布Grok最新版本Grok3后,马斯克又在社交平台X上宣布,Grok语音模式早期测试版现已在Grok应用程序上线,并对其表现给予了高度评价。 …...
P9631 [ICPC 2020 Nanjing R] Just Another Game of Stones Solution
Description 给定序列 a ( a 1 , a 2 , ⋯ , a n ) a(a_1,a_2,\cdots,a_n) a(a1,a2,⋯,an),有 m m m 个操作分两种: chmax ( l , r , k ) \operatorname{chmax}(l,r,k) chmax(l,r,k):对每个 i ∈ [ l , r ] i \in [l,r] i∈[l,…...
请求go构建缓存,go clean -cache
go clean -cache go 构建时会产生很多缓存, 一般是目录:/Users/xxx/Library/Caches/go-build 此目录README: This directory holds cached build artifacts from the Go build system. Run "go clean -cache" if the directory …...
安全面试4
文章目录 给的源码是ThinkPHP框架的话,审计起来和没有使用框架的有什么不同,从流程上或者从关注的点上有什么不同框架代码审计的流程无框架代码审计的流程 反序列的时候,unserialize()反序列一个字符串的时候,对象会有一些魔术方法…...
HTML之JavaScript DOM操作元素(1)
HTML之JavaScript DOM操作元素(1) 3.对元素进行操作1.操作元素的属性 元素名.属性名 ""2.操作元素的样式 元素.style.样式名 "" 样式名 "-" 要进行驼峰转换3.操作元素的文本 元素名.innerText 只识别文本元素名…...
SpringBoot+Vue+微信小程序的猫咖小程序平台(程序+论文+讲解+安装+调试+售后)
感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统介绍 在当下这个高速发展的时代,网络科技正以令人惊叹的速度不断迭代更新。从 5G …...
【十一】Golang 指针
💢欢迎来到张胤尘的开源技术站 💥开源如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 指针指针定义指针初始化& 操作符new 函数初始…...
“conda”不是内部或外部命令,也不是可运行的程序或批处理文件
有的时候,我们发现在cmd黑框中输入conda时,cmd会显示“conda”不是内部或外部命令,也不是可运行的程序或批处理文件,那这时候该怎么解决呢? Step01:我们找到Anconda的安装目录。然后找到里面的bin文件夹&am…...
通过LM Studio本地私有化部署DeepSeek-R1模型,无网络也能用
打开LM Studio官网https://lmstudio.ai/ 选择适合自己的操作系统,下载LM Studio安装包 本地电脑安装成功后运行LM Studio,顶部文本框输入deepseek,点击搜索模型 在搜索结果中选择7B参数模型, 如上图右侧提示“No result found”说…...
GPU和FPGA的区别
GPU(Graphics Processing Unit,图形处理器)和 FPGA(Field-Programmable Gate Array,现场可编程门阵列)不是同一种硬件。 我的理解是,虽然都可以用于并行计算,但是GPU是纯计算的硬件…...
CMake管理依赖实战:多仓库的无缝集成
随着软件复杂度的增加,单个项目可能需要依赖多个外部库或模块。这些依赖项可能是来自不同的代码仓库,如ATest和BTest。为了实现高效的依赖管理,CMake提供了多种方式来处理这种多仓库的情况。下面我们将详细介绍几种常见的方法,并通…...
Windows系统第一次运行C语言程序,环境配置,软件安装等遇到的坑及解决方法
明确需要编辑器和编译器,并选择自己要用什么(我选的编辑器是VSCode:Visual Studio Code;编译器是gcc)下载VSCode并配置环境变量(这里没啥问题),安装C/C的拓展安装Cygwin,…...
2025最新版!Fiddler抓包实战:深度解析短视频评论采集技术
2025最新版!Fiddler抓包实战:深度解析短视频评论采集技术(脱敏) 声明: 本文仅供学习交流使用,请勿用于非法用途。 导语: 短视频数据采集又有新突破!你是否好奇如何安全、高效地获…...
Linux信号
目录 1. 信号的概念搞定(输出结论,支撑我们的理解) 补充知识 2.信号的产生 补充知识 3.信号的保存 4.阻塞信号 1. 信号其他相关常见概念 2. 在内核中的表示 3. sigset_t 4. 信号集操作函数 sigprocmask sigpending 5. 信号的…...
git,bash - 从一个远端git库只下载一个文件的方法
文章目录 git,bash - 从一个远端git库只下载一个文件的方法概述笔记写一个bash脚本来自动下载get_github_raw_file_from_url.shreanme_file.shfind_key_value.sh执行命令 END git,bash - 从一个远端git库只下载一个文件的方法 概述 github上有很多大佬上传了电子书库…...
深度学习(5)-卷积神经网络
我们将深入理解卷积神经网络的原理,以及它为什么在计算机视觉任务上如此成功。我们先来看一个简单的卷积神经网络示例,它用干对 MNIST数字进行分类。这个任务在第2章用密集连接网络做过,当时的测试精度约为 97.8%。虽然这个卷积神经网络很简单…...