2024任务驱动Hadoop应用讲课提纲

文章目录

  • 为何采用任务驱动?
  • 任务驱动Hadoop应用课程概述
  • 项目一:搭建Hadoop集群
    • 任务1:搭建完全分布式Hadoop集群
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务2:搭建高可用Hadoop集群(HA模式)
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
  • 项目二:HDFS操作实践
    • 任务1:使用HDFS Shell命令行操作
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务2:通过Java API访问HDFS
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
  • 项目三:MapReduce实战大数据处理
    • 任务1:词频统计
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务2:统计成绩总分和平均分
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务3:学生信息排序
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务4:网址去重
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高
    • 任务5:实现TopN
      • 1. 思路解析
      • 2. 编程实现
      • 3. 知识点讲解
      • 4. 总结提高

为何采用任务驱动?

  • 采用任务驱动的教学方法设计Hadoop相关课程,旨在通过实际项目操作和案例分析,使学员在解决具体问题的过程中深入理解并掌握Hadoop集群搭建、HDFS文件系统操作以及MapReduce编程模型等关键技术。这种方式不仅有助于学员理论联系实际,提升技术应用能力,还能激发其主动学习与探索的热情,培养独立解决问题的技能。

  • 任务驱动教学模式强调动手实践,每个任务都对应着一个典型的应用场景,如搭建完全分布式和高可用Hadoop集群,能够帮助学员从架构层面理解分布式系统的稳定性和可靠性;通过HDFS Shell命令行及Java API操作实践,增强对HDFS工作原理和API接口使用的熟悉度;而MapReduce实战任务则让学员亲身体验大数据处理流程,掌握如何根据业务需求设计和实现高效的数据处理算法。这种教学方式不仅能锻炼学员的工程实践能力,更能确保他们在面对真实世界的大数据挑战时具备足够的技术储备和应对策略。

任务驱动Hadoop应用课程概述

  • 任务驱动的Hadoop应用课程是一门以实战项目为核心,通过一系列具体任务引导学员掌握大数据处理技术的课程。该课程围绕Hadoop生态系统,从搭建基础的完全分布式集群起步,逐步深入到实现高可用集群配置,并通过实践操作熟悉HDFS文件系统管理和MapReduce编程模型。

  • 在项目实践中,学员首先需了解并亲手构建Hadoop集群,包括安装JDK、配置关键组件如NameNode和ResourceManager等,以及设置相关配置文件确保集群稳定运行。进而,课程将挑战更高阶的集群部署模式——高可用(HA)模式,让学员学习如何借助ZooKeeper或共享存储系统实现NameNode的冗余备份与故障切换,提升集群整体的可靠性和稳定性。

  • 同时,课程着重培养学员对HDFS的操作能力,通过实战演练HDFS Shell命令行工具的各项基本操作,如创建目录、上传下载文件、查看文件信息等,并进一步通过Java API实现在程序中对HDFS进行读写访问,为后续的大数据处理奠定基础。

  • 在MapReduce部分,课程设计了一系列典型的实战任务,如词频统计、成绩计算、排序算法及TopN问题等,使学员能够在解决实际业务问题的过程中熟练运用MapReduce编程模型,理解其工作原理并掌握数据分片、映射、归约等关键环节的设计与优化技巧。

  • 总之,本课程采用任务驱动的教学方式,旨在帮助学员从理论到实践全面掌握Hadoop平台及其生态系统的使用,培养他们解决大规模数据处理问题的能力,为未来从事大数据分析、挖掘及架构设计等相关工作做好充分准备。

项目一:搭建Hadoop集群

任务1:搭建完全分布式Hadoop集群

1. 思路解析

  • 学习和理解Hadoop完全分布式模式的架构组成,包括NameNode、DataNode以及ResourceManager等关键组件的角色与功能。
  • 规划硬件资源分配,选择合适的Hadoop版本进行部署。

