YARN架构解析:深入理解Hadoop资源管理核心

在这里插入图片描述

YARN架构解析:深入理解Hadoop资源管理核心

🌟 你好,我是 励志成为糕手 !
🌌 在代码的宇宙中,我是那个追逐优雅与性能的星际旅人。 ✨
每一行代码都是我种下的星光,在逻辑的土壤里生长成璀璨的银河;
🛠️ 每一个算法都是我绘制的星图,指引着数据流动的最短路径; 🔍
每一次调试都是星际对话,用耐心和智慧解开宇宙的谜题。
🚀 准备好开始我们的星际编码之旅了吗?

目录

  • YARN架构解析:深入理解Hadoop资源管理核心
    • 摘要
    • 1. YARN架构概述
      • 1.1 设计理念与核心价值
      • 1.2 核心组件架构
    • 2. 核心组件深度解析
      • 2.1 ResourceManager:集群资源的统一调度者
      • 2.2 NodeManager:节点资源的守护者
      • 2.3 ApplicationMaster:应用程序的智能管家
    • 3. YARN调度策略深度分析
      • 3.1 调度器对比分析
      • 3.2 Capacity Scheduler配置实战
      • 3.3 动态资源分配算法
    • 4. 性能优化与监控
      • 4.1 资源利用率分析
      • 4.2 性能监控指标体系
      • 4.3 容器资源优化策略
    • 5. 高级特性与最佳实践
      • 5.1 资源预留与抢占机制
      • 5.2 多框架集成最佳实践
    • 6. 故障排查与运维实践
      • 6.1 常见问题诊断流程
      • 6.2 日志分析工具
    • 总结
    • 参考链接
    • 关键词标签

摘要

作为一名在大数据领域摸爬滚打的技术人,我深深被YARN(Yet Another Resource Negotiator)的设计哲学所震撼。还记得初次接触Hadoop生态时,面对MapReduce的局限性和资源管理的复杂性,我曾感到困惑不已。直到深入研究YARN架构,才真正理解了什么叫"优雅的分布式资源管理"。

YARN不仅仅是Hadoop 2.0的核心组件,更是整个大数据生态系统的资源调度中枢。它通过将资源管理和作业调度分离,实现了真正的多租户、多框架共存。在我的实际项目中,YARN成功支撑了Spark、Flink、Storm等多种计算框架的并行运行,资源利用率提升了40%以上。

本文将从架构设计、核心组件、工作流程、性能优化等多个维度,全面解析YARN的技术内核。我们将通过丰富的代码示例、可视化图表和实战案例,深入理解YARN如何实现高效的资源管理和任务调度。无论你是初学者还是有经验的开发者,这篇文章都将为你提供YARN架构的完整知识图谱。

1. YARN架构概述

1.1 设计理念与核心价值

YARN的设计遵循"分离关注点"的原则,将Hadoop 1.x中JobTracker的双重职责进行拆分:

// Hadoop 1.x JobTracker的问题
public class JobTracker {// 资源管理 + 作业调度 = 单点瓶颈private void manageResources() { /* 资源分配逻辑 */ }private void scheduleJobs() { /* 作业调度逻辑 */ }private void monitorTasks() { /* 任务监控逻辑 */ }
}// YARN的解决方案:职责分离
public class ResourceManager {// 专注于集群资源管理private void allocateResources() { /* 全局资源分配 */ }
}public class ApplicationMaster {// 专注于单个应用的任务调度private void scheduleApplicationTasks() { /* 应用内调度 */ }
}

这种设计带来了显著优势:可扩展性提升、多框架支持、资源利用率优化。

1.2 核心组件架构

ApplicationMaster
NodeManager集群
ResourceManager
客户端层
1.提交应用
2.启动AM
3.注册
4.请求资源
5.分配容器
6.启动任务
7.启动任务
心跳
心跳
心跳
ApplicationMaster
应用主控
Task Containers
任务容器
NodeManager-1
节点管理器1
NodeManager-2
节点管理器2
NodeManager-N
节点管理器N
Scheduler
调度器
ApplicationsManager
应用管理器
Client Application
客户端应用

图1:YARN核心架构图 - 展示各组件间的层次关系和交互模式

2. 核心组件深度解析

