问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

Hadoop的组件MapReduce和HDFS分别是做什么的?

发布网友 发布时间:2022-04-25 15:09

我来回答

4个回答

热心网友 时间:2022-05-02 19:44

hdfs是:hadoop分布式文件系统,主要用于存储和管理数据,而maprece是计算处理框架,主要用于分析处理统计你存在hdfs上的数据集用的

热心网友 时间:2022-05-02 21:02

hdfs 分布式数据存储,对用户是透明的,自带数据检查,备份等
maprece 应用比较广,可以单独使用map,不用rece,也可以2个一起用,2个一起用主要用来统计数据,map做好分片,rece收集结果输出。最多的应用场景是处理非结构化数据,比如大量的日志,然后统计日志

热心网友 时间:2022-05-02 22:36

maprece主要处理 事务,也就是你要做什么事情 。。 。比如分析 数据。

HDFS 是分布式数据存储,主要是存储文件的。自动切片,自动分存

热心网友 时间:2022-05-03 00:28

可以只用一行代码来运行MapRece作业:JobClient.runJon(conf),Job作业运行时参与的四个实体:


     1.JobClient 写代码,配置作业,提交作业。

     2.JobTracker:初始化作业,分配作业,协调作业运行。这是一个java程序,主类是JobTracker。

     3.TaskTracker:运行作业划分后的任务,即分配数据分配上执行Map或Rece任务。

     4.HDFS:保存作业数据、配置信息等,保存作业结果。


Map/Rece 作业总体执行流程:

     代码编写 ----> 作业配置  ---->  作业提交 ----> Map任务分配和执行 ----> 处理中间结果 ---->  Rece任务分配与执行 ---->  输出结果

而对于每个作业的执行,又包含:

     输入准备 ----> 任务执行 ----> 输出结果

作业提交JobClient:

     JobClient的runJob方法产生一个Jobclient实例并调用其submitJob方法,然后runJob开始循环吗,并在循环中调用getTaskCompetionEvents方法,获得TaskCompletionEvent实例,每秒轮询作业进度(后面有介绍进度和状态更新),把进度写到控制台,作业完成后显示作业计数器,若失败,则把错误记录到控制台。


     submitJob方法作业提交的过程:

     1.向JobTracker请求一个新的JobId。

     2.检查作业相关路径,如果路径不正确就会返回错误。

     3.计算作业输入分片及其划分信息。

     4.将作业运行需要的资源(jar文件、配置文件等)复制到Shared HDFS,并

复制多个副本(参数控制,默认值为10)供tasktracker访问,也会将计算的分片复制到HDFS。

     5.调用JobTracker对象的submitJob()方法来真正提交作业,告诉JobTracker作业准备执行。


作业的初始化JobTracker:

     JobTracker收到submitJob方法调用后,会把调用放入到一个内部队列,由作业调度器(Job scheler)进行调度并对其初始化。Job初始化即创建一个作业对象。

     当作业被调度后,JobTracker会创建一个代表这个作业的JobInProgress对象,并将任务和记录信息封装在这个对象中,以便跟踪任务状态和进程。

     初始化过程就是JobInProgress对象的initTasks方法进行初始化的。


     初始化步骤:

          1.从HDFS中读取作业对应的job.split信息,为后面的初始化做好准备。

          2.创建并初始化map和rece任务。根据数据分片信息中的个数确定map task的个数,然后为每个map task生成一个TaskInProgress对象来处理数据分片,先将其放入nonRunningMapCache,以便JobTracker分配任务的时候使用。接下来根据JobConf中的mapred.rece.tasks属性利用setNumReceTasks()方法设置rece task的数量,然后同map task创建方式。

          3.最后就是创建两个初始化task,进行map和rece的初始化。