2. 编程实现

  • 安装Java运行环境(JDK)作为Hadoop的基础支撑。
  • 下载并安装指定版本的Hadoop软件包至各个节点服务器。
  • 根据集群规模配置相关文件,如hadoop-env.sh, core-site.xml, hdfs-site.xml, yarn-site.xml等,确保各节点间可以正常通信。
  • 分别在主节点上格式化HDFS并启动NameNode服务,在从节点上启动DataNode服务,在YARN相关的节点上启动ResourceManager和NodeManager服务。

3. 知识点讲解

  • 完全分布式Hadoop集群的构成原理及其组件交互机制。
  • Hadoop核心配置参数的作用及设置方法。

4. 总结提高

  • 通过搭建完全分布式Hadoop集群,学员将深入理解集群架构及其组件协同工作原理,掌握关键配置参数的作用与设置方法,从而具备独立部署和管理大型分布式系统的能力。此任务有助于提升学员对大数据基础设施的实战操控技能及问题解决能力。

任务2:搭建高可用Hadoop集群(HA模式)

1. 思路解析

  • 掌握Hadoop高可用(High Availability, HA)模式的概念,了解Active NameNode与Standby NameNode如何协同工作以提高系统稳定性。
  • 规划和配置多NameNode高可用集群,包括共享存储系统(如Quorum Journal Manager或NFS)的设置。

2. 编程实现

  • 在现有的完全分布式Hadoop集群基础上,进一步配置和启用高可用特性。
  • 配置ZooKeeper仲裁服务(如果使用QJM)或者共享存储系统。
  • 更新相关配置文件,如hdfs-site.xml中的HA相关属性,并重启所有Hadoop服务以应用新配置。

3. 知识点讲解

  • Hadoop HA模式的工作原理及优势。
  • 高可用集群中NameNode切换机制的详解。
  • ZooKeeper或共享存储系统在Hadoop HA中的作用与配置要点。

4. 总结提高

  • 在完成搭建Hadoop高可用集群任务后,学员将深入理解HA模式的工作原理和优势,熟练掌握NameNode切换机制及ZooKeeper或共享存储系统的配置方法。通过实战操作,学员能够提升对大数据环境高可用架构的设计与运维能力,确保在实际生产环境中实现Hadoop服务的稳定可靠运行。

通过以上两个任务的学习与实践,学员将深入掌握Hadoop集群的两种重要部署方式——完全分布式模式和高可用模式。不仅能够熟练搭建这两种类型的集群,还能理解和处理其中的关键配置与运维问题,为后续的大数据处理与分析提供稳定可靠的平台支持。

项目二:HDFS操作实践

任务1:使用HDFS Shell命令行操作

1. 思路解析

  • 理解并掌握HDFS的Shell命令行工具,它提供了一种与Linux风格相似的命令接口,用于对分布式文件系统进行各种基础和高级管理操作。

2. 编程实现

  • 学习并熟练执行以下基本HDFS shell命令:
    • 创建目录:hdfs dfs -mkdir
    • 上传本地文件到HDFS:hdfs dfs -put
    • 查看HDFS目录或文件信息:hdfs dfs -ls, hdfs dfs -du
    • 下载HDFS上的文件到本地:hdfs dfs -get
    • 查看文件内容:hdfs dfs -cat
    • 删除文件或目录:hdfs dfs -rm
    • 更改文件权限和所有权:hdfs dfs -chmod, hdfs dfs -chown

3. 知识点讲解

  • HDFS Shell命令的完整列表及各命令参数详解。
  • 使用Shell命令处理HDFS中数据的常见场景与最佳实践。

4. 总结提高

  • 通过掌握HDFS Shell命令行操作,学员能够实现对分布式文件系统的高效管理,包括创建目录、上传下载文件、查看信息、内容读取、删除及权限修改等基本和高级功能。熟悉这些命令不仅有助于日常运维工作,更能在实际场景中灵活运用最佳实践,有效提升数据处理效率与系统管理水平。

任务2:通过Java API访问HDFS

