收藏 分享(赏)

大数据技术基础培训-MapReduce技术培训.pptx

上传人:IT人 文档编号:1420896 上传时间:2018-07-15 格式:PPTX 页数:55 大小:567.32KB
下载 相关 举报
大数据技术基础培训-MapReduce技术培训.pptx_第1页
第1页 / 共55页
大数据技术基础培训-MapReduce技术培训.pptx_第2页
第2页 / 共55页
大数据技术基础培训-MapReduce技术培训.pptx_第3页
第3页 / 共55页
大数据技术基础培训-MapReduce技术培训.pptx_第4页
第4页 / 共55页
大数据技术基础培训-MapReduce技术培训.pptx_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、大数据技术基础培训,1,Map/Reduce 技术培训,2,MapReduce描述,并行处理大数据的分布式框架适合对海量数据进行分析和处理框架提供并行化机制框架提供节点失效处理机制框架提供状态监控机制使用Java编写,3,4,典型集群部署,5,MapReduce框架流程,InputFormat 阶段,InputFormat决定输入数据如何被切分供Map任务使用InputFormat将输入数据划分成一系列的InputSplit每个Map任务处理一个InputSplitInputSplit还包含存放这个数据块的机器列表提供RecordReader读取InputSplit,并且构造key-value

2、对传递给Map任务控制数据如何被解压缩将数据转换成MapReduce能够处理的Java类型,6,Map阶段,Map任务可以独立地处理数据集通常用来对数据进行过滤、转换处理,7,Shuffle阶段,对Map任务的输出进行Partition、Sort、Spill以及mergeReducer获取处理过的Map输出,Merge后进行Reduce操作,8,Reduce阶段,扩展了MapReduceBase类实现了Reducer接口接受来自多个Map任务的输出将key/value对按照key进行排序Reduce方法通常会遍历每个key对应的所有value,9,MapReduce理论基础,10,MapRed

3、uce简单示例: Word Count,Word CountInput: large number of text documentsTask: count the occurrence of each word across all the document,11,Input,Map,Partition,Shuffle,Sort,Reduce,并行化执行,12,JobTracker & TaskTracker,13,JobTracker,MapReduce框架中的任务调度器,类似于”Master”的角色资源管理管理TaskTracker为任务分配可用的资源(Task Slot)任务生命周期管

4、理任务提交分配Task并执行处理失败的Task任务完成通过http:/:50030监控任务执行状态可以查看Map Task和Reduce Task执行状态可以查看Task的stdout和stderr的日志信息,14,TaskTracker,是一个Daemon进程与JobTracker进行通信接受任务分配更新Task状态管理本地单独Task的执行,包括Map任务和Reduce任务TaskTracker可以配置Map Slot和Reduce Slot的数量每个Task占用一个Slot每个Task是一个独立的进程TaskTracker启动Task并且监控Task状态,15,任务提交和执行过程,16,

5、NameNode,JobTracker,Server,TaskTracker,Task,Task,Task,Client,Submitjobconf,StagingJob related info including jarLibStreaming lib,Send config and jarsRequest location of dataObtain location of dataSubmit jobSend task to TaskTrackerRequest for job related infoSend job related infoRun task Report about