任务的分配JobTracker:

    消息传递HeartBeat: tasktracker运行一个简单循环定期发送心跳(heartbeat)给JobTracker。由心跳告知JobTracker自己是否存活,同时作为消息通道传递其它信息(请求新task)。作为心跳的一部分,tasktracker会指明自己是否已准备好运行新的任务,如果是,jobtracker会分配它一个任务。


    分配任务所属于的作业:在Jobtracker分配任务前需先确定任务所在的作业。后面会介绍到各种作业调度算法,默认是一个FIFO的作业调度。


    分配Map和Rece任务:tasktracker有固定数量的任务槽,一个tasktracker可以同时运行多个Map和Rece任务,但其准确的数量由tasktracker的核的数量和内存大小决定。默认调度器会先填满Map任务槽,再填Rece任务槽。jobtracker会选择距离离分片文件最近的tasktracker,最理想情况下,任务是数据本地化(data-local)的,当然也可以是机架本地化(rack-local),如果不是本地化的,那么他们就需要从其他机架上检索数据。Rece任务分配很简单,jobtracker会简单的从待运行的rece任务列表中选取下一个来执行,不用考虑数据本地化。


任务的执行TaskTracker:

     TaskTracker收到新任务后,就要在本地运行任务了,运行任务的第一步就是通过localizedJob将任务本地化所需要的注入配置、数据、程序等信息进行本地化。


     1.本地化数据:从共享文件系统将job.split 、job.jar (在分布式缓存中)复制本地,将job配置信息写入job.xml。

     2.新建本地工作目录:tasktracker会加压job.jar文件到本工作目录。

     3.调用launchTaskForJob方法发布任务(其中会新建TaskRunner实例运行任务),如果是Map任务就启用MapTaskRunner,对于Rece就是ReceTaskRunner。

   

  在这之后,TaskRunner会启用一个新的JVM来运行每个Map/Rece任务,防止程序原因而导致tasktracker崩溃,但不同任务间重用JVM还是可以的,后续会讲到任务JVM重用。


     对于单个Map,任务执行的简单流程是:

     1.分配任务执行参数

     2.在Child临时文件中添加map任务信息(Child是运行Map和Rece任务的主进程)

     3.配置log文件夹,配置map任务的通信和输出参数

     4.读取input split,生成RecordReader读取数据

     5.为Map生成MapRunnable,依次从RecordReader中接收数据,并调用Map函数进行处理。

     6.最后将map函数的输出调用collect收集到MapOutputBuffer(参数控制其大小)中。


Streaming和Pipes:

     Streaming和Pipes都运行特殊的Map和Rece任务,目的是运行用户提供的可执行程序并与之通信。


     Streaming:使用标准输入输出Streaming与进程进行通信。


     Pipes:用来监听套接字,会发送一个端口号给C++程序,两者便可建立链接。

     

进度和状态更新:

     一个作业和它的任务都有状态(status),其中包括:运行成功失败状态、Map/Rece进度、作业计数器值、状态消息。


     状态消息与客户端的通信:

     1.对于Map任务Progress的追踪:progress是已经处理完的输入所占的比例。

     2.对于Rece:稍复杂,rece任务分三个阶段(每个阶段占1/3),复制、排序和Rece处理,若rece已执行一半的输入的话,那么任务进度便是1/3+1/3+1/6=5/6。

     3.任务计数器:任务有一组计数器,负责对任务运行各个事件进行计数。

     4.任务进度报告:如果任务报告了进度,便会设置一个标记以表明状态将被发送到tasktracker。有一个独立线程每隔三秒检查一次此标记,如果已设置,则告知tasktracker当前状态。

     5.tasktracker进度报告:tasktracker会每隔5秒(这个心跳是由集群大小决定,集群越大时间会越长)发送heartbeat到jobtracker,并且tasktracker运行的所有状态都会在调用中被发送到jobtracker。

     6.jobtracker合并各任务报告:产生一个表明所有运行作业机器所含任务状态的全局视图。

     前面提到的JobClient就是通过每秒查询JobTracker来接收最新状态,而且客户端JobClient的getJob方法可以得到一个RunningJob的实例,其包含了作业的所以状态信息。

     

作业的完成:

     当jobtracker收到作业最后一个任务已完成的通知后,便把作业状态设置成成功。JobClient查询状态时,便知道任务已成功完成,于是JobClient打印一条消息告知用户,然后从runJob方法返回。


     如果jobtracker有相应设置,也会发送一个Http作业通知给客户端,希望收到回调指令的客户端可以通过job.end.notification.url属性来进行设置。


     jobtracker情况作业的工作状态,指示tasktracker也清空作业的工作状态,如删除中间输出。

     