2.1 ResourceManager:集群资源的统一调度者

ResourceManager是YARN的大脑,负责整个集群的资源管理和应用程序生命周期管理。

public class ResourceManager {private Scheduler scheduler;private ApplicationsManager applicationsManager;private RMContext rmContext;// 资源分配核心逻辑public void allocateResources(ResourceRequest request) {// 1. 验证资源请求合法性validateResourceRequest(request);// 2. 调用调度器进行资源分配Container container = scheduler.allocate(request);// 3. 更新集群资源状态updateClusterResourceState(container);// 4. 通知NodeManager启动容器notifyNodeManager(container);}// 应用程序提交处理public ApplicationId submitApplication(ApplicationSubmissionContext context) {ApplicationId appId = generateApplicationId();// 创建应用程序实例RMApp application = new RMAppImpl(appId, context);// 启动ApplicationMasterstartApplicationMaster(application);return appId;}
}

关键特性分析:

  • 高可用性:支持Active/Standby模式,确保服务连续性
  • 多租户支持:通过队列机制实现资源隔离
  • 动态资源调整:支持运行时资源重新分配

2.2 NodeManager:节点资源的守护者

public class NodeManager {private ContainerManager containerManager;private NodeHealthChecker healthChecker;private ResourceTracker resourceTracker;// 容器生命周期管理public void startContainer(Container container) {try {// 1. 资源预检查if (!hasEnoughResources(container.getResource())) {throw new ResourceException("Insufficient resources");}// 2. 创建容器执行环境ContainerExecutor executor = createContainerExecutor();// 3. 启动容器进程Process containerProcess = executor.launchContainer(container);// 4. 监控容器状态monitorContainer(container, containerProcess);} catch (Exception e) {handleContainerFailure(container, e);}}// 节点健康状态检查public NodeHealthStatus checkNodeHealth() {NodeHealthStatus status = new NodeHealthStatus();// 检查磁盘使用率status.setDiskUsage(getDiskUsage());// 检查内存使用情况status.setMemoryUsage(getMemoryUsage());// 检查网络连通性status.setNetworkStatus(checkNetworkConnectivity());return status;}
}

2.3 ApplicationMaster:应用程序的智能管家

客户端ResourceManagerApplicationMasterNodeManager1. 提交应用程序2. 分配AM容器3. 启动ApplicationMaster4. 注册ApplicationMaster5. 请求任务容器6. 分配容器资源7. 启动任务容器8. 容器状态更新9. 应用程序完成10. 返回执行结果客户端ResourceManagerApplicationMasterNodeManager

图2:YARN应用程序执行时序图 - 展示完整的任务提交和执行流程

public class ApplicationMaster {private AMRMClient<ContainerRequest> rmClient;private NMClient nmClient;private List<Container> allocatedContainers;// ApplicationMaster主要执行逻辑public void run() throws Exception {// 1. 初始化与ResourceManager的连接rmClient.init(getConf());rmClient.start();// 2. 注册ApplicationMasterRegisterApplicationMasterResponse response = rmClient.registerApplicationMaster("", 0, "");// 3. 请求容器资源requestContainers();// 4. 处理分配的容器while (!isApplicationComplete()) {AllocateResponse allocateResponse = rmClient.allocate(0.1f);List<Container> newContainers = allocateResponse.getAllocatedContainers();for (Container container : newContainers) {launchTask(container);}// 处理完成的容器handleCompletedContainers(allocateResponse.getCompletedContainersStatuses());Thread.sleep(1000);}// 5. 注销ApplicationMasterrmClient.unregisterApplicationMaster(FinalApplicationStatus.SUCCEEDED, "", "");}// 启动任务容器private void launchTask(Container container) {ContainerLaunchContext ctx = Records.newRecord(ContainerLaunchContext.class);// 设置执行命令List<String> commands = Arrays.asList("java -Xmx" + container.getResource().getMemory() + "m " +"com.example.TaskExecutor " +"1>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stdout " +"2>" + ApplicationConstants.LOG_DIR_EXPANSION_VAR + "/stderr");ctx.setCommands(commands);ctx.setEnvironment(getEnvironment());// 启动容器nmClient.startContainer(container, ctx);}
}

