在线旅游:目前全球范围内80%的在线旅游网站都是在使用Cloudera公司提供的Hadoop发行版,其中SearchBI网站曾经报道过的Expedia也在其中。
移动数据:Cloudera运营总监称,美国有70%的智能手机数据服务背后都是由Hadoop来支撑的,也就是说,包括数据的存储以及无线运营商的数据处理等,都是在利用Hadoop技术。
电子商务:这一场景应该是非常确定的,eBay就是最大的实践者之一。国内的电商在Hadoop技术上也是储备颇为雄厚的。
能源开采:美国Chevron公司是全美第二大石油公司,他们的IT部门主管介绍了Chevron使用Hadoop的经验,他们利用Hadoop进行数据的收集和处理,其中这些数据是海洋的地震数据,以便于他们找到油矿的位置。
节能:另外一家能源服务商Opower也在使用Hadoop,为消费者提供节约电费的服务,其中对用户电费单进行了预测分析。
基础架构管理:这是一个非常基础的应用场景,用户可以用Hadoop从服务器、交换机以及其他的设备中收集并分析数据。
图像处理:创业公司Skybox Imaging使用Hadoop来存储并处理图片数据,从卫星中拍摄的高清图像中探测地理变化。
诈骗检测:这个场景用户接触的比较少,一般金融服务或者政府机构会用到。利用Hadoop来存储所有的客户交易数据,包括一些非结构化的数据,能够帮助机构发现客户的异常活动,预防欺诈行为。
IT安全:除企业IT基础机构的管理之外,Hadoop还可以用来处理机器生成数据以便甄别来自恶意软件或者网络中的攻击。
医疗保健:医疗行业也会用到Hadoop,像IBM的Watson就会使用Hadoop集群作为其服务的基础,包括语义分析等高级分析技术等。医疗机构可以利用语义分析为患者提供医护人员,并协助医生更好地为患者进行诊断。
Hadoop大数据分析平台,是一个由Apache基金会所开发的分布式系统基础架构。
用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。
HDFS
Hadoop实现了一个分布式文件系统(Hadoop Distributed File System)简称HDFS。
HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;
它提供高吞吐量来访问应用程序的数据,适合那些
有着超大数据集的应用程序。
HDFS放宽了POSIX的要求,可以以流的形式访问文件系统中的数据。
Hadoop的框架最核心的设计就是:HDFS和MapReduce。
HDFS为海量的数据提供了存储,而MapReduce则为海量的数据提供了计算
HDFS架构采用主从架构(master/slave)。一个典型的HDFS集群包含一个NameNode节点和多个DataNode节点。
NameNode节点负责整个HDFS文件系统中的文件的元数据的保管和管理,集群中通常只有一台机器运行NameNode实例,DataNode节点保存文件中的数据,集群中的机器分别运行一个DataNode实例。
DataNode节点通过心跳机制与NamaNode节点进行定时的通信。
HDFS读写的原理
客户端向NameNode发出写文件请求。 检查是否已存在文件、检查权限。若通过检查,直接先将操作写入EditLog,并返回输出流对象。
(注:WAL,write ahead
log,先写Log,再写内存,因为EditLog记录的是最新的HDFS客户端执行所有的写操作。如果后续真实写操作失败了,由于在真实写操作之前,操作就被写入EditLog中了,故EditLog中仍会有记录,我们不用担心后续client读不到相应的数据块,因为在第5步中DataNode收到块后会有一返回确认信息,若没写成功,发送端没收到确认信息,会一直重试,直到成功)client端按128MB的块切分文件。
client将NameNode返回的分配的可写的DataNode列表和Data数据一同发送给最近的第一个DataNode节点,此后client端和NameNode分配的多个DataNode构成pipeline管道,client端向输出流对象中写数据。client每向第一个DataNode写入一个packet,这个packet便会直接在pipeline里传给第二个、第三个…DataNode。
(注:并不是写好一个块或一整个文件后才向后分发)每个DataNode写完一个块后,会返回确认信息。
(注:并不是每写完一个packet后就返回确认信息,因为packet中的每个chunk都携带校验信息,没必要每写一个就汇报一下,这样效率太慢。正确的做法是写完一个block块后,对校验信息进行汇总分析,就能得出是否有块写错的情况发生)写完数据,关闭输出流。发送完成信号给NameNode。
(注:发送完成信号的时机取决于集群是强一致性还是最终一致性,强一致性则需要所有DataNode写完后才向NameNode汇报。最终一致性则其中任意一个DataNode写完后就能单独向NameNode汇报,HDFS一般情况下都是强调强一致性)
读详细步骤:
client访问NameNode,查询元数据信息,获得这个文件的数据块位置列表,返回输入流对象。
就近挑选一台datanode服务器,请求建立输入流 。
DataNode向输入流中中写数据,以packet为单位来校验。
关闭输入流
节点故障
通信故障(网络)
数据块损坏
1)节点的故障检测
dn默认情况下每隔3秒向nn发送心跳信息,可能是网络故障,或者dn出故障了。
nn十分钟接收不到dn的信息,认为dn宕机。
2)数据块损坏
网络故障,或者dn的磁盘有坏道。当客户端在dn上写数据时,可能会造成数据块的损坏。
3)如何保证数据完整性?
一次写入,多次读取。hdfs是通过命令来调用api来实现访问的。不像mfs,操作的就是个目录。
数据量特别小的时候,并不适用hdfs。客户端在发送数据的同时,会发送数据的总和校验码,dn在存储数据的同时,也存储了数据的总和校验码,用来保证数据的完整性。校验通过,说明数据完整。
每个dn定期发送完整的(正确的)数据块的信息到nn,nn会校验数据块(block),
nn会根据dn发送的block信息,来更新block列表的信息。4)如何保证客户端往dn上的数据发送成功了?
客户端发送的时候是一个一个block,按照顺序来发送的,一旦接受完毕,dn会向客户端发送ack确认码。
5)nn已经存储完毕,原本存储3份,但是dn3挂了,会怎么样?
nn会自动的把副本数恢复。
1、common
common 及核心公共模块,默认配置(core-site.xml),主要包括Hadoop常用的工具类,由原来的Hadoopcore部分更名而来。
主要包括系统配置工具Configuration、远程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。 它们
为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API2、hdfs
分布式文件系统,提供对应用程序数据的高吞吐量,高伸缩性,高容错性的访问。是Hadoop体系中数据存储管理的基础。它是一个高度容错的系统,能检测和应对硬件故障,用于在低成本的通用硬件上运行。通过流式数据访问,提供高吞吐量应用程序数据访问功能,适合带有大型数据集的应用程序。(namenode+datanode+secondarynode)
3 mapreduce
mapreduce
是一种分而治之思想,是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。mapreduce的运行流程
input->map->shuffle->reduce->output 。
input 数据输入文件分片,map负责就进数据处理,多个mapper之间并行处理,shuffle负责数据混淆分区、排序、拷贝、分组、压缩等操作,完成后将数据传给reduce进行处理,reduce负责对map阶段的数据进行汇总。4、yarn
Yarn是Hadoop集群的资源管理系统,由两部分功能组成,资源管理和任务调度监控主要的组件,ResourceManager:Global(全局)的进程
;NodeManager:运行在每个节点上的进程,
ApplicationMaster:Application-specific(应用级别)的进程,向rm申请资源,对运行在datanode的应用进行监控;Scheduler:是ResourceManager的一个组件,Container:节点上一组CPU和内存资源容器。
1 nameNode
Namenode 管理着文件系统的命令空间。它维护着文件系统树以及文件树中所有的文件和文件夹的元数据,元数据包括编辑日志和镜像文件。
管理这些信息的文件有两个,分别是Namespace 镜像文件和编辑日志文件,编辑日志主要是记录对hdfs进行的修改.镜像文件主要是记录hdfs的文件树形结构.这些信息被Cache在RAM中,当然,这两个文件也会被持久化存储在本地硬盘。
Namenode记录着每个文件中各个块所在的数据节点的位置信息,但是他并不持久化存储这些信息,因为这些信息会在系统启动时从数据节点重建。
namenode除了元数据信息维护外,处理客户端读写请求。
2、datanode
Datanode是文件系统的工作节点,他们根据客户端或者是namenode的调度存储和检索数据,并且定期向namenode发送他们所存储的块(block)的列表。在集群中的从节点服务器运行一个DataNode后台程序,这个后台程序负责把HDFS数据块读写到本地的文件系统。当需要通过客户端读/写某个数据时,先由NameNode告诉客户端去哪个DataNode进行具体的读/写操作,然后,客户端直接与这个DataNode服务器上的后台程序进行通信,并且对相关的数据块进行读/写操作。
3 secondaryNamenode
SecondaryNameNode是辅助NameNode的后台程序。
1)当edits在文件大小或时间临界时,checkpoint会触发secondarynamenode进行工作,
2)NameNode会生成一个新的edits即上图中的edits.new文件,同时SecondaryNameNode会将edits文件和fsimage复制到本地;
3)SecondaryNameNode将本地的fsimage文件加载到内存中,然后再与edits文件进行合并生成一个新的fsimage文件即上图中的Fsimage.ckpt文件;
4)SecondaryNameNode将新生成的Fsimage.ckpt文件复制到NameNode节点;
5)在NameNode结点的edits.new文件和Fsimage.ckpt文件会替换掉原来的edits文件和fsimage文件,至此,刚好是一个轮回即在NameNode中又是edits和fsimage文件了。
6)等待下一次checkpoint触发SecondaryNameNode进行工作,一直这样循环操作。
4.ResourceManage 即资源管理,在YARN中,ResourceManager负责集群中所有资源的统一管理和分配,它接收来自各个节点(NodeManager)的资源汇报信息,并把这些信息按照一定的策略分配给各个应用程序(实际上是ApplicationManager)。RM包括Scheduler(定时调度器)和ApplicationManager(应用管理器)。Schedular负责向应用程序分配资源,它不做监控以及应用程序的状态跟踪,并且不保证会重启应用程序本身或者硬件出错而执行失败的应用程序。ApplicationManager负责接受新的任务,协调并提供在ApplicationMaster容器失败时的重启功能.每个应用程序的AM负责项Scheduler申请资源,以及跟踪这些资源的使用情况和资源调度的监控
5、nodemanager
NM是ResourceManager在slave机器上的代理,负责容器管理,运行具体任务,并监控它们的资源使用情况,以及向ResourceManager/Scheduler提供资源使用报告