1. 思路解析

  • 掌握如何在Java应用程序中集成Hadoop的FileSystem API来操作HDFS。
  • 实现Java代码以完成与shell命令类似的功能,但通过编程方式调用API实现。

2. 编程实现

  • 引入Hadoop相关的Java库,并编写Java类,实现如下功能:
    • 初始化FileSystem实例连接到HDFS集群。
    • 创建、读取、写入和删除HDFS中的文件和目录。
    • 获取HDFS文件系统的元数据信息(如文件大小、修改时间等)。

3. 知识点讲解

  • 如何导入和初始化Hadoop FileSystem API。
  • 常用HDFS Java API类和方法的详细介绍,例如:
    • org.apache.hadoop.conf.Configuration
    • org.apache.hadoop.fs.FileSystem
    • org.apache.hadoop.fs.Path
    • org.apache.hadoop.fs.FSDataInputStream
    • org.apache.hadoop.fs.FSDataOutputStream

4. 总结提高

  • 通过任务2,学员将学会在Java程序中运用Hadoop FileSystem API直接访问和操作HDFS,实现文件系统管理的自动化与程序化。掌握核心API类及方法的使用,有助于开发更为高效、灵活的大数据处理应用,并加深对HDFS底层工作机制的理解,提升编程实践能力。

通过以上两个任务的学习与实践,学员不仅能熟悉HDFS的基本操作,还能深入理解并灵活运用HDFS的Java API进行更复杂的程序化数据处理。这将为后续开发基于Hadoop的大数据应用奠定坚实的基础。

项目三:MapReduce实战大数据处理

任务1:词频统计

1. 思路解析

  • 使用MapReduce模型对大规模文本数据进行词频统计,通过Mapper阶段将输入文本分割成单词,并为每个单词生成键值对(<word, 1>),Reducer阶段汇总所有相同的单词并计算其出现次数。

2. 编程实现

  • 在Mapper类中实现map()方法,读取输入行,分词并输出键值对。
  • 在Reducer类中实现reduce()方法,接收Mapper输出的中间结果,对同一单词的计数进行累加。

3. 知识点讲解

  • MapReduce编程模型及工作流程。
  • Hadoop Streaming支持下使用不同语言编写Mapper和Reducer。
  • 输入格式定义(TextInputFormat)与输出格式定义(TextOutputFormat)。

4. 总结提高

  • 通过词频统计任务,学员将深入实践MapReduce编程模型,理解其并行处理大规模文本数据的工作原理和流程。在编写Mapper和Reducer阶段,掌握如何实现单词分割、键值对生成及计数累加等关键操作。同时,熟悉Hadoop Streaming的使用,了解如何以不同语言编写处理逻辑,并熟练设置输入输出格式,从而提升大数据处理与分析的实战技能,为后续复杂的数据挖掘和分析项目打下坚实基础。

任务2:统计成绩总分和平均分

1. 思路解析

  • 将学生各科成绩作为独立的记录输入到MapReduce作业中,Mapper阶段读取每条记录并计算单个学生的总分。
  • Reducer阶段接收各个学生的总分,进一步计算所有学生的总分数之和以及平均分。

2. 编程实现

  • Mapper负责解析每条记录,计算单个学生的总分,并以学生ID作为key输出键值对(<student_id, total_score>)。
  • Reducer负责对同一个学生的所有键值对求和,得到所有学生的总分数。在Reducer结束后,利用全局变量或Hadoop计数器统计总人数,从而计算平均分。

3. 知识点讲解

  • 处理非文本数据时自定义InputFormat和RecordReader。
  • 利用Combiner优化Reducer阶段的数据处理。
  • 使用Hadoop计数器收集统计数据。

4. 总结提高

  • 在统计成绩总分和平均分的任务中,学员将通过MapReduce编程实现对结构化数据的高效处理。通过Mapper阶段计算单个学生的总分,并运用键值对输出以实现Reducer阶段的数据聚合。在此过程中,学员将掌握非文本数据InputFormat和RecordReader自定义方法,以及利用Combiner优化数据预处理的技术要点。此外,借助Hadoop计数器收集统计数据,学员能够准确计算学生总分数之和及平均分,从而提升对大数据环境下复杂统计问题的解决能力,为后续数据分析与挖掘任务积累实践经验。