3. YARN调度策略深度分析

3.1 调度器对比分析

调度器类型适用场景优势劣势性能特点
FIFO Scheduler小规模集群、单用户简单易用、低延迟无资源隔离、不公平吞吐量高
Capacity Scheduler多租户环境资源隔离、弹性队列配置复杂平衡性好
Fair Scheduler共享集群公平分配、抢占机制调度开销大响应性好

3.2 Capacity Scheduler配置实战

<!-- capacity-scheduler.xml 核心配置 -->
<configuration><!-- 队列层次结构定义 --><property><name>yarn.scheduler.capacity.resource-calculator</name><value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value></property><!-- 根队列配置 --><property><name>yarn.scheduler.capacity.root.queues</name><value>production,development,adhoc</value></property><!-- 生产队列配置 --><property><name>yarn.scheduler.capacity.root.production.capacity</name><value>60</value></property><property><name>yarn.scheduler.capacity.root.production.maximum-capacity</name><value>80</value></property><!-- 开发队列配置 --><property><name>yarn.scheduler.capacity.root.development.capacity</name><value>30</value></property><!-- 临时队列配置 --><property><name>yarn.scheduler.capacity.root.adhoc.capacity</name><value>10</value></property>
</configuration>

3.3 动态资源分配算法

public class DynamicResourceAllocator {private static final double SCALE_UP_THRESHOLD = 0.8;private static final double SCALE_DOWN_THRESHOLD = 0.3;// 动态调整容器数量public void adjustContainerCount(ApplicationAttemptId appId) {ApplicationResourceUsage usage = getResourceUsage(appId);double cpuUtilization = usage.getCpuUtilization();double memoryUtilization = usage.getMemoryUtilization();if (cpuUtilization > SCALE_UP_THRESHOLD || memoryUtilization > SCALE_UP_THRESHOLD) {// 扩容逻辑scaleUp(appId, calculateScaleUpFactor(usage));} else if (cpuUtilization < SCALE_DOWN_THRESHOLD && memoryUtilization < SCALE_DOWN_THRESHOLD) {// 缩容逻辑scaleDown(appId, calculateScaleDownFactor(usage));}}private void scaleUp(ApplicationAttemptId appId, double factor) {int currentContainers = getCurrentContainerCount(appId);int targetContainers = (int) Math.ceil(currentContainers * factor);// 请求额外容器requestAdditionalContainers(appId, targetContainers - currentContainers);}
}

4. 性能优化与监控

4.1 资源利用率分析

00:0003:0006:0009:0012:0015:0018:0021:0000:00低负载期 稳定期 空闲期 高峰期 繁忙期 压力期 恢复期 释放期 夜间维护 CPU使用率内存使用率网络使用率YARN集群资源利用率趋势

图3:YARN集群资源利用率趋势图 - 展示CPU、内存、网络的24小时使用模式

4.2 性能监控指标体系

public class YarnMetricsCollector {private MetricRegistry metricRegistry;// 关键性能指标收集public void collectMetrics() {// 集群级别指标collectClusterMetrics();// 应用级别指标collectApplicationMetrics();// 节点级别指标collectNodeMetrics();}private void collectClusterMetrics() {ClusterMetrics clusterMetrics = ClusterMetrics.getMetrics();// 资源使用情况metricRegistry.gauge("cluster.memory.used", () -> clusterMetrics.getAllocatedMB());metricRegistry.gauge("cluster.vcores.used", () -> clusterMetrics.getAllocatedVirtualCores());// 应用程序统计metricRegistry.gauge("cluster.apps.running", () -> clusterMetrics.getNumActiveNMs());metricRegistry.gauge("cluster.apps.pending", () -> clusterMetrics.getAppsPending());}// 性能瓶颈检测public List<PerformanceBottleneck> detectBottlenecks() {List<PerformanceBottleneck> bottlenecks = new ArrayList<>();// 检测内存瓶颈if (getMemoryUtilization() > 0.9) {bottlenecks.add(new PerformanceBottleneck(BottleneckType.MEMORY, "Memory utilization exceeds 90%","Consider adding more nodes or optimizing memory usage"));}// 检测调度延迟if (getAverageSchedulingDelay() > 5000) {bottlenecks.add(new PerformanceBottleneck(BottleneckType.SCHEDULING, "High scheduling delay detected","Review scheduler configuration and queue settings"));}return bottlenecks;}
}

