《hadoop实战培训-传智播客.ppt》由会员分享,可在线阅读,更多相关《hadoop实战培训-传智播客.ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、高级软件人才实作培训专家高级软件人才实作培训专家!Hahoop Hahoop 培训培训讲师:刘刚讲师:刘刚高级软件人才实作培训专家高级软件人才实作培训专家!海量数据处理平台架构一般网站把用户的访问行为记录以apach日志的形式记录下来了,这些日志中包含了下面一些关键字段:client_ip,user_id,access_time,url,referer,status,page_size,agent因为需要统一对数据进行离线计算,所以常常把它们全部移到同一个地方。简单算了一下:(1)网站请求数:1kw/天(2)每天日志大小:450Byte/行*1kw=4.2G,(3)日志存储周期:2年一天产生4
2、.5G的日志,2年需要4.2G*2*365=3.0T解决方案:为了方便系统命令查看日志,不压缩,总共需要3.0T的空间,刚好有一些2U的服务器,每台共1T的磁盘空间。为了避免系统盘坏掉影响服务器使用,对系统盘做了raid1。为了避免其他存放数据的盘坏掉导致数据无法恢复,对剩下的盘做了raid5。所有的数据都汇聚到这几台LogBackup服务器上来了。2高级软件人才实作培训专家高级软件人才实作培训专家!有了LogBackup服务器,离线统计就可以全部在这些服务器上进行了。在这套架构上,用wc、grep、sort、uniq、awk、sed等系统命令,完成了很多的统计需求,比如统计访问频率较高的cl
3、ient_ip,某个新上线的的页面的referer主要是哪些网站。当业务的迅猛发展,网站流量爆发增长,产品经理如果想从中获取更多的用户特征和用户信息,就需要我们这些数据分析人员从不同的日志中找到令他们满意的答案。如果(1)日志总行数:10亿/天(2)每天日志大小:450Byte/行*10亿=420G,(3)日志种类:5种3高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop能解决哪些问题l海量数据需要及时分析和处理。l海量数据需要深入分析和挖掘。l数据需要长期保存问题:l磁盘IO成为一种瓶颈,而非CPU资源。l网络带宽是一种稀缺资源l硬件故障成为影响稳定的一大因素高级软件人才实作培训
4、专家高级软件人才实作培训专家!Hadoop在国内的情景l奇虎360:Hadoop存储软件管家中软件,使用CDN技术将用户请求引到最近的Hadoop集群并进行下载l京东、百度:存储、分析日志、数据挖掘和机器学习(主要是推荐系统)l广告类公司:存储日志,通过协调过滤算法为客户推荐广告lYahoo:垃圾邮件过滤l华为:云计算平台lFacebook:日志存储,实时分析l某公安部项目:网民QQ聊天记录与关联人调查系统,使用Hbase实现l某学校:学生上网与社会行为分析,使用hadoopl淘宝、阿里:国内使用Hadoop最深入的公司,整个Taobao和阿里都是数据驱动的高级软件人才实作培训专家高级软件人才
5、实作培训专家!Hadoop开发人员市场需求和待遇高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop在国内的人才储备高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop介绍1)作者:DougCutting2)用Java编写的开源系统,能够安排在大规模的计算平台上,从而长进计算效率。3)Nutch搜索引擎里面的一个模块。4)受Google三篇论文的启发-MapReduceGFSBigtable5)googlehadoopmapreducemapreduceGFSHDFSBigtableHbase高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop生态系统介绍uHba
6、se1)Nosql数据库,Key-Value存储2)最大化利用内存uHDFS1)hadoopdistributefilesystem分布式文件系统2)最大化利用磁盘uMapReduce1)编程模型,主要用来做数据的分析2)最大化利用CPU高级软件人才实作培训专家高级软件人才实作培训专家!HDFS篇高级软件人才实作培训专家高级软件人才实作培训专家!HDFS设计原则l文件以块(block)方式存储l每个块带下远比多数文件系统来的大(预设64M)l通过副本机制提高可靠度和读取吞吐量l每个区块至少分到三台DataNode上l单一master(NameNode)来协调存储元数据(metadata)l客户
7、端对文件没有缓存机制(Nodatacaching)高级软件人才实作培训专家高级软件人才实作培训专家!HDFS系统结构高级软件人才实作培训专家高级软件人才实作培训专家!NameNode(NN)lNameNode主要功能提供名称查询服务,它是一个jetty服务器lNameNode保存metadate信息包括文件owership和permissions文件包含哪些块Block保存在哪个DataNode(由DataNode启动时上报)lNameNode的metadate信息在启动后会加载到内存lmetadata存储到磁盘文件名为”fsimage”Block的位置信息不会保存到fsimage高级软件人才
8、实作培训专家高级软件人才实作培训专家!NameNode块存储结构metadate物理存储结构高级软件人才实作培训专家高级软件人才实作培训专家!DataNode(DN)保存Block启动DN线程的时候会向NN汇报block信息通过向NN发送心跳保持与其联系(3秒一次),如果NN10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN高级软件人才实作培训专家高级软件人才实作培训专家!Block的副本放置策略第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点第二个副本:放置在于第一个副本不同的机架的节点上第三个副本:与第二个
9、副本相同集群的节点更多副本:随机节点高级软件人才实作培训专家高级软件人才实作培训专家!再说Blockl设置一个Block64MB,如果上传文件小于该值,仍然会占用一个Block的命名空间(NameNodemetadata),但是物理存储上不会占用64MB的空间lBlock大小和副本数由Client端上传文件到HDFS时设置,其中副本数可以变更,Block是不可以再上传后变更的高级软件人才实作培训专家高级软件人才实作培训专家!数据损坏(corruption)处理l当DN读取block的时候,它会计算checksuml如果计算后的checksum,与block创建时值不一样,说明该block已经损
10、坏。lclient读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数lDN在其文件创建后三周验证其checksum高级软件人才实作培训专家高级软件人才实作培训专家!HDFS文件权限与Linux文件权限类似r:read;w:write;x:execute,权限x对于文件忽略,对于文件夹表示是否允许访问其内容如果Linux系统用户zhangsan使用hadoop命令创建一个文件,那么这个文件在HDFS中owner就是zhangsanHDFS的权限目的:阻止好人错错事,而不是阻止坏人做坏事。HDFS相信,你告诉我你是谁,我就认为你是谁19高级软件人才实作培训
11、专家高级软件人才实作培训专家!HDFS文件读取高级软件人才实作培训专家高级软件人才实作培训专家!HDFS文件写入高级软件人才实作培训专家高级软件人才实作培训专家!HDFS文件存储两个文件,一个文件156M,一个文件128在HDFS里面怎么存储?-Block为64MB-rapliction默认拷贝3份高级软件人才实作培训专家高级软件人才实作培训专家!HDFS文件存储结构高级软件人才实作培训专家高级软件人才实作培训专家!HDFS开发常用命令l创建一个文件夹?l上传一个文件?l删除一个文件和文件夹?l查看一个文件夹里面有哪些文件?l查看某个文件的内容?高级软件人才实作培训专家高级软件人才实作培训专家
12、!Hadoop管理员常用命令lhadoopjoblist#列出正在运行的Joblhadoopjobkill#killjoblhadoopfsck/#检查HDFS块状态,是否损坏lhadoopfsck/-delete#检查HDFS块状态,删除损坏块lhadoopdfsadminreport#检查HDFS状态,包括DN信息lhadoopdfsadminsafemodeenter|leavelhadoopdistcphdfs:/a:8020/xxxhdfs:/b:8020/#并行copyl./bin/start-balancer.sh#平衡集群文件高级软件人才实作培训专家高级软件人才实作培训专家!H
13、DFS API详解详解staticFileSystemget(Configurationconf)operator()/step1得到Configuration对象/step2得到FileSystem对象/step3进行文件操作高级软件人才实作培训专家高级软件人才实作培训专家!用Java对HDFS编程1.文件操作l1.1上传本地文件到hadoopfsl1.2在hadoopfs中新建文件,并写入l1.3删除hadoopfs上的文件l1.4读取文件l1.5文件修改时间2.目录操作l2.1在hadoopfs上创建目录l2.2删除目录l2.3读取某个目录下的所有文件l2.4遍历hdfs3.hdfs信息
14、l查找某个文件在HDFS集群的位置l获取HDFS集群上所有节点名称信息高级软件人才实作培训专家高级软件人才实作培训专家!mapreduce篇高级软件人才实作培训专家高级软件人才实作培训专家!开发hadoop依赖的jar和自带的example到下载,目前最新版为。下载完后解压文件,y有hadoop-0.20.2-core.jar,hadoop-0.20.2-examples.jar,hadoop-0.20.2-core.jar:hadoop的核心类库Hadoop所依赖的jar:hadoop所依赖的jar在lib目录下面。Hadoop 自带的一些案例分析:是自带的一些案例。介绍如下:1)aggre
15、gatewordcount计算输入文件中文字个数的基于聚合的MapReduce程序。2)aggregatewordhist生成输入文件中文字个数的统计图的基于聚合的MapReduce程序。3)grep计算输入文件中匹配正则表达式的文字个数的MapReduce程序。4)join合并排序的平均分割的数据集的作业。5)pentomino解决五格拼版问题的分块分层的MapReduce程序。高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop自带的examples.jar介绍6)pi使用蒙地卡罗法计算PI的MapReduce程序。7)Randomtextwriter在一个节点上写10G随机文本
16、的MapReduce程序。8)randomwriter在每个节点上写10G随机数据的MapReduce程序。9)sleep在每个Map和Reduce作业中休憩的程序。10)sort排序随机写入器生成的数据的MapReduce程序。11)sudoku一个九宫格游戏的解决方案。12)wordcount在输入文件中统计文字个数的统计器。高级软件人才实作培训专家高级软件人才实作培训专家!实例l写MapReduce程序的步骤:1.把问题转化为MapReduce模型2.设置运行的参数3.写map类4.写reduce类l例子:统计单词个数MynameisliugangWhatisyournameMy1nam
17、e2is2What1your1liu1gang1高级软件人才实作培训专家高级软件人才实作培训专家!MapReduce模型模型1.Map端一行行读文件,程序转化为中间Key/Value.Mynameisliugang-My1,name1,is1,liu1,gang1Whatisyourname-What1,is1,your1name12.Reduce端相同的key肯定会在一起。经过Reduce方法处理后,形成最终的key/Value.name1,name1-name2;高级软件人才实作培训专家高级软件人才实作培训专家!运行步骤1)打成jar包。2)创建一个word.txt文件3)把word.tx
18、t文件传到HDFS上面hadoopfscopyFromLocal4)执行hadoopjar5)查看执行结果hadoopfstext/path高级软件人才实作培训专家高级软件人才实作培训专家!MapReduce执行流程高级软件人才实作培训专家高级软件人才实作培训专家!MapReduce基本流程35高级软件人才实作培训专家高级软件人才实作培训专家!JobTracker(JT)和TaskTracker(TT)简介高级软件人才实作培训专家高级软件人才实作培训专家!再论JobTracker(JT)和TaskTracker(TT)JobTracker:协作作业的运行taskTracker:运行作业划分后的
19、任务高级软件人才实作培训专家高级软件人才实作培训专家!Mapreduce原理1)一个文件file.txt2)存储file.txt文件3)统计file.txt文件里面”Refund”个数高级软件人才实作培训专家高级软件人才实作培训专家!JobTracker失败1)JobTracker失败在所有的失败中是最严重的一种。2)hadoop没有处理jobtracker失败的机制。-它是一个单点故障。3)在未来的新版本中可能可以运行多个JobTracker。4)可以使用ZooKeeper来协作JobTracker。高级软件人才实作培训专家高级软件人才实作培训专家!TaskTracker失败1)一个Task
20、Tracker由于崩溃或运行过于缓慢而失败,它会向JobTracker发送“心跳”。2)如果有未完成的作业,JobTracker会重新把这些任务分配到其他的TaskTracker上面运行。3)即使TaskTracker没有失败也可以被JobTracker列入黑名单。高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop Job Scheduler1)Hadoop默认的调度器是基于队列的FIFO调度器。所有用户的作业都被提交到一个队列中,然后由JobTracker先按照作业的优先级高低,再按照作业提交时间的先后顺序选择将被执行的作业。优点:调度算法简单明了,JobTracker工作负担轻
21、。缺点:忽略了不同作业的需求差异。2)还用两个多用户调度器-FairScheduler(公平调度器)-CapacityScheduler(计算能力调度)高级软件人才实作培训专家高级软件人才实作培训专家!Fair Scheduler(公平调度器)多个Pool,Job需要被提交到某个Pool中每个pool可以设置最小taskslot,称为miniShareFS会保证Pool的公平Pool内部支持Priority设置支持资源抢占高级软件人才实作培训专家高级软件人才实作培训专家!mapreduce的类型与格式Hadoop之前的APIHadoop的MapReduce中,map和reduce函数遵循如下常
22、规格式:map:(K1,V1)list(K2,V2)reduce:(K2,list(V2)list(K3,V3)Mapper的接口:publicinterfaceMapperextendsJobConfigurable,Closeablevoidmap(K1key,V1value,OutputCollectoroutput,Reporterreporter)throwsIOException;Reduce的接口:publicinterfaceReducerextendsJobConfigurable,Closeablevoidreduce(K2key,Iteratorvalues,Output
23、Collectoroutput,Reporterreporter)throwsIOException;/outputCollector是为了输出key/value对,/Reporter是用来更新计数和状态信息。高级软件人才实作培训专家高级软件人才实作培训专家!Hadoop之后的APIHadoop的MapReduce中,map和reduce函数遵循如下常规格式:map:(K1,V1)list(K2,V2)reduce:(K2,list(V2)list(K3,V3)Mapper的接口:protected void map(KEY key,VALUE value,protected void map
24、(KEY key,VALUE value,Context context)throws IOException,InterruptedException throws IOException,InterruptedException Reduce的接口:protected void reduce(KEY key,Iterable values,Context contextprotected void reduce(KEY key,Iterable values,Context context )throws IOException,InterruptedException throws IO
25、Exception,InterruptedException/Context是上下文对象,这里Context等同于OutputCollector和Reporter两个函数的功能。高级软件人才实作培训专家高级软件人才实作培训专家!mapreduce的数据类型与java类型对应关系高级软件人才实作培训专家高级软件人才实作培训专家!Writable接口1.对Java中的int型进行封装那么就是hadoop中的IntWritable类在写程序时可以把IntWritable可以看着是int类型,它实现了WritableComparable接口。WritableComparable又是Writable、接
26、口的子接口。2.Writable类对所有的Java基本类型进行封装:如:boolean-BooleanWritable;Byte-ByteWritable3.我们可以自定义Writable接口,来编写更复杂的结构的类。核心:hadoop有自己一套的I/O机制。I/O类都必须实现Writable接口。高级软件人才实作培训专家高级软件人才实作培训专家!实现自定义的mapreduce类型public class LogKey implements WritableComparablepublic class LogKey implements WritableComparable private S
27、tring customerId;private String customerId;private String dateTime;private String dateTime;private String domain;private String domain;public void readFields(DataInput in)throws IOException public void readFields(DataInput in)throws IOException customerId=in.readUTF();dateTime=in.readUTF();domain=in
28、.readUTF();public void write(DataOutput out)throws IOException public void write(DataOutput out)throws IOException out.writeUTF(customerId);out.writeUTF(dateTime);out.writeUTF(domain);/当我们在实际开发的时候会遇到多个当我们在实际开发的时候会遇到多个keykey的时候,的时候,mapreducemapreduce自带的类型是不能满足我们的自带的类型是不能满足我们的需求,这样我们就要自己来定制化需求,这样我们就要自
29、己来定制化KeyKey和和ValueValue。47高级软件人才实作培训专家高级软件人才实作培训专家!最小的MapReduce驱动public class MinimalMapReduceWithDefaults extends Configured implements Tool public int run(String args)throws IOException JobConf conf=JobBuilder.parseInputAndOutput(this,getConf(),args);if(conf=null)return-1;conf.setInputFormat(TextI
30、nputFormat.class);conf.setInputFormat(TextInputFormat.class);conf.setNumMapTasks(1);conf.setNumMapTasks(1);conf.setMapperClass(IdentityMapper.class);conf.setMapperClass(IdentityMapper.class);conf.setMapRunnerClass(MapRunner.class);conf.setMapRunnerClass(MapRunner.class);conf.setMapOutputKeyClass(Lon
31、gWritable.class);conf.setMapOutputKeyClass(LongWritable.class);conf.setMapOutputValueClass(Text.class);conf.setMapOutputValueClass(Text.class);conf.setPartitionerClass(HashPartitioner.class);conf.setPartitionerClass(HashPartitioner.class);conf.setNumReduceTasks(1);conf.setNumReduceTasks(1);conf.setR
32、educerClass(IdentityReducer.class);conf.setReducerClass(IdentityReducer.class);conf.setOutputKeyClass(LongWritable.class);conf.setOutputKeyClass(LongWritable.class);conf.setOutputValueClass(Text.class);conf.setOutputValueClass(Text.class);conf.setOutputFormat(TextOutputFormat.class);conf.setOutputFo
33、rmat(TextOutputFormat.class);JobClient.runJob(conf);return 0;public static void main(String args)throws Exception int exitCode=ToolRunner.run(new MinimalMapReduceWithDefaults(),args);System.exit(exitCode);48高级软件人才实作培训专家高级软件人才实作培训专家!mapreduce驱动默认的设置高级软件人才实作培训专家高级软件人才实作培训专家!Combiners和Partitioner编程Comb
34、iners的作用:每一个map可能会产生大量的输出,combiner的作用就是在map端对输出先做一次合并,以减少传输到reducer的数据量,1)combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。如下所示:map:(K1,V1)list(K2,V2)combine:(K2,list(V2)list(K2,V2)reduce:(K2,list(V2)list(K3,V3)2)combiner还具有类似本地的reduce功能.例如hadoop自带的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示:m
35、ap:(K1,V1)list(K2,V2)combine:(K2,list(V2)list(K3,V3)reduce:(K3,list(V3)list(K4,V4)3)如果不用combiner,那么,所有的结果都是reduce完成,效率会相对低下。使用combiner,先完成的map会在本地聚合,提升速度。4)对于hadoop自带的wordcount的例子,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。注意:combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则
36、将导致输出的结果不正确。Combiner的输出是Reducer的输入,Combiner绝不能改变最终的计算结果。所以从我的想法来看,Combiner只应该用于那种Reduce的输入key/value与输出key/value类型完全一致,且不影响最终结果的场景。比如累加,最大值等。高级软件人才实作培训专家高级软件人才实作培训专家!Combiners分析假设有两个map。第一个map的输出为:(1950,0)(1950,20)(1950,10)第二个map输出为:(1950,25)(1950,15)(1950,30)Reduce函数被调用是,输入如下:(1950,0,20,10,25,15,30)
37、因为30是最大的值,所以输出如下:(1950,30)如果我们使用 combiner:那么reduce调用的时候传入的数据如下:(1950,20,30)-(1950,30)用表达式表示为:Max(0,20,10,25,15,30)=max(max(0,20,10),max(25,15,30)=max(20,30)=30高级软件人才实作培训专家高级软件人才实作培训专家!使用 Combiners要小心刚才我们是计算最大值可以使用Combiners能提高效率。如果我们要是求平均值呢?Avg(0,20,10,25,15,30)=15如果使用Combiner会得到什么样的结果呢?第一个map输出为:avg
38、(0,20,10)=10第二个map输出为:Avg(25,15,30)=23输入到reduce出来的结果为:Avg(10,23)=17.517.5和15?所以:使用combiner一定要注意。高级软件人才实作培训专家高级软件人才实作培训专家!Partitioner分析Partitioner在mapreduce的位置:高级软件人才实作培训专家高级软件人才实作培训专家!mapreduce提供的PatitionerPartition主要作用就是将map的结果发送到相应的reduce。这就对partition有两个要求:1)均衡负载,尽量的将工作均匀的分配给不同的reduce。2)效率,分配速度一定要
39、快。mapreduce提供的Patitioner高级软件人才实作培训专家高级软件人才实作培训专家!1.Partitioner是partitioner的基类,如果需要定制partitioner也需要继承该类。2.HashPartitioner是mapreduce的默认partitioner。计算方法是1.whichreducer=(key.hashCode()&Integer.MAX_VALUE)%numReduceTasks,得到当前的目的reducer。BinaryPatitioner继承于Partitioner,是Partitioner的偏特化子类。该类提供leftOffset和right
40、Offset,在计算whichreducer时仅对键值K的rightOffset,leftOffset这个区间取hash。1.Whichreducer=(hash&Integer.MAX_VALUE)%numReduceTasksKeyFieldBasedPartitioner也是基于hash的个partitioner。和BinaryPatitioner不同,它提供了多个区间用于计算hash。当区间数为0时KeyFieldBasedPartitioner退化成HashPartitioner。5.TotalOrderPartitioner这个类可以实现输出的全排序。不同于以上3个partitio
41、ner,这个类并不是基于hash的。在下一节里详细的介绍totalorderpartitioner。高级软件人才实作培训专家高级软件人才实作培训专家!自定义的Partitioner1)为何使用Partitioner,主要是想reduce的结果能够根据key再次分类输出到不同的文件夹中。2)结果能够直观,同时做到对数据结果的简单的统计分析。需求:1、输入的数据文件内容如下(1条数据内容少,1条数据内容超长,3条数据内容正常):Kaka128hua026chao1tao122mao029222、目的是为了分别输出结果,正确的结果输出到一个文本,太短的数据输出到一个文本,太长的输出到一个文本,共三个文本输出。Patitioner接口:public int getPartition(Text key,Text value,int numPartitions);numPartitions为为Reduce的个数。的个数。注:在本地作业运行器上运行时,只支持注:在本地作业运行器上运行时,只支持0个或一个个或一个Reduce。
限制150内