《大数据存储与处理-第三讲.ppt》由会员分享,可在线阅读,更多相关《大数据存储与处理-第三讲.ppt(84页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1本讲内容本讲内容原理Hadoop Hadoop 基本架构基本架构HDFS HDFS 文件系统文件系统MapReduce MapReduce 分布式计算框架分布式计算框架实践安装与配置安装与配置编写编写MapReduceMapReduce程序程序介绍背景背景HadoopHadoop起源起源成功的案例成功的案例2你发现:目前的硬盘容量目前的硬盘容量1T1T,速度,速度100MB/s100MB/s 。你发现:要把现在的硬盘数据刷一遍,要两个多小时,太可怕了。设想:设想:硬盘读取速度永远满足要求硬盘读取速度永远满足要求!而Hadoop就是一个并行处理海量数据的工具。我们只能采用并行计算一个分布式文件
2、系统和并行执行环境(框架)让用户便捷地处理海量数据Apache软件基金会下面的一个开源项目目前Yahoo!是最主要的贡献者4Hadoop是什么?ApacheLucene开源的高性能全文检索工具包ApacheNutch开源的Web搜索引擎Google三大论文MapReduce/GFS/BigTableApacheHadoop大规模数据处理5Hadoop起源扩容能力(容能力(Scalable):能可靠地(reliably)存储和处理千兆字节(PB)数据。成本低(成本低(Economical):可以通过普通机器组成的服务器群来分发以及处理数据。这些服务器群总计可达数千个节点。高效率(高效率(Effi
3、cient):通过分发数据,hadoop可以在数据所在的节点上并行地(parallel)处理它们,这使得处理非常的快速。可靠性(可靠性(Reliable):hadoop能自动地维护数据的多份复制,并且在任务失败后能自动地重新部署(redeploy)计算任务。6Hadoop的特点7Hadoop越来越火据估计,到据估计,到20152015年,全年,全世界世界一半以上一半以上的数的数据将涉及据将涉及HadoopHadoop那我们就来看看一些成功的案例:不是不是可以解决数据中可以解决数据中心和数据管理方面所有心和数据管理方面所有难题的灵丹妙药难题的灵丹妙药雅虎北京全球软件研发中心IBMFacebook
4、AmazonYahoo!中国移动研究院英特尔研究院百度、腾讯、新浪、搜狐、淘宝8谁在用Hadoop?YahooHadoop应用揭秘中国移动联通海量上网日志数据9Hadoop应用案例2010年10月时:Yahoo目前有超过38000台服务器,有超过4000个以上的服务器集群,数据总量达到了170PB,每日的数据增量在10TB以上。10YahooHadoop应用揭秘Yahoo的Hadoop应用包含有搜索、日志处理(Analytics,Reporting,Buzz)、用户建模、内容优化,垃圾邮件过滤器以及广告计算等。如何利用Hadoop对海量数据进行优化处理是Yahoo正在致力于工作的内容。以网络分
5、析为例,Yahoo目前有超过100100亿个网页,1PB的网页数据内容,2万亿条链接,每日面临这300TB的数据输出。“在应用Hadoop前,实施这一过程我们大概需要1个月的时间,但应用后仅需要1周时间”11YahooHadoop应用揭秘“再以Yahoo搜索为例,我们的服务器上保留有用户三年来的搜索记录,这个数据是由超过 10TB10TB的自然语言文本库所组成”,“如果数据重整,我们在应用Hadoop前需要1 1个月个月的时间进行处理,而在有了Hadoop后仅仅需要3030分分钟。”Hadoop也非万能,它采用Java实现,Java的IO处理虽然没有性能瓶颈,但是对于CPU密集型的任务是一个麻
6、烦,因此,有些算法效率不会提高很多。12YahooHadoop应用揭秘中国移动大云在中国移动内部,Hadoop已经成为一个重要的数据挖掘工具,中国移动已经把Hadoop的群用来进行闭环的数据挖掘,和传统算法的数据挖掘性能相比,有很大的提升,而且成本非常低。13中国移动14Hadoop生态系统HDFSMapReduceMapReduceHiveHivePigPigHbaseHbaseZookeeperZookeeper15Hadoop基本架构物理分布的Hadoop集群16Hadoop基本架构物理部署为以流式数据访问模式存储超大文件而设计的文件系统超大文件指的是几百MB,几百GB,几百TB,甚至几
7、百PB流式数据访问HDFS建立的思想是:一次写入、多次读取模式是最高效的。商用硬件HDFS不需要运行在昂贵并且高可靠的硬件上。17HDFS文件系统设计目标硬件错误是常态,因此需要冗余。程序采用“数据就近”原则分配节点执行。18HDFS文件系统设计基础与目标存储并管理PB级数据处理非结构化数据注重数据处理的吞吐量(延迟不敏感)应用模式为:write-once-read-many存取模式(无数据一致性问题)19HDFS文件系统能做什么?存储小文件(不建议使用)大量的随机读(不建议使用)需要对文件的修改(不支持)多用户写入(不支持)20HDFS文件系统不适合做什么?文件切分成块(默认大小64M64M
8、),以块为单位,每个块有多个副本存储在不同的机器上,副本数可在文件生成时指定(默认3)NameNodeNameNode是主节点,存储文件的元数据如文件名,文件目录结构,文件属性(生成时间,副本数,文件权限),以及每个文件的块列表以及块所在的DataNode等等DataNodeDataNode在本地文件系统存储文件块数据,以及块数据的校验和可以创建、删除、移动或重命名文件,当文件创建、写入和关闭之后不能修改文件内容。21HDFS文件系统文件22HDFS文件系统文件23HDFS文件系统文件24HDFS文件系统主要组件的功能namenodedatanode存储元数据存储文件内容元数据保存在内存中文件
9、内容保存在磁盘保存文件,block,datanode之间的映射关系维护了blockid到datanode本地文件的映射关系Namenode是一个中心服务器,单一节点(简化系统的设计和实现),负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。文件操作,NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,跟文件内容相关的数据流不经过NameNode,只会询问它跟那个DataNode联系,否则NameNode会成为系统的瓶颈25HDFS文件系统NameNode副本存放在那些DataNode上由NameNode来控制,根据全局情况做出块放置决定,读取
10、文件时NameNode尽量让用户先读取最近的副本,降低带块消耗和读取时延Namenode全权管理数据块的复制,它周期性地从集群中的每个Datanode接收心跳信号和块状态报告(Blockreport)。接收到心跳信号意味着该Datanode节点工作正常。块状态报告包含了一个该Datanode上所有数据块的列表。26HDFS文件系统NameNode一个数据块在DataNode以文件存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳DataNode启动后向NameNode注册,通过后,周期性(1 1小小时)的向NameNode上报所有的块信息。心跳
11、是每3 3秒秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过1010分分钟没有收到某个DataNode 的心跳,则认为该节点不可用。集群运行中可以安全加入和退出一些机器27HDFS文件系统DataNode28HDFS文件系统系统架构一个名字节点和多个数据节点数据复制(冗余机制)存放的位置(机架感知策略)故障检测数据节点心跳包(检测是否宕机)块报告(安全模式下检测)数据完整性检测(校验和比较)名字节点(日志文件,镜像文件)空间回收机制29HDFS文件系统保障可靠性的措施HDFS如何写文件?Write packetCreate
12、file Write packetWrite packetSend ackSend ackSend ackClose file客户端联系namenode,在namenode命名空间中创建一个新文件,此时,namenode会检查文件是否存在和客户端是否有权限创建新文件,检查通过,就会创建一条记录。然后客户端写文件时,会取得合适的3个datanodes形成一个管线DataStreamer将数据包流式的传输到管线中第一个datanode,第一个datanode存储数据包并发送的第二个datanode,第二个datanode存储数据包并发送的第三个datanode。当收到管道中所有datanodes的
13、确认信息后对应数据包才会从确认队列中删除。如此反复,直到所有的数据包,都写完,最后向namenode报告写入完成。3132HDFS如何读文件?Read blockOpen fileClose fileGet block location客户端联系NameNode,得到所有数据块信息,以及数据块对应的所有数据服务器的位置信息尝试从某个数据块对应的一组数据服务器中选出一个,进行连接数据被一个包一个包发送回客户端,等到整个数据块的数据都被读取完了,就会断开此链接,尝试连接下一个数据块对应的数据服务器,整个流程,依次如此反复,直到所有想读的都读取完了为止。Namenode并不实际参与数据传输。33读文
14、件流程冗余备份策略机架策略心跳机制安全模式校验和回收站元数据保护34HDFS的可靠性回顾3535什么是MapReduce?语言支持:语言支持:JavaJavaC+(through pipes)C+(through pipes)script languages(through streaming)script languages(through streaming)分布式技术框架分布式技术框架处理海量数据(1TB)上百/上千CPU实现并行处理简单地实现以上目的移动计算比移动数据更划算36MapReduce设计目的大规模数据处理自动实现分布式并行计算容错提供状态监控工具模型抽象简洁,程序员易用计算
15、划到大量机器上组件间不允许任意数据共享,避免保保持同步而产生的通信开销,所有在MapReduce上的数据不可变节点间通信只在产生新输出37MapReduce特性38MapReduce示例The weather is goodThis guyis a good manToday is goodGood manis goodthe 1weather 1is 1good 1today 1is 1good 1this 1guy 1is 1a 1good 1man 1good 1man 1is 1good 1a 1 good 1good 1good 1good 1good 1man 1man 1the
16、1weather 1today 1guy 1is 1is 1is 1is 1this 1a 1good 5guy 1is 4man 2the 1this 1today 1weather 1mapping任务平等,Mapper无特定标识,处理任意输入每个mapper本地进行中间值交换,同键值送到同一个reducer。唯一的结点通信数据传送由平台处理39MapReduce数据流40MapReduce数据流41从Map到Reducer数据整体传输过程输入块InputSplit:文件拆分成块Mapred-default.xml设置块大小输入格式定义了组成mapping阶段的map任务列表,每个任务对应
17、一个输入块。据InputSplit地址分配任务(最大任务数)42MapReduce数据流输入每个map任务都有一个用来写入数据的循环内存缓冲区。这个缓冲区默认大小是100M当缓冲区中的数据量达到一定阀值(默认0.8),系统将会启动一个后台进程把缓冲区的数据spill到磁盘,spill过程中,map的输出会继续写入到缓冲区,但如果缓冲区已满,map就会被阻塞直到spill完成。43MapReduce数据流Map结果输出当map开始产生输出时,并不是简单的写入到磁盘,先是写入到缓冲区,并进行预排序,以提升效率。44MapReduce数据流shuffle和sort当map开始产生输出时,并不是简单的
18、写入到磁盘,先是写入到缓冲区,并进行预排序,以提升效率。45MapReduce数据流shuffle和sortPartitons:每一个reduce节点会分派到中间输出的键集合中的一个不同的子集合Partitioner类决定键值对去向,默认分类器计算键哈希值Spill线程把缓冲区数据写到磁盘前,会对它进行一个二次快速排序,首先根据数据属性的partition排序,然后每个partition中再按照key排序输出包括一个索引文件和数据文件46MapReduce数据流Partitons如果设定了combiner,将在排序输出的基础上运行Combiner就是一个minreduce,它在执行map的节点
19、本身执行,先对map的输出做一次简单的reduce,使得map的输出更紧凑,更少的数据被写入磁盘和传输给reduce47MapReduce数据流combiner每当内存中的数据到达spill阀值的时候,都会产生一个新的spill文件,所以在map任务写完它的最后一个输出记录时,可能会有多个spill文件。在map任务完成前,所有的spill文件将会被归并排序为一个索引文件和数据文件。当spill文件归并完毕后,map将删除所有的临时spill文件,并告知tasktracker任务完成。48MapReduce数据流map输出结束Map的输出文件放置在map任务的tasktracker的本地磁盘上
20、,它是运行reduce任务的tasktracker所需要的输入数据。Reduce任务的输入数据分布在集群的多个map任务的输出中,map任务可能会在不同的时间内完成,只有有其中的一个map任务完成,reduce任务就会开始拷贝它的输出,这个阶段称之为拷贝阶段Reduce任务拥有多个拷贝线程,可以并行的获取map输出,线程数默认是549MapReduce数据流copy拷贝来的数据叠加在磁盘上,有一个后台线程会将它们合并为了更大的排序文件,节省后期的归并时间。当所有的map输出都拷贝后,reduce任务进入排序节点,这个阶段会对所有的map输出进行归并排序,这个工作会重复多次假设有50个map输出
21、,并且归并因子是10,则需要5次归并,没每次会把10个文件归并为一个,最终生成5个中间文件。之后,系统不再把5个中间文件归并成一个文件,而是排序后直接交给reduce函数,省去了向磁盘写入数据这一步。50MapReduce数据流copy每个reduce任务都会创建一个Reducer实例reducer的reduce()方法只会调用一次,它会接收一个键和关联到键的所有值的一个迭代器,迭代器会以一个未定义的顺序返回关联到同一个键的值。51MapReduce数据流Reduce键值对通过OutputCollector被写到输出文件中,写入的方式由输出格式控制。每一个reducer会把结果输出写在公共文件
22、夹中一个单独的文件内,这些文件的命名一般是part-nnnnn,nnnnn是关联到某个reduce任务的partition的id52MapReduce数据流输出输出格式输出格式描述描述TextOutputFormat默认的输出格式,以 key t value 的方式输出行SequenceFileOutputFormat输出二进制文件,适合于读取为子MapReduce作业的输入NullOutputFormat忽略收到的数据,即不做输出53单一Reduce处理54多Reduce处理55无Redue处理56MapReduce工作原理JobTracker一直在等待JobClient提交作业TaskTr
23、acker每隔3秒向 JobTracker发送心跳询问有没有任务可做,如果有,让其派发任务给它执行这是一道pull过程:slave主动向master拉生意57MapReduce工作原理58Hadoop中的MapReduce59MapReduce作业执行流程默认为先进先出作业队列调度支持公平调度支持容量调度60作业调度机制推测执行:既如果jobtracker发现拖后腿的任务,会再启动相同的备份任务,然后那个先执行完成就会去kill掉另外一个。因此在监控网页上经常能看到正常执行完成的作业有被kill的任务。推测执行默认打开,但是如果是代码的问题,并不能解决问题,而且会使集群更慢,通过mapred-
24、side.xml配置文件中设置和可为map任务或reduce任务开启或者关闭推测执行。重用jvm,可以省去启动新的jvm消耗时间,mapred-side.xml文件中设置单个jvm最大执行的任务数(1,1或-1表示没有限制)忽略模式:任务在读取任务数据失败2次之后,会把数据位置报告给jobtracker,然后重新启动该任务并在遇到所记录的坏数据位置时直接跳过(默认关闭,同SkipBadRecord方法打开)61任务执行优化硬件故障是指jobtracker故障或tasktracker故障Jobtracker是单点,若发生故障目前hadoop还无法处理,唯有选择最牢靠的硬件作为jobtracker
25、Jobtracker通过心跳信号(周期1分钟)了解tasktracker是否发生故障或者负载过于严重Jobtracker将从任务节点列表中移除发生故障的tasktracker。如果故障节点在执行map任务并且尚未完成,jobtracker会要求其他节点重新执行此map任务如果故障节点在执行reduce任务并且尚未完成,jobtracker会要求其他节点重新执行尚未完成的reduce任务。62错误处理机制硬件故障由于代码bug或进程崩溃引起任务失败Jvm自动退出,向tasktracker父进程发生错误信息,错误信息也会写入日志Tasktracker监听程序会发现进程退出,或者进程很久没有更新信息
26、送回,将任务标记为失败标记任务失败后,任务计数器减1以便接受新的任务,并通过心跳信号通知jobtracker任务失败的信息Jobtracker获悉任务失败后,将把该任务重新放入调度队列,重新分配出去执行如果一个任务失败超过4次(可配置),将不会再执行,同时宣告任务作业失败。63错误处理机制任务失败64大纲原理Hadoop Hadoop 基本架构基本架构HDFS HDFS 文件系统文件系统MapReduce MapReduce 分布式计算框架分布式计算框架实践安装与配置安装与配置编写编写MapReduceMapReduce程序程序介绍背景背景HadoopHadoop起源起源成功的案例成功的案例H
27、adoop安装配置编写MapReduce程序65实践支持平台GNU/LinuxWindows(Cygwin)必需软件JDK1.6以上SSH无密码访问66必要条件格式化HDFSHadoopnamenode-format运行脚本start-all.shstart-dfs.shstart-mapred.shjps命令查询java进程67启动系统通过浏览器和http访问jobtracker所在节点的50030端口监控jobtracker通过浏览器和http访问namenode所在节点的50070端口监控集群68通过Web了解hadoop的状况69Jobtracker70NameNode命令行方式操作7
28、1HDFS文件操作Hadoop没有当前目录的概念,72列出HDFS下的文件73上传文件到HDFS74将HDFS文件复制到本地75查看HDFS基本统计信息在新节点安装好hadoop把namenode的相关配置文件复制到该节点修改masters和slaves文件,添加该节点设置ssh无密码登陆该节点单独启动该节点上的datanode和tasktracker(hadoop-daemon.shstartdatanode/tasktracker)运行start-balancer.sh进行数据负载均衡76怎么添加节点Page1:theweatherisgood.Page2:goodweatherisgoo
29、d.77举例:单词计数 (key,value)(the,1)(weather,1)(is,1)(good,1)(key,value)(good,1)(weather,1)(is,1)(good,1)(key,value)(the,1)(weather,2)(is,2)(good,3)Map1Map2Reducevoidmap(LongWritablekey,Textvalue,OutputCollectoroutput,Reporterreporter)Stringline=value.toString();StringTokenizert=newStringTokenizer(line);w
30、hile(t.hasMoreTokens()word.set(t.nextToken();output.collect(word,one);78Map函数voidreduce(Textkey,Iteratorvalues,OutputCollectoroutput,Reporterreporter)intsum=0;while(values.hasNext()sum+=value.next().get();output.collect(key,newIntWritable(sum);79Reduce函数重写Map/Reduce函数设置Job属性打包程序并向JobTracker提交监控程序进度得
31、到最终结果80程序运行日志分析排序搜索广告计算,广告优化、分析,点击流分析,链接分析搜索关键字进行内容分类搜索引擎,创建索引word计数,统计值计算,统计数据,过滤,分析,查询垃圾数据分析数据分析机器学习数据挖掘大规模图像转换(纽约时报使用Hadoop和EC2在36个小时内将4TB的TIFF图像包括405K大TIFF图像,3.3MSGML文章和405KXML文件转换为800K适合在Web上使用的PNG图像。)81MapReduce的应用习题1:基本操作上传文件到HDFS查看/设置文件的备份数删除文件、文件夹习题2:查看文件查看文件状态查看文件内容习题3:使用JavaAPI读取文件内容82练习一:使用HadoopHDFS习题1:基本操作运行示例代码wordcount查看任务结果杀死任务习题2:查看任务状态命令行查看web页面查看83练习二:maprduce习题3:阅读理解wordcount代码习题4:编写MapReduce逻辑:分布式Grep习题5:编写MapReduce逻辑:Join84练习二:maprduce
限制150内