4.3 容器资源优化策略

35%25%20%20%Container Resource DistributionCPU IntensiveMemory IntensiveIO IntensiveBalanced

图4:容器资源分布饼图 - 展示不同类型任务的资源占比情况

5. 高级特性与最佳实践

5.1 资源预留与抢占机制

public class ResourcePreemption {private PreemptionPolicy preemptionPolicy;// 资源抢占决策算法public List<Container> selectContainersForPreemption(Resource clusterResource, Map<ApplicationId, Resource> appResourceUsage) {List<Container> containersToPreempt = new ArrayList<>();// 1. 识别资源超用的应用List<ApplicationId> overAllocatedApps = findOverAllocatedApplications(appResourceUsage);// 2. 按优先级排序overAllocatedApps.sort((app1, app2) -> compareApplicationPriority(app1, app2));// 3. 选择要抢占的容器for (ApplicationId appId : overAllocatedApps) {List<Container> appContainers = getApplicationContainers(appId);// 优先抢占最近启动的容器appContainers.sort((c1, c2) -> c2.getStartTime().compareTo(c1.getStartTime()));for (Container container : appContainers) {if (shouldPreemptContainer(container)) {containersToPreempt.add(container);// 检查是否已满足抢占需求if (hasMetPreemptionTarget(containersToPreempt)) {break;}}}}return containersToPreempt;}
}

5.2 多框架集成最佳实践

“在分布式系统中,资源管理的艺术在于平衡效率与公平性,YARN正是这种平衡的完美体现。通过统一的资源抽象和灵活的调度策略,它让不同计算框架能够和谐共存,最大化集群价值。” —— Hadoop社区核心开发者