任务3:学生信息排序

1. 思路解析

  • 根据需求,分别按年龄排序和按性别+年龄排序。
  • 对于简单的属性排序,可以直接在MapReduce中使用KeyComparator进行排序。

2. 编程实现

  • 按年龄排序:将学生信息中的年龄作为Key的一部分,保证在Shuffle阶段根据Key进行排序。
  • 按性别+年龄排序:组合性别和年龄信息作为复合Key,确保排序正确性。

3. 知识点讲解

  • 自定义Partitioner对数据分区策略的影响。
  • 实现自定义WritableComparable用于复合Key的排序。
  • 利用SortComparator和GroupComparator控制数据在Reducer前的排序行为。

4. 总结提高

  • 学员通过实现对学生信息的排序功能,深化了对MapReduce数据处理流程和自定义组件的理解。首先,针对按年龄和性别+年龄排序需求,掌握如何灵活设计Key以驱动Shuffle阶段的数据分区与排序。在此过程中,学员将学习如何编写自定义Partitioner以适应特定排序需求,并实现复合Key的WritableComparable接口以支持复杂排序场景。此外,通过运用SortComparator和GroupComparator,学员能有效控制Reducer前数据的全局排序行为,从而在实践中提升解决大规模数据排序问题的能力,为今后复杂数据分析任务提供扎实技术基础。

任务4:网址去重

1. 思路解析

  • 输入为一个包含多个网址的列表,目标是找出其中不重复的网址。
  • Mapper直接输出网址作为key-value对(<url, null>)。
  • Reducer按照key进行聚合,仅保留一个唯一的url实例。

2. 编程实现

  • Mapper无需特别逻辑,只需简单输出网址作为key。
  • Reducer只需要处理第一个接收到的key,后续相同key可忽略。

3. 知识点讲解

  • 如何设计简单的Mapper和Reducer来完成特定任务。
  • 使用IdentityReducer简化Reducer过程。

4. 总结提高

  • 在任务4中,学员通过设计并实现网址去重功能,进一步巩固了MapReduce编程模型的应用能力。此任务展示了如何巧妙利用Mapper和Reducer处理数据集中的重复记录,以达到高效去重的目的。学员学习到如何构造简单的键值对(<url, null>),利用Key的唯一性进行数据分区与聚合,在Reducer阶段只需关注第一个出现的Key实例,从而简化处理逻辑。此外,本任务还强调了IdentityReducer在特定场景下的便捷性和实用性,帮助学员理解如何针对不同需求灵活设计和优化MapReduce作业流程,提高对大规模数据处理任务的解决效率与精准度。

任务5:实现TopN

1. 思路解析

  • 针对不同类型的数据(如成绩、访问量等),找到前N名。
  • 可以结合二次MapReduce作业实现,第一次作业计算每个项的总分或总量,第二次作业做全局排序并截取前N个结果。

2. 编程实现

  • 第一次MapReduce作业计算各项得分或数量,Reducer输出排序所需的键值对。
  • 第二次MapReduce作业设置合适的Partitioner和SortComparator,使得Reducer能接收到已部分排序的数据,然后在Reducer内部维护大小为N的堆结构,以此获取Top N结果。

3. 知识点讲解

  • 如何设计多阶段MapReduce作业解决复杂问题。
  • 利用堆数据结构在Reducer内实现TopN算法。
  • 分布式环境下TopN问题的挑战与解决方案。

4. 总结提高

  • 通过任务5实现TopN功能,学员能够掌握设计多阶段MapReduce作业解决复杂问题的方法,理解分布式环境下如何有效进行数据排序与截取前N个结果。在编程实践中,学员不仅学习到如何运用两次MapReduce处理流程,首先计算每项得分或总量,再进行全局排序,还深入实践了自定义Partitioner和SortComparator以优化数据分布及排序过程。此外,本任务强调了堆数据结构在Reducer内部实现TopN算法的关键作用,帮助学员面对分布式环境下的挑战时,能够找到并实施有效的解决方案,从而提升其对大规模数据分析的综合处理能力。