失败

     实际情况下,用户的代码存在软件错误进程会崩溃,机器也会产生故障,但Hadoop能很好的应对这些故障并完成作业。


     1.任务失败    

     子任务异常:如Map/Rece任务中的用户代码抛出异常,子任务JVM进程会在退出前向父进程tasktracker发送错误报告,错误被记录用户日志。tasktracker会将此次task attempt标记为tailed,并释放这个任务槽运行另外一个任务。


     子进程JVM突然退出:可能由于JVM bug导致用户代码造成的某些特殊原因导致JVM退出,这种情况下,tasktracker会注意到进程已经退出,并将此次尝试标记为failed。


     任务挂起:一旦tasktracker注意一段时间没有收到进度更新,便会将任务标记为failed,JVM子进程将被自动杀死。任务失败间隔时间通常为10分钟,可以以作业或者集群为基础设置过期时间,参数为mapred.task.timeout。注意:如果参数值设置为0,则挂起的任务永远不会释放掉它的任务槽,随着时间的推移会降低整个集群的效率。


     任务失败尝试次数:jobtracker得知一个tasktracker失败后,它会重新调度该任务执行,当然,jobtracker会尝试避免重新调度失败过的tasktracker任务。如果一个任务尝试次数超过4次,它将不再被重试。这个值是可以设置的,对于Map任务,参数是mapred.map.max.attempts,对于rece任务,则由mapred.rece.max.attempts属性控制。如果次数超过*,整个作业都会失败。当然,有时我们不希望少数几个任务失败就终止运行的整个作业,因为即使有些任务失败,作业的一些结果可能还是有用的,这种情况下,可以为作业设置在不触发作业失败情况下的允许任务失败的最大百分比,Map任务和Rece任务可以独立控制,参数为mapred.max.map.failures.percent 和mapred.max.rece.failures.percent。


     任务尝试中止(kill):任务终止和任务失败不同,task attempt可以中止是因为他是一个推测副本或因为它所处的tasktracker失败,导致jobtracker将它上面的所有task attempt标记为killed。被终止的task attempt不会被计入任务运行尝试次数,因为尝试中止并不是任务的错。


     2.tasktracker失败

     tasktracker由于崩溃或者运行过慢而失败,他将停止向jobtracker发送心跳(或很少发送心跳)。jobtracker注意已停止发送心跳的tasktracker(过期时间由参数mapred.tasktracker.expiry.interval设置,单位毫秒),并将它从等待调度的tasktracker池中移除。如果是未完成的作业,jobtracker会安排次tasktracker上已经运行成功的Map任务重新运行,因为此时rece任务已无法访问(中间输出存放在失败的tasktracker的本地文件系统上)。


     即使tasktracker没有失败,也有可能被jobtracker列入黑名单。如果tasktracker上面的失败任务数量远远高于集群的平均失败任务次数,他就会被列入黑名单,被列入黑名单的tasktracker可以通过重启从jobtracker黑名单中移除。


     3.jobtracker失败

     老版本的JobTracker失败属于单点故障,这种情况下作业注定失败。


作业调度:

     早期作业调度FIFO:按作业提交顺序先进先出。可以设置优先级,通过设置mapred.job.priority属性或者JobClient的setJobPriority()方法制定优先级(优先级别:VERY_HIGH,HIGH,NORMAL,LOW,VERY_LOW)。注意FIFO调度算法不支持抢占(preemption),所以高优先级作业仍然会被那些已经开始的长时间运行的低优先级作业所阻塞。


     Fair Scheler:目标是让每个用户公平地共享集群能力。当集群存在很多作业时,空闲的任务槽会以”让每个用户共享集群“的方式进行分配。默认每个用户都有自己的作业池。FairScheler支持抢占,所以,如果一个池在特定的一段时间未得到公平地资源共享,它会终止池中得到过多的资源任务,以便把任务槽让给资源不足的池。FairScheler是一个后续模块,使用它需要将其jar文件放在Hadoop的类路径下。可以通过参数map.red.jobtracker.taskScheler属性配置(值为org.apache.hadoop.mapred.FairScheler)


     Capacity Scheler:

     集群由很多队列组成,每个队列都有一个分配能力,这一点与FairScheler类似,只不过在每个队列内部,作业根据FIFO方式进行调度。本质上说,Capacity Scheler允许用户或组织为每个用户模拟一个独立使用FIFO的集群。


