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

hadoop MapReduce 读取配置参数

发布网友 发布时间:2022-04-24 05:15

我来回答

2个回答

热心网友 时间:2022-04-08 07:59

如果第三方配置文件不是特别大(几百M以上),则可以使用DistributeCache。

如果第三方配置文件比较大,则需要在MapRece中实现join来做。


关于 DistributeCache的用法,请搜索“maprece DistributeCache”。

关于在MapRece中实现两个文件的join,请搜索"maprece实现join"。

我只能说到这了。

热心网友 时间:2022-04-08 09:17

可以只用一行代码来运行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 读取配置参数

如果第三方配置文件不是特别大(几百M以上),则可以使用DistributeCache。如果第三方配置文件比较大,则需要在MapReduce中实现join来做。关于 DistributeCache的用法,请搜索“mapreduce DistributeCache”。关于在MapReduce中实现两个文件的join,请搜索"mapreduce实现join"。我只能说到这了。

STM32F103C8T6的基本参数有哪些?

STM32F103C8T6是一款基于ARM Cortex-M3内核的微控制器,具有以下基本参数:1. 工作频率:72MHz2. 外部时钟:最高可达120MHz3. 存储器容量:64K bytes4. 数据总线宽度:32位5. 输入/输出端口: - 串行数字输入:7位数字端口 - 并行数字输入:5位数字端口 - 串行数字输出:2位数字端口 - 并行数字输出:2位数字端口 - 模拟输入:0位模拟端口(AIN1 C,TA1 PD6) - 模拟输出:4位模拟端口(AIN0 ADC1, AIN1 ADC2, AIN1 ADC3, AIN1 ADC4)6. 定时器: - 看门狗定时器:1个 - 任务定时器:4个 - 延迟定时器:2个7. ADC: - 12-bit ADC with PWM …透过STM32您的嵌入式应用将得益于意法半导体优秀的产品架构、技术、多源产地和全方位支持。意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM Cortex-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微...

如何确定 Hadoop map和reduce的个数

1. 读取参数mapred.map.tasks,这个参数默认设置为0,生产系统中很少修改。2. 计算input文件的总字节数,总字节数/(mapred.map.tasks==0 ? 1: mapred.map.tasks )=goalsize 3. 每个split的最小值minSize由mapred.min.split.size参数设置,这个参数默认设置为0,生产系统中很少修改。4. 调用comp...

23、hadoop集群中yarn运行mapreduce的内存、CPU分配调度计算与优化_百 ...

CPU分配计算 YARN引入虚拟CPU概念,用于平衡不同节点间的CPU性能差异。配置参数包括:yarn.nodemanager.resource.cpu-vcores用于设置节点可使用的虚拟CPU数,建议值为物理CPU核心数。yarn.scheduler.minimum-allocation-vcores和yarn.scheduler.maximum-allocation-vcores分别定义任务申请虚拟CPU的最小值和最大值。...

大数据MapReduce的性能调优方法总结

我们在上面提到的属性参数,都是位于mapred-site.xml文件中,这些属性参数的调优方式如表3所示。表3 shuffle阶段的调优属性 除此之外,MapReduce还有一些基本的资源属性的配置,这些配置的相关参数都位于mapred-default.xml文件中,我们可以合理配置这些属性提高MapReduce性能,表4列举了部分调优属性。表4 Ma...

如何用mapreduce解决实际问题

Spark的RDD API有个reduce方法,但是它会将所有key-value键值对reduce为单个value。这并不是Hadoop MapReduce的行为,Spark中与之对应的是ReduceByKey。 另外,Reducer的Reduce方法接收多值流,并产生0,1或多个结果。而reduceByKey,它接受的是一个将两个值转化为一个值的函数,在这里,就是把两个数字映射到它们的和的...

mapreduce 怎么查看每个reducer处理的数据量

import java.util.StringTokenizer;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.Path;import org.apache.hadoop.io.LongWritable;import org.apache.hadoop.io.Text;import org.apache.hadoop.mapreduce.Job;import org.apache.hadoop.mapreduce.Mapper;import org.apache.hadoop....

Hadoop MapReduce优化和资源调度器