通过以上五个任务的学习与实践,学员可以全面掌握MapReduce在实际场景中的应用,包括文本分析、数据统计、排序操作以及高级问题如TopN等,并了解如何针对具体问题灵活设计和调整MapReduce程序以满足不同的业务需求。

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

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

相关文章

c++编程大师挑战赛-静夜思

静夜思 暂无标签 题目统计 全部提交 时间限制&#xff1a;C/C 1000MS&#xff0c;其他语言 2000MS 内存限制&#xff1a;C/C 256MB&#xff0c;其他语言 512MB 难度&#xff1a;简单 出题人&#xff1a;admin 描述 请在屏幕上输出《静夜思》&#xff0c;每句诗后单独占据1行…

AI模型私人订制

使用AI可以把你的脸换成明星的脸&#xff0c;可以用于直播、录播。 AI换脸1 也可以把视频中明星的脸换成你的脸 AI换脸2 之所以能够替换成功&#xff0c;是因为我们有一个AI人物模型&#xff0c;AI驱动这个模型就可以在录制视频的时候替换指定人物的脸。AI模型从哪里来&…

题目 1669: 求圆的面积

题目很简单&#xff0c;已知半径r&#xff0c;求一个圆的面积是多大。 圆的面积公式&#xff0c;圆周率Π用Pi表示&#xff0c; R为圆的半径&#xff0c;面积为: SPi*(R^2) 输入格式 输入一个半径&#xff0c;浮点类型~ 输出格式 输出它对应的面积大小&#xff0c;…

快速部署supervisord详解

Supervisor是一个用于监控和管理进程的工具。它可以在Unix-like系统中启动、停止、重启和管理后台进程&#xff0c;确保这些进程始终保持运行状态。 yum check-update 更新yum软件包索引 yum install epel-release -y 下载eprl源 yum install supervisor -y 直接yu…

Linux---进程控制

一、进程创建 fork函数 在Linux中fork函数是非常重要的函数&#xff0c;它从已存在进程中创建一个新进程&#xff0c;原进程为父进程 fork函数的功能&#xff1a; 分配新的内存和内核数据结构给子进程将父进程部分数据结构内容拷贝至子进程添加子进程到系统的进程列表中fork返…

Linux环境编程基础

静态库和动态库 静态库和动态库 在实际开发中&#xff0c;我们把通用的函数和类分文件编写&#xff0c;称之为库。在其它的程序中&#xff0c;可以使用库中的函数和类。 一般来说&#xff0c;通用的函数和类不提供源代码文件&#xff08;安全性、商业机密&#xff09;&#x…

说出Servlet的生命周期,并说出Servlet和CGI的区别

Servlet的生命周期可以概括为三个阶段&#xff1a;初始化阶段、处理请求阶段和销毁阶段。 初始化阶段&#xff1a;Servlet在第一次被加载到Web服务器时&#xff0c;服务器会创建一个Servlet实例。然后服务器调用Servlet的init()方法进行初始化操作。这个方法只会在Servlet第一…

【nodejs】前后端身份认证

前后端身份认证 一、web开发模式 服务器渲染&#xff0c;前后端分离。 不同开发模式下的身份认证&#xff1a; 服务端渲染推荐使用Session认证机制前后端分离推荐使用JWT认证机制 二、session认证机制 1.HTTP协议的无状态性 了解HTTP协议的无状态性是进一步学习Session认…

How to Develop Word Embeddings in Python with Gensim

https://machinelearningmastery.com/develop-word-embeddings-python-gensim/ 本教程分为 6 个部分;他们是&#xff1a; 词嵌入 Gensim 库 开发 Word2Vec 嵌入 可视化单词嵌入 加载 Google 的 Word2Vec 嵌入 加载斯坦福大学的 GloVe 嵌入 词嵌入 单词嵌入是一种提供单词的…