shuffle和排序:

     MapRece确保每个Recer的输入都是按键排序的。系统执行排序的过程-将map输出作为输入传给recer的过程称为shuffle。shuffle属于不断被优化和改进的代码库的一部分,从许多方面来看,shuffle是MapRece的心脏。


     整个shuffle的流程应该是这样:

     map结果划分partition  排序sort 分割spill   合并同一划分   合并同一划分  合并结果排序 rece处理 输出


     Map端:

     写入缓冲区:Map函数的输出,是由collector处理的,它并不是简单的将结果写到磁盘。它利用缓冲的方式写到内存,并处于效率的考虑进行预排序。每个map都有一个环形的内存缓冲区,用于任务输出,默认缓冲区大小为100MB(由参数io.sort.mb调整),一旦缓冲区内容达到阈值(默认0.8),后台进程边开始把内容写到磁盘(spill),在写磁盘过程中,map输出继续被写到缓冲区,但如果缓冲区被填满,map会阻塞知道写磁盘过程完成。写磁盘将按照轮询方式写到mapred.local.dir属性制定的作业特定子目录中。


     写出缓冲区:collect将缓冲区的内容写出时,会调用sortAndSpill函数,这个函数作用主要是创建spill文件,按照key值对数据进行排序,按照划分将数据写入文件,如果配置了combiner类,会先调用combineAndSpill函数再写文件。sortAndSpill每被调用一次,就会写一个spill文件。


     合并所有Map的spill文件:TaskTracker会在每个map任务结束后对所有map产生的spill文件进行merge,merge规则是根据分区将各个spill文件中数据同一分区中的数据合并在一起,并写入到一个已分区且排序的map输出文件中。待唯一的已分区且已排序的map输出文件写入最后一条记录后,map端的shuffle阶段就结束了。


     在写磁盘前,线程首先根据数据最终要传递到的recer把数据划分成响应的分区(partition),在每个分区中,后台线程按键进行内排序,如果有一个combiner,它会在排序后的输出上运行。


     内存达到溢出写的阈值时,就会新建一个溢出写文件,因为map任务完成其最后一个输出记录之后,会有几个溢出写文件。在任务完成前,溢出写文件会被合并成一个已分区且已排序的输出文件。配置属性io.sort.facor控制一次最多能合并多少流,默认值是10。


     如果已经指定combiner,并且写次数至少为3(通过min.mum.spills.for.combine设置)时,则combiner就会在输出文件写到磁盘之前运行。运行combiner的意义在于使map输出更紧凑,舍得写到本地磁盘和传给recer的数据更少。


     写磁盘时压缩:写磁盘时压缩会让写的速度更快,节约磁盘空间,并且减少传给recer的数据量。默认情况下,输出是不压缩的,但可以通过设置mapred.compress.map.output值为true,就可以启用压缩。使用的压缩库是由mapred.map.output.compression.codec制定。


     recer获得文件分区的工作线程:recer通过http方式得到输出文件的分区,用于文件分区的工作线程数量由tracker.http.threads属性指定,此设置针对的是每个tasktracker,而不是每个map任务槽。默认值为40,在大型集群上此值可以根据需要而增加。


     Rece端:

     复制阶段:rece会定期向JobTracker获取map的输出位置,一旦拿到输出位置,rece就会从对应的TaskTracker上复制map输出到本地(如果map输出很小,则会被复制到TaskTracker节点的内存中,否则会被让如磁盘),而不会等到所有map任务结束(当然这个也有参数控制)。


     合并阶段:从各个TaskTracker上复制的map输出文件(无论在磁盘还是内存)进行整合,并维持数据原来的顺序。


     Rece阶段:从合并的文件中顺序拿出一条数据进行rece函数处理,然后将结果输出到本地HDFS。


     Map的输出文件位于运行map任务的tasktracker的本地磁盘,现在,tasktracker要为分区文件运行rece任务。每个任务完成时间可能不同,但是只要有一个任务完成,rece任务就开始复制其输出,这就是rece任务的复制阶段(copy phase)。rece任务有少量复制线程,因此能够并行取得map输出。默认值是5个线程,可以通过mapred.rece.parallel.copies属性设置。


     Recer如何得知从哪个tasktracker获得map输出:map任务完成后会通知其父tasktracker状态已更新,tasktracker进而通知(通过heart beat)jobtracker。因此,JobTracker就知道map输出和tasktracker之间的映射关系,recer中的一个线程定期询问jobtracker以便获知map输出位置。由于recer有可能失败,因此tasktracker并没有在第一个recer检索到map输出时就立即从磁盘上删除它们,相反他会等待jobtracker告示它可以删除map输出时才删除,这是作业完成后最后执行的。


     如果map输出很小,则会被直接复制到rece tasktracker的内存缓冲区(大小由mapred.job.shuffle.input.buffer.percent控制,占堆空间的百分比),否则,map输出被复制到磁盘。一旦内存缓冲区达到阈值大小(由mapred.iob.shuffle.merge.percent)