配置说明 FairScheduler 公平调度器的目的:FairScheduler配置方法 在Hadoop配置目录下/usr/local/hadoop/etc/hadoop yarn-site.xml 增加如下信息:新建一个公平调度配置文件fair-scheduler.xml ,信息如下:上述配置以 data_bi 用户名作为公平调度的队列名称。yarn-site.xml参数说明 fair-scheduler.xml...

hadoop的参数格式

1. **基本任务参数**:如`-input`和`-output`,分别用于指定任务的输入和输出路径。这些参数通常指向HDFS中的文件或目录。2. **作业配置参数**:如`-mapper`和`-reducer`,用于指定MapReduce作业的Mapper和Reducer类,这些类定义了作业的计算逻辑。3. **资源参数**:如`-numReduceTasks`,用于指定...

hadoop 调优措施 调优参数

MapReduce优化方法主要从六个方面考虑: 数据输入、Map阶段、Reduce阶段、IO传输、数据倾斜问题和常用的调优参数。(1)以下参数是在用户自己的MR应用程序中配置就可以生效(mapred-default.xml)(2)应该在YARN启动之前就配置在服务器的配置文件中才能生效(yarn-default.xml)(3)Shuffle性能优化的关键...

hadoop mapreduce可以完成下图功能吗?需要怎么实现?

把A作为map输出的key,value为自己实现的类似vectorwritable的类存 a c reduce时候有sum1,sum2……sumN分别为vectorwritable相同index的和,最后各除values.size reduce的输出value也为v e c to r w ri ta b le ...

hadoop读取oracle数据 python读取hadoop数据 hadoop集群参数配置 python读取hadoop文件 hadoop读取数据 hadoop读取数据库 java读取hadoop文件 hadoop数据参数 hadoop设置参数
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...QQ可以正常用,但是面对面视频游戏就没有视频了 面对面视频游戏世界怎么玩不了啦 面对面视频游戏世界我有视频怎么看不到 面对面视频游戏世界视频怎么不能用啊 ...的9158摄像头没毛病 可是就显示不出头像 说是请打开9158虚拟视频 怎么添加9158虚拟视频的默认图片 面对面视频游戏世界摄像头无法显示视频 报名教师编制的时候,自己是美术教师资格证,可以报名语文和英语吗? 教师编制可以考非专业吗? 农行掌上银行,没有输指纹,别人会盗用吗 如何对hadoop平台进行优化和维护 什么样的相机可以把腿拉长 oppo下载轻颜相机怎么没有长腿特效? 华为P30拍照和录像有自动拉长腿的功能吗? 什么相机软件拍照可以把腿拍的又细又长 撒子相机可以瘦腿 长腿 应用 vivo手机自带美颜软件可以长腿瘦身吗 ⅤiⅤ0s10相机在哪里有拉长腿功效 美图t9瘦身功能怎么用 有什么相机软件?可以把腿拉长显得比较瘦 网站都被移动屏蔽了怎么办 如何解决网吧屏蔽网站? 怎样屏蔽一些网站? 如何登陆被屏蔽的网站? 屏蔽的网站怎么上的噢。 怎么查看被屏蔽的网页 屏蔽网的介绍 如何登录被屏蔽的网站?网站被屏蔽的解决方案是什么? 如何登录被屏蔽的网站 网站被屏蔽的解决方案 怎么解除所有屏蔽的网站? 如何提升Hadoop MapReduce性能 hadoop 作业为什么使用虚拟内存 比Spark快10倍的Hadoop3.0有哪些实用新特性 如何构建最优化的Hadoop集群 hadoop运维的工作内容是什么? hadoop的mapreduce常见算法案例有几种 求解hadoop的文件夹被移动之后需要改哪些参数? 如何配置Hadoop守护进程的运行环境和运行参数 Hadoop 请教学习顺序 提交作业给Hadoop集群怎么解决 hadoop某节点运行较慢,通过什么机制解决 如何让Hadoop结合R语言做大数据分析 LINCOLN是什么牌子的? Lin M是什么品牌 如何对XGBoost模型进行参数调优 描述一下hadoop中,有那些地方使用了缓存机制,分别有什么作用 Lincoln是什么车?介绍一下… 林肯是什么车 林肯牌的车的标志是什么样的 《逃家少奶奶》最新txt全集下载