【YOLO系列】yolo V1 ,V3,V5,V8 解释

文章目录 yolo V1 模型结构图通道数 的 物理意义是什么&#xff1f;输出 7730 怎么理解&#xff1f;YOLO v1 损失函数LOSS yolo V3yolo V5yolo V8 视频来源&#xff1a;https://www.bilibili.com/video/BV13K411t7Zs/ AI视频小助理 一、YOLO系列的目标检测算法&#xff0c;其中…

python+opencv实现图片/短视频一键去水印

目录 0 前言1 准备工作2 读取图片或视频3 添加回调获取鼠标绘制水印区域4 调用opencv函数5 绘制蒙版主循环6 去水印主循环总结 0 前言 在制作ppt个人文章或者分享图片过程中&#xff0c;经常会遇到一些带有水印的情况&#xff0c;不少人都希望能够去除这些水印&#xff0c;提高…

2024如何成为一名合格的全栈开发者

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 在当今快速发展的技术环境中&#xff0c;对多才多艺和技能熟练的专业人员的需求正在不断增加。 全栈开发人员是一个非常受欢迎的角色。 本文将深入了解什么是全栈…

Ubuntu上如何找到设备,打印串口日志

dmesg 找设备 sudo mincom -s 配置minicom mincom 打印串口日志 PS: Windows上使用MobaXterm / putty / Xshell / SecureCRT等 ubuntu串口的安装和使用&#xff08;usb转串口&#xff09;_ubuntu上如何把usb设备映射到tty-CSDN博客

【Linux】Linux

Linux 文章目录 Linux1. 简介2. 目录结构3. vi/vim 的使用4. 网络配置4.1 配置网络ip地址4.2 配置主机名或ip映射4.3 远程登陆及上传下载 5. 系统管理5.1 service 服务管理&#xff08;CentOS 6 版本&#xff09;5.2 systemctl 服务管理&#xff08;CentOS 7 版本&#xff09;5…

thinkphp6.0升级到8.0

目录 一&#xff1a;升级过程 二&#xff1a;报错处理 最近写的项目需要使用thinkphp8.0&#xff0c;之前的老项目需要从php6.0升级到8.0&#xff0c;特此记录下升级过程。 一&#xff1a;升级过程 查看版本&#xff1a; php think version,我目前的版本是6.1.4 生成thin…

Java项目:103SSM酒店管理系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 酒店管理系统基于SpringSpringMVCMybatis开发&#xff0c;功能简单&#xff0c;可用于毕设或者课程设计。 管理员功能如下&#xff1a; 房间管理住客入住…

图像去雾/图像去雨(matlab/python)

图像去雾和图像去雨是计算机视觉领域的两个重要问题&#xff0c;旨在改善被大气条件或降雨影响而模糊或噪声化的图像质量。这两个技术在很多实际应用中具有广泛的价值&#xff0c;包括无人驾驶、安防监控、航空航天等领域。下面将分点介绍图像去雾和图像去雨的相关内容。 1. 图…

Debezium发布历史40

原文地址&#xff1a; https://debezium.io/blog/2018/09/20/materializing-aggregate-views-with-hibernate-and-debezium/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 使用 Hibernate 和 Debezium 实现聚合…

五、 函数

文章目录 1.函数基础1&#xff09;定义函数2&#xff09;调用函数3&#xff09;函数参数&#xff08;一&#xff09;4&#xff09;调用函数时参数的顺序5&#xff09;函数返回值(一)6&#xff09;函数的文档说明7&#xff09;函数的嵌套调用8&#xff09;局部变量9&#xff09;…

2021-06-25 51蛋骗鸡按键切合LED

缘由ISIS 7 Professional_有问必答-CSDN问答 #include "REG52.h" sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3; void main() {unsigned char Xd0,xz0,cs0;unsigned int wei0;P1255;while(1){if(K10&&Xd0){P10;while(K10);}if(K20&&…