或达到map输出阈值大小(mapred.inmem.threadhold),则合并后溢出写到磁盘中。


     随着磁盘上副本增多,后台线程会将他们合并为更大的、排好序的文件。注意:为了合并,压缩的map输出必须在内存中被解压缩。


     排序阶段:复制阶段完成后,rece任务会进入排序阶段,更确切的说是合并阶段,这个阶段将合并map输出,维持其顺序排列。合并是循环进行的,由合并因子决定每次合并的输出文件数量。但让有可能会产生中间文件。


     rece阶段:在最后rece阶段,会直接把排序好的文件输入rece函数,不会对中间文件进行再合并,最后的合并即可来自内存,也可来自磁盘。此阶段的输出会直接写到文件系统,一般为hdfs。


     细节:这里合并是并非平均合并,比如有40个文件,合并因子为10,我们并不是每趟合并10个,合并四趟。而是第一趟合并4个,后三趟合并10,在最后一趟中4个已合并的文件和余下6个未合并会直接并入rece。

Hadoop的组件MapReduce和HDFS分别是做什么的?

hdfs是:hadoop分布式文件系统,主要用于存储和管理数据,而mapreduce是计算处理框架,主要用于分析处理统计你存在hdfs上的数据集用的

简述Hadoop三大组件如何进行文件的查找工作?

1. HDFS:HDFS是Hadoop的分布式文件系统,用于存储大规模数据集。它通过将文件切分成块(Block)并存储在不同的数据节点上来实现分布式存储。当需要查找文件时,HDFS会根据文件名和路径信息进行索引,在元数据中快速定位文件所在的数据节点。通过这种方式,HDFS能够高效地进行文件的查找和访问。2. MapReduce:...

hadoop2.0中最基础的两个组件是

HDFS(Hadoop Distribute File System):hadoop的数据存储工具。YARN(Yet Another Resource Negotiator,另一种资源协调者):Hadoop 的资源管理器。Hadoop MapReduce:分布式计算框架:Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势。Hadoop的分布式架构,将大数据...

hadoop三大组件

HDFS:Hadoop分布式文件系统是Hadoop的分布式文件系统,它是将大规模数据分散存储在多个节点上的基础。HDFS主要负责数据的存储和管理,可以将大数据集分成多个数据块,并将这些数据块分配到不同的计算节点上存储,提高数据的可靠性和处理效率。MapReduce:MapReduce是Hadoop的分布式计算框架,它提供了一种简单的...

Hadoop有哪几个组成部分?-ITJOB

在hadoop1中核心组成部分是HDFS、MapReduce,到了Hadoop2,核心变为HDFS、Yarn,而且新的HDFS中可以有多个NameNode,每个都有相同的职能。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS...

简述hadoop 是什么?它的每个组件分别具有什么作用?

Hadoop是一个开源的分布式处理框架,它能够处理和存储大规模数据集,是大数据处理的重要工具。Hadoop主要由两个核心组件构成:Hadoop Distributed File System (HDFS) 和 Hadoop MapReduce。1. Hadoop Distributed File System (HDFS):HDFS是Hadoop的分布式文件系统,设计用来存储和处理大规模的数据集。它运行...