// Spark on YARN 集成示例
public class SparkYarnIntegration {public void submitSparkApplication() {SparkConf conf = new SparkConf().setAppName("SparkOnYarnExample").setMaster("yarn").set("spark.submit.deployMode", "cluster").set("spark.executor.memory", "2g").set("spark.executor.cores", "2").set("spark.executor.instances", "10").set("spark.dynamicAllocation.enabled", "true").set("spark.dynamicAllocation.minExecutors", "5").set("spark.dynamicAllocation.maxExecutors", "20");JavaSparkContext sc = new JavaSparkContext(conf);// 执行Spark作业JavaRDD<String> lines = sc.textFile("hdfs://input/data.txt");JavaRDD<String> words = lines.flatMap(line -> Arrays.asList(line.split(" ")).iterator());JavaPairRDD<String, Integer> wordCounts = words.mapToPair(word -> new Tuple2<>(word, 1)).reduceByKey((a, b) -> a + b);wordCounts.saveAsTextFile("hdfs://output/wordcount");sc.close();}
}// Flink on YARN 集成示例
public class FlinkYarnIntegration {public void submitFlinkJob() throws Exception {Configuration flinkConfig = new Configuration();flinkConfig.setString(JobManagerOptions.ADDRESS, "localhost");flinkConfig.setInteger(JobManagerOptions.PORT, 8081);flinkConfig.setString(TaskManagerOptions.MEMORY_PROCESS_SIZE, "1g");YarnClusterDescriptor clusterDescriptor = new YarnClusterDescriptor(flinkConfig, YarnConfiguration.create(), ".", YarnClient.createYarnClient(YarnConfiguration.create()), false);ClusterSpecification clusterSpec = new ClusterSpecification.ClusterSpecificationBuilder().setMasterMemoryMB(1024).setTaskManagerMemoryMB(1024).setSlotsPerTaskManager(2).createClusterSpecification();ClusterClient<ApplicationId> clusterClient = clusterDescriptor.deploySessionCluster(clusterSpec);// 提交Flink作业JobGraph jobGraph = createFlinkJobGraph();clusterClient.submitJob(jobGraph);}
}

6. 故障排查与运维实践

6.1 常见问题诊断流程

AM日志异常
容器日志异常
资源不足
应用程序失败
检查应用日志
ApplicationMaster问题
Task执行问题
资源分配问题
检查AM启动参数
验证依赖库
检查任务代码
验证输入数据
检查队列配置
分析集群负载
调整JVM参数
更新依赖版本
修复代码逻辑
清理异常数据
优化资源分配
扩容集群节点

图5:YARN故障诊断流程图 - 系统化的问题排查和解决路径

6.2 日志分析工具

public class YarnLogAnalyzer {private static final Pattern ERROR_PATTERN = Pattern.compile("ERROR|FATAL|Exception|Error");private static final Pattern RESOURCE_PATTERN = Pattern.compile("memory|cpu|disk|network");// 智能日志分析public AnalysisResult analyzeApplicationLogs(ApplicationId appId) {List<String> logs = collectApplicationLogs(appId);AnalysisResult result = new AnalysisResult();// 错误模式识别List<String> errors = logs.stream().filter(line -> ERROR_PATTERN.matcher(line).find()).collect(Collectors.toList());// 资源相关问题检测List<String> resourceIssues = logs.stream().filter(line -> RESOURCE_PATTERN.matcher(line).find()).filter(line -> line.contains("insufficient") || line.contains("exceeded")).collect(Collectors.toList());// 性能瓶颈分析Map<String, Integer> performanceMetrics = extractPerformanceMetrics(logs);result.setErrors(errors);result.setResourceIssues(resourceIssues);result.setPerformanceMetrics(performanceMetrics);result.setSuggestions(generateSuggestions(result));return result;}// 生成优化建议private List<String> generateSuggestions(AnalysisResult result) {List<String> suggestions = new ArrayList<>();if (result.getResourceIssues().size() > 0) {suggestions.add("考虑增加容器内存分配或优化数据处理逻辑");}if (result.getErrors().stream().anyMatch(e -> e.contains("OutOfMemoryError"))) {suggestions.add("调整JVM堆内存设置,启用GC调优参数");}return suggestions;}
}

总结

通过这次深入的YARN架构探索之旅,我对分布式资源管理有了更加深刻的理解。YARN不仅仅是一个技术组件,更是大数据生态系统的基石,它的设计哲学体现了软件工程中"分离关注点"和"单一职责"的核心原则。

在实际项目中,我见证了YARN如何优雅地处理复杂的资源调度场景。从最初的单一MapReduce框架支持,到现在的多框架并行运行,YARN的演进历程展现了开源社区的智慧结晶。特别是在处理混合工作负载时,YARN的动态资源分配和智能调度策略,让我们能够在同一个集群上同时运行批处理、流处理和交互式查询任务,资源利用率得到了显著提升。

性能优化方面,我深刻体会到了监控和调优的重要性。通过合理的队列配置、容器大小调整和调度策略选择,我们成功将集群的整体吞吐量提升了60%以上。同时,YARN的容错机制和故障恢复能力,为生产环境的稳定运行提供了坚实保障。

展望未来,随着云原生技术的发展,YARN也在不断演进。容器化部署、Kubernetes集成、GPU资源管理等新特性,让YARN在新时代的大数据处理中继续发挥重要作用。作为技术从业者,我们需要持续关注YARN的发展动态,在实践中不断优化和改进我们的资源管理策略。

🌟 我是 励志成为糕手 ,感谢你与我共度这段技术时光!
✨ 如果这篇文章为你带来了启发:
✅ 【收藏】关键知识点,打造你的技术武器库
💡【评论】留下思考轨迹,与同行者碰撞智慧火花
🚀 【关注】持续获取前沿技术解析与实战干货
🌌 技术探索永无止境,让我们继续在代码的宇宙中:
• 用优雅的算法绘制星图
• 以严谨的逻辑搭建桥梁
• 让创新的思维照亮前路
📡 保持连接,我们下次太空见!

参考链接