6、 task,1,2,3,4,5,6,7,8,9,MapReduce失效处理,TaskTracker失效通过心跳机制,可以被检测到失效需要重新执行已完成的、正在执行的Map任务需要重新执行正在执行的Reduce任务通过JobTracker实现失效处理JobTracker失效如果配置了高可用性,未完成的任务会在备份JobTracker启动之后重新提交,17,MapReduce编程,18,MapReduce编程模型,MapReduce使用Java编写输入和输出Key/Value对的集合实现Map和Reduce方法map (in_key, in_value) - list(out_key, inter

7、mediate_value)处理键值对的输入生成中间结果,也是键值对reduce (out_key, list(intermediate_value) - list(out_value)将相同Key的中间值合并生成最终结果(通常每个Key对应一个结果),19,map(,/ Do some work here,.collect(,) ,);,reduce(,.collect(,/ Do some work here,);,),Map,Value,OutputCollector,Reporter,:OutputCollector,Key,Value,Iterator (value),Reporte

8、r,Value,Key,:OutputCollector,Map,OutputCollector,Map() 和 Reduce(),例子:WordCount,public void map(LongWritable key, Text value, OutputCollector output, Reporter reporter) throws IOException StringTokenizer tokenizer = new StringTokenizer(value.toString();while (tokenizer.hasMoreTokens() word.set(tokeni

9、zer.nextToken(); output.collect(word, one); public void reduce(Text key, Iterator values, OutputCollector output, Reporter reporter) throws IOException int sum = 0; while (values.hasNext() sum += values.next().get(); output.collect(key, new IntWritable(sum); ,21,WritableComparable接口,Key Value需要被序列化实

10、现WritableComparable接口WritableComparable extends Writable, ComparableWritable接口write(DataOutput out)read(DataInput in)Comparable接口int compareTo(T o)Key使用compareTo方法来排序,22,Hadoop Datatypes,Hadoop提供Java 基本数据类型的封装,并且提供get(), set() 和 toString()方法还提供了hashCode() 和 equals()方法提供的类型包括:ByteWritableIntWritableL

11、ongWritableFloatWritableDoubleWritableBooleanWritableNullWritable(不支持set()IntPairWritable,23,Hadoop Datatypes 实例,TextWritable for a Java StringmyTxtWritable.set(stringToInsert);myTxtWritable.toString();ArrayWritable for a Java ArraymyAW.set(Writable)myAW.get() returns the WritablemyAW.toArray() retu

12、rns a Java ObjectMapWritable for a Java Hash MapmyMapW.put(K,V)myMapW.get(K)BytesWritable for a Java array of bytesmyBW.set(byte, offset, len)myBW.get() returns byte,24,Input Format,25,Input Split,InputSplit包含Map任务需要处理的数据信息JobClient负责计算和划分Split大部分压缩文件无法SplitMapReduce能够自动解压文件Indexed LZO,BZip2格式的压缩文件可

13、以被splithadoop jar hadoop-lzo.jar pression.lzo.LzoIndexer yourfile.lzo,26,MapReduce InputFormat,InputFormat控制InputSplit的划分提供RecordReader,从InputSplit中读取并构造key-value对供Map任务使用一般会 按照HDFS文件的Block每个InputSplit包含一个HDFS Block64G的文件,blocksize为64M,默认会有1024个InputSlit使用较大的Block Size具有以下好处提高单个Map任务处理数据量减少Split数量,可

14、以减少总的Map任务的启动停止开销可以通过设置SplitSize来控制Mapper的数量max(minSplitSize, min(BlockSize, maxSplitSize)FileInputFormatsetInputPaths(JobConf conf, Path. inputPaths) addInputPaths(JobConf conf, String commaSeparatedPaths),27,小文件处理问题,Hadoop用来处理海量文件(百万),但是小文件意味着更多的文件(千万级)小文件越多,MapReduce任务中需要的Mapper数就越多默认每个Mapper会处理文

15、件的一个Block或者整个文件(文件大小小于BlockSize)大量的Mapper需要使用更多的启动/停止开销生成的大量的日志小文件大量的小文件会使得HDFS Metadata变大增加Namenode的负载采用CombineFileInputFormat每个InputSplit包含多个File Block通过设置SplitSize控制Mapper数量,28,三种常用的InputFormat,TextInputFormat(默认)每次处理一行Key是LongWritable, Value是TextKeyValueInputFormat每次处理一行Key和Value之间存在分隔符Key是Text,

16、 Value也是Text必须显式指定分隔符SequenceFileInputFormat使用二进制格式存储的Key/Value对支持压缩,可以只对Value压缩、也可以对Block压缩是Splitable的,29,30,TextInputFormat 实现,Now isthe time,Your MapCode,k=0v= “Now is”k=7v= “the time”,1,2,31,TextInputFormat细节,HDFS,Now isthe timefor,Node,all goodmen to,Node,K = offset = 64MB-3v=“for all good”,32,

17、Record Reader,K,V,K,V,K,V,K,V,K,V,K,V,K,V,K,V,64MB,Record ReaderMapper 1,Record ReaderMapper 2,ignore,64MB,33,KeyValueInputFormat,Your input file in HDFS,JoeSmith AnnSingh ,Key: “Ann” value: “Singh”,YourMapCode,1,2,Key: “Joe” value: “Smith”,自定义InputFormat,实现InputFormat 接口InputSplits getSplits()Recor

18、dReader getRecordReader()如果使用文件作为输入,继承FileInputFormat大部分会使用FileInputFormat的getSplits方法重新定义自己的RecordReaderK createKey()V createValue()boolean next(K key, V value),34,Output Format,35,Output Format,所有的输出文件缺省会写入同一个目录默认输出文件的名字是”part-”加5位数字第一个输出文件是part-00000输出文件数量与Reduce数相同如果没有Reduce任务,输出文件数与Mapper数量相同Fi

19、leOutputFormatsetOutputPath(JobConf conf, Path outputDir)TextOutputFormat (default)每个Key Value对是一行key TAB value SequenceFileOutputFormat与SequenceFileInputFormat配合使用,36,MapReduce 输出压缩,Job输出结果压缩conf.setBoolean(press, true);conf.setClass(pression.codec, SnappyCodec.class, CompressionCodec.class);Map任务输

20、出结果压缩conf.setCompressMapOutput(true); conf.setMapOutputCompressorClass(SnappyCodec.class);,37,任务创建、提交,38,JobClient,与Jobtracker交互的接口检查任务的Input和Output拷贝Job的jar和配置信息到MapReduce框架提交任务监控任务状态,39,JobClient提交任务,通过JobClient提供的静态方法runJob()方法,会创建JobClient的实例,并调用submitJob()方法runJob()方法会每秒钟去获取Job的状态在Job完成之前,程序会被阻

21、塞在状态获取也可以直接调用JobClient的submitJob程序在任务提交之后不会被阻塞,40,JobConf,配置Job的参数常用的参数jobconf.setJobName(“AnyName”);jobconf.setMapperClass(myMapper.class);jobconf.setCombinerClass(myReducer.class);jobconf.setReducerClass(myReducer.class);jobconf.setOutputKeyClass(Text.class); / for entire jobjobconf.setOutputValue

22、Class(Text.class); / for entire jobjobconf.setMapOutputKeyClass(Text.class); / for just map()jobconf.setMapOutputValueClass(IntWritable.class); / for just map()jobconf.setNumReduceTasks(1); jobconf.setJarByClass(WordCount.class);,41,JobConf自定义参数,/Job创建JobConf conf = new JobConf(); conf.set(“MyProper

23、ty”, “MyValue”);JobClient.runJob(conf);/Mapper/Reducer中使用public void setup(Context context) throws IOException, InterruptedException Configuration conf = context.getConfiguration(); String myValue = conf.get(“MyProperty”); /etc ,42,main函数的编写,在main函数中直接构造JobConf,并通过JobClient提交通过Tool和 ToolRunner实现Tool

24、接口 int run(String args)ToolRunner int run(Configuration conf, Tool tool, String args)支持处理Hadoop通用的参数,如 conf, -D, -fs等,43,ToolRunner 实例,44,Override public int run(String args) throws Exception if (args.length != 2) System.out.println( Usage: ProductSearchIndexer ); ToolRunner.printGenericCommandUsage

25、(System.out); return -1; /JobClient.runJob(),public class ProductSearchIndexer extends Configured implements Tool ,public static void main(String args) throws Exception int res = ToolRunner.run(new Configuration(), new ProductSearchIndexer(), args); System.exit(res); ,Implement Tool,Invoke ToolRunne

26、rIn main(),Implement run,MapReduce程序运行,打包成Jar,拷贝到集群中运行hadoop jar yourmr.jar io.transwarp.example.YourClassName args使用hadoop-eclipse插件在Eclipse中运行MapReduce程序,45,高级API,46,DistributedCache,分发任务需要的只读的大文件addCacheFile(URI,conf)/setCacheFiles(URIs,conf)addCacheArchive(URI,conf)/setCacheArchives(URIs,conf)ad

27、dArchiveToClassPath(Path, Configuration)/addFileToClassPath(Path, Configuration)每个TaskTracker在执行Job之前拷贝文件到本地该TaskTracker上的任务都从本地读取执行完Job之后删除在任务的工作目录下创建SymbolLinkDistributedCache.createSymlink(Configuration)使用#分割, hdfs:/namenode:port/lib.so.1#lib.so 分发的文件可以是Text, Archives, Jars等,47,DistributedCache例子

28、,/Job创建JobConf conf = new JobConf(); DistributedCache.addCacheFile(new URI(/user/peter/cacheFile/testCache1), conf);JobClient.runJob(conf);/Mapper/Reducer中使用public void setup(Context context) throws IOException, InterruptedException Configuration conf = context.getConfiguration(); URI localFiles = D

29、istributedCache.getCacheFiles(conf); /etc ,48,Debug,在Task的setup、map、reduce输出LogLOG.info(“Debug Message”)用户提供Debug脚本使用DistributedCache分发脚本JobConf.setMapDebugScript(String)JobConf.setReduceDebugScript(String)$script $stdout $stderr $syslog $jobconf使用方法job.setMapDebugScript(./myscript); DistributedCach

30、e.createSymlink(job); DistributedCache.addCacheFile(/debug/scripts/myscript#myscript);,49,提交任务到Queue,使用Capacity Scheduler,允许配置多个Queue默认Queue:Default设置mapred.job.queue.namesetQueueName(String)如果不设置,默认使用Default,50,实例演示,51,实例演示,Hadoop Eclipse Plugin编译Eclipse下MapReduce开发调试环境TeraSort实例演示,52,TeraSort,默认是用

31、HashPartitoner,使用一个ReducerMap输出只在Partition中排序,Partition之间没有固定顺序Reduce没有并行度将Map任务输出的Partition排序每个Partition的Key属于一个范围第i+1个Partition中的Key比第i个Partition中的Key大TeraSort算法流程取样对记录标记reduce,53,取样,采样数据条数总数据的0.1%到0.01%对采样数据进行全排序,确定“分割点”SplitSampler,Reduce数量与InputSplit数相同将分割点写入文件,并且放入DistributedCache中,54,Trie树,55,如果key以AAA开头,被分配到第“0”个reducer。 如果key以ACA开头,被分配到第“4”个reducer。 如果key以ACD开头,被分配到第“4”个reducer。 如果key以ACF开头,被分配到第“5”个reducer。如果key以ACZ开头,被分配到第“6”个reducer。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 管理信息系统

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报