hadoop的核心组件是什么

HDFS是Hadoop生态系统中的关键组件,主要用于存储大规模数据集。它的设计目的是确保数据的高可靠性和高可用性。为了实现这一目标,HDFS将数据分散存储在集群的多个节点上,并支持数据冗余备份。这种分布式存储方式不仅提高了数据的容错性,还使得Hadoop系统能够高效地处理大规模数据。接下来是MapReduce,这是...

Hadoop有哪几个组成部分?-ITJOB

1、Hadoop Common :Hadoop体系最底层的一个模块,为Hadoop各子项目提供各种工具,如:配置文件和日志操作等。2、HDFS:分布式文件系统,提供高吞吐量的应用程序数据访问,对外部客户机而言,HDFS就像一个传统的分级文件系统。可以创建、删除、移动或重命名文件,等等。但是 HDFS的架构是基于一组特定的节点...

Hadoop的组成部分有哪些?

借用一下楼下的“Hadoop中最核心的是MapReduce和HDFS ”,hdfs是负责分布式存储数据的,MapReduce是负责Map/Reduce计算的,它本身是实现了分布式的,这也是为什么hadoop做为很多分布计算的分台的原因了。

hadoop三大组件是什么?

目前开源hadoop只包含hdfs,mr,和yarn,yarn是hadoop2新增组件。hdfs是hadoop分布式文件系统,主要采用多备份方式存储文件,可以对接hive和hbase等产品并存储对应数据。mapreduce是大数据处理并行框架,用户可以编写自己的程序调用mr框架并行的处理大数据,在调用过程中可以调整m和r的数目。不过总的来说编程相对...

中项和高项分别是做什么的 公司有什么部门分别做什么工作 会议的五个部分分别做什么事 四季分别可以干什么 证券前台要做什么工作 做什么 做什么好呢 现在做什么好啊 做什么工作
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
空调变频的好还是定频的好哪个省电 PS色环怎么调出来呢 洗衣机那个嗯叫啥风铃木螺丝十不叼怎么办呢 带豪的微信名字 宁波带货到杭州 鸭蛋怎么吃营养价值最高 ...通行证.快递到深圳来才要21块钱.那当地却收了41块钱.我要投诉的话... ps怎么弄三角形色块ps怎么设置三角形的色板 ps如何画一个不规则三角形ps怎么画不规则三角形 PPT如何改变页面的大小? HBase支持结构化的数据还是非结构化的啊 小学六年作文 (写人)师恩难忘 《师恩难忘》作文有语言、动作、外貌、神态、心理描写 师恩难忘作文176字 作文《师恩难忘》500字左右 谁知道五台山是哪位菩萨的修行道场? 师恩难忘的作文怎么写? 佛教四大名山,四大菩萨分别是指什么 师恩难忘作文(要有事例) 四大道场分别是哪里? 以“师恩难忘”为话题写一篇作文 五大菩萨道场名山 跪求《师恩难忘》作文 四大菩萨的道场和坐骑,分别是什么? 讲述我和恩师之间的感人故事写成作文(四百字)急! 观音道场在哪里 【师恩难忘】的作文 中国四大菩萨的道场所在地? 师恩难忘作文 佛教四大名山中,哪一个是观音菩萨的道场 观音菩萨的道场是哪里 五台山是哪个菩萨道场 中国的四大佛教名山也是四大菩萨的道场 请问是哪四大道场 微信怎么申请健康码 各个菩萨的道场都是哪里呢? 换了怎么申请健康码 中国有哪五大佛山?它们分别都是哪个神仙的道场? 换了怎么申请健康码 删除的照片怎么恢复? 四大佛教名胜山分别是那些菩萨道场 为什么两个手机上的爱彼迎 三星上显示的是人民币 苹果的却是美元? 麻婆豆腐制作过程 如何查看特别优惠 airbnb 医保外地就医怎么向当地备案? 存款准备金率下调1%,意味着什么? 如何快速取消EXCEL里的筛选? EXCEL的数据筛选的快捷键是什么 准备金率下调意味着人民币升值 excel 怎样用快捷键 直接显示筛选 包含对话框? 媳妇梦见已故家公给自己一袋钱是怎么回事?