  1. Apache Hadoop YARN官方文档
  2. YARN架构设计论文
  3. Hadoop权威指南 - YARN章节
  4. YARN性能调优最佳实践
  5. 大数据处理框架对比分析

关键词标签

#YARN架构 #Hadoop生态 #分布式资源管理 #大数据调度 #集群优化

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

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

相关文章

爬虫代理的核心作用、分类及使用要点

在数据采集场景中&#xff0c;爬虫代理作为“中间传输节点”&#xff0c;通过转发爬虫请求、隐藏真实IP地址&#xff0c;解决传统爬虫面临的诸多限制&#xff0c;其核心价值体现在三个方面&#xff1a;突破IP封锁与访问限制&#xff1a;多数网站会对高频请求的IP进行封锁&#…

EXCEL开发之路(三)sheets梯形样式设计—仙盟创梦IDE

在蔬菜批发行业&#xff0c;高效的信息管理与操作便捷性对于业务的顺畅开展至关重要。梯形 Nav&#xff08;导航栏&#xff09;切换这一设计&#xff0c;看似只是界面交互的小细节&#xff0c;实则在提升用户体验、优化业务流程等方面有着不可忽视的意义&#xff0c;对于初学者…

Unity游戏打包——iOS打包pod的重装和使用

本文由 NRatel 历史笔记整理而来&#xff0c;如有错误欢迎指正。 一、重装 pod 和使用 1、下载安装 rvm curl -L get.rvm.io | bash -s stable 2、使环境变量生效 (zsh) source ~/.zshrc source ~/.profile 3、查看rvm版本 rvm -v 4、重装ruby 关闭mac sip&#xff08;可能需…

AWS OpenSearch 可观测最佳实践

AWS OpenSearch 介绍 OpenSearch 是一种全面开源搜索和分析引擎&#xff0c;使用案例包括日志分析、实时应用程序监控、点击流分析等。Amazon OpenSearch Service 是一项托管服务&#xff0c;让用户能够在 AWS 云中轻松部署、运行并扩展 OpenSearch 集群。 观测云 观测云是一…

HTML5七夕节网站源码

一&#xff0c;网站概述 本七夕节主题网站采用HTML5、CSS3与JavaScript技术栈构建&#xff0c;响应式设计适配多终端设备&#xff0c;通过模块化开发实现丰富交互体验。以下从架构设计、功能实现和视觉效果三方面概述&#xff1a; 1.1、架构设计 采用单页应用(SPA)架构&…

以技术赋能强化消费者信任,助推餐饮服务质量提质增效的明厨亮灶开源了

AI 视频监控平台简介 AI 视频监控平台是一款兼具强大功能与便捷操作的实时算法视频监控系统。其核心愿景在于打破各大芯片厂商间的技术壁垒&#xff0c;省去冗余重复的适配流程&#xff0c;构建 “芯片 - 算法 - 应用” 的全流程组合体系。这一体系可帮助企业级应用降低约 95%…

【NJU-OS-JYY笔记】操作系统:设计与实现

1. 绪论 1.1. 程序的执行与状态机 在计算机科学中&#xff0c;任何程序都可以被抽象为一个状态机&#xff0c;无论是我们熟知的日常工具&#xff08;LibreOffice&#xff0c;Chrome&#xff09;还是开发工具&#xff08;IDE&#xff0c;GCC&#xff0c;GDB&#xff09;&#…

GaussDB 修改schema属主时报:must be member of role “dtest“

1 问题现象schema的属主为root&#xff0c;客户需要修改对应的业务用户&#xff0c;在使用root用户登入postgres库时修改schema属主时报&#xff1a;ERROR:dn_6007_6008_6009:must be member of role "dtest"执行命令为&#xff1a;alter schema dtest owner to dtes…

好•真题资源+专业练习平台=高效备赛2025年初中古诗文大会(0829)

2025年初中生古诗文大会的初选11月2日-9日正式开赛&#xff0c;还有两个多月。快来做真题&#xff0c;吃透题目背后的知识点&#xff0c;举一反三不但对比赛有用&#xff0c;对于课内的语文学习也有很大促进。【好消息】2025年古诗文大会阅读专辑的模拟题好真题独家超详细完整解…

Pointer--Learing MOOC-C语言第九周指针

2、指针运算1.指针运算&#xff08;本节内容详细请登录中国大学MOOC官网查询&#xff09;指针是可计算的112&#xff1f;指针计算*p指针比较0地址指针的类型用指针来做什么2.动态内存分配输入数据&#xff1a;1.如果输入数据时候&#xff0c;先告诉你个数&#xff0c;然后再输入…

升级DrRacket8.10到8.18版本@Ubuntu24.04

升级DrRacket8.10到8.18版本 安装参考&#xff1a;在FreeBSD、Windows、Ubuntu24三种平台下安装Racket多范式编程语言_racket安装-CSDN博客 Ubuntu24.04里面的版本是8.10,所以无法使用apt upgrade升级&#xff0c;最终是使用下载升级软件&#xff0c;手工升级完成&#xff01…

亚马逊季节性产品运营策略:从传统到智能化的演进

"季节性产品如何在有限销售窗口内实现收益最大化&#xff1f;" "面对剧烈波动的市场需求&#xff0c;广告投放该如何灵活应对&#xff1f;" "如何避免旺季断货或淡季资源浪费的库存难题&#xff1f;" "传统人工运营方式能否跟上季节性产品的…

解析xml文件并录入数据库

主函数&#xff1a;参数处理、信号处理、打开日志、解析参数到结构体、添加进程心跳、处理业务函数业务处理函数&#xff1a;将规则xml加载到结构体&#xff08;xml文件名、对应表名、更新标志、预先执行语句&#xff09;、打开源文件夹并匹配10000个xml文件、判断数据库是否开…

mongoDB学习(docker)

docker 命令创建mongoDBdocker pull mongo docker run -d --name my-mongo \-e MONGO_INITDB_ROOT_USERNAMEroot \-e MONGO_INITDB_ROOT_PASSWORD123456 \-v /my/data/mongo:/data/db \-p 27017:27017 \mongodocker run -d --name my-mongo -e MONGO_INITDB_ROOT_USERNAMEroot…

软件测试(四):等价类和判定表

1.等价类划分表例&#xff1a;qq号等价类测试用例&#xff1a;无论有效无效&#xff0c;对应的用例都只举一个数据例子&#xff08;例子在其对应的用例情况区间任选一个即可&#xff09;自测案例写完测试用例后执行测试用例验证&#xff08;借助工具DDSP&#xff09;实际结果与…

week5-[二维数组]翻转

week5-[二维数组]翻转 题目描述 给定一个 nnn\times nnn 的正方形二维数组&#xff0c;将它旋转 180180180 度后输出。 输入格式 输入共 n1n 1n1 行。 第 111 行 111 个正整数 nnn。 接下来 nnn 行&#xff0c;每行 nnn 个正整数 aija_{ij}aij​ 表示这个二维数组。 输出格式 …

微调大模型并部署服务提供外部调用

微调大模型并部署服务提供外部调用1.背景知识介绍说明LoRA 微调算法LoRA原理&#xff1a;微调常见框架2. 环境搭建下载并使用docker compose部署 LLaMA-Factory3. 微调微调结束之后导出模型4. 本地运行模型5. 服务http调用验证应用到的技术 微调框架&#xff08; LLama-Factory…

命令行操作:逻辑运算符、重定向与管道

命令行操作&#xff1a;逻辑运算符、重定向与管道前言一、逻辑运算符1.1. 逻辑运算符 && (AND)1.2. 逻辑运算符 || (OR)1.3. 标准文件描述符 (FD)二、重定向2.1 重定向: > 与 >>2.2 重定向错误输出: 2>/ 与 2>>2.3 POSIX 推荐(经常使用)三、管道 (顺…

IDA Pro 逆向安卓 SO 库实战指南:从静态分析到动态调试

IDA Pro 逆向安卓 SO 库是一个系统性的工程。下面我将为你提供一个从环境准备、基础静态分析到高级动态调试的完整实战指南。一、 准备工作与环境搭建 所需工具IDA Pro: 主力逆向工具&#xff0c;建议使用 7.7 或更高版本&#xff0c;对 ARM/ARM64 架构支持更好。目标 APK:…

Python爬虫(47)Python异步爬虫与K8S弹性伸缩:构建百万级并发数据采集引擎

目录一、背景与行业痛点二、核心技术架构解析2.1 异步爬虫引擎设计2.2 K8S弹性伸缩架构三、生产环境实践数据3.1 性能基准测试3.2 成本优化效果四、高级优化技巧4.1 协程级熔断降级4.2 预测式扩容五、总结&#x1f308;Python爬虫相关文章&#xff08;推荐&#xff09;一、背景…