【总结】Hadoop剖析
来源:互联网 发布:移动感知测试软件 编辑:程序博客网 时间:2024/06/10 18:23
1,Hadoop简述
- Hadoop是一个开发和运行处理大规模海量数据的软件平台,用户可以在不了解分布式底层细节的情况下,实现在大量计算机组成的集群对海量数据进行高速分布式的计算和存储
- Hadoop框架中最核心设计就是:HDFS和MapReduce。HDFS提供了海量数据的存储,MapReduce提供了对数据的计算
- Hadoop带有用Java语言编写的框架,因此运行在 Linux 生产平台上是非常理想的
- 处理大数据
- Hadoop得以在大数据处理应用中广泛应用得益于其自身在数据提取、变形和加载(ETL)方面上的天然优势
- Hadoop的分布式架构,将大数据处理引擎尽可能的靠近存储,对例如像ETL这样的批处理操作相对合适,因为类似这样操作的批处理结果可以直接走向存储
- Hadoop的MapReduce功能实现了将单个任务打碎,并将碎片任务(Map)发送到多个节点上,之后再以单个数据集的形式加载(Reduce)到数据仓库里
- Hadoop优点
- 高可靠性
- 因为它假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理
- Hadoop按位存储和处理数据的能力值得人们信赖
- 高扩展性
- Hadoop是在可用的计算机集簇间分配数据并完成计算任务的,这些集簇可以方便地扩展到数以千计的节点中
- 可伸缩的,能够处理 PB 级数据
- 高效性
- Hadoop能够在节点之间动态地移动数据,并保证各个节点的动态平衡,因此处理速度非常快
- 它以并行的方式工作,通过并行处理加快处理速度
- 高容错性
- Hadoop能够自动保存数据的多个副本,并且能够自动将失败的任务重新分配
- 低成本
- 与一体机、商用数据仓库以及QlikView、Yonghong Z-Suite等数据集市相比,hadoop是开源的,项目的软件成本因此会大大降低
2,应用场景
- 大数据的实质特性
- 针对增量中海量的结构化,非结构化,半结构数据,在这种情况下,如何快速反复计算挖掘出高效益的市场数据
- 大数据的并行计算
- 数据密集型并行计算:数据量极大,但是计算相对简单的并行处理;如:大规模Web信息搜索
- 计算密集型并行计算:数据量相对不是很大,但是计算较为复杂的并行计算;如:3-D建模与渲染,气象预报,科学计算
- 数据密集与计算密集混合型的并行计算;如: 3-D电影的渲染
- 数据量大的离线场景
- 数据量大:一般真正线上用Hadoop的,集群规模都在上百台到几千台的机器。这种情况下,T级别的数据也是很小的。Coursera上一门课了有句话觉得很不错:Don’t use hadoop, your data isn’t that big
- 离线:Mapreduce框架下,很难处理实时计算,作业都以日志分析这样的线下作业为主。另外,集群中一般都会有大量作业等待被调度,保证资源充分利用
- 数据块大:由于HDFS设计的特点,Hadoop适合处理文件块大的文件。大量的小文件使用Hadoop来处理效率会很低
- 实例:百度每天都会有用户对侧边栏广告进行点击。这些点击都会被记入日志。然后在离线场景下,将大量的日志使用Hadoop进行处理,分析用户习惯等信息
- 场景
- 银行的信用卡业务,当用户刷卡完成一笔消费同时在消费基础上再消费满某个额度,可以免费获得某种奖励,用户可能会心动再去消费,这样就促进和提高银行信用卡消费业务;这个消费额度是通过Hadoop(所谓的“秒级营销”)从海量的业务数据中以秒级的速度计算出该客户的消费记录,并及时反馈这个营销信息到客户手中
- 在淘宝,当你浏览某个商品的时候,及时提示出用Hadoop计算出来你感兴趣的同类商品的产品信息和实时销售情况
- 公司年度报告或者年度环比数据报告会用到Hadoop去计算
- 搜索引擎分析:Hadoop 的最常见用法之一是 Web 搜索。虽然它不是唯一的软件框架应用程序,但作为一个并行数据处理引擎,它的表现非常突出。Hadoop 最有趣的方面之一是 Map and Reduce 流程,它受到Google开发的启发。这个流程称为创建索引,它将 Web爬行器检索到的文本 Web 页面作为输入,并且将这些页面上的单词的频率报告作为结果。然后可以在整个 Web 搜索过程中使用这个结果从已定义的搜索参数中识别内容
- Hadoop的十大应用场景
- 在线旅游
- 目前全球范围内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最适合处理网络信令、上网话单、业务日志这三类数据,这三类数据的最大特点是量大(每天可以达到1T以上)、结构化(有明确的字段含义)、存储时间长(长达1年及以上),使用Hive+MapReduce、HBase等组件刚好能满足统计汇总、点查询等基础需求,能替代大部分IOE产品并与其互补,因此在这些场景下Hadoop独具优势
3,模块和原理
- Hadoop 由许多元素构成,最底部是 Hadoop Distributed File System(HDFS),它存储 Hadoop 集群中所有存储节点上的文件。HDFS(对于本文)的上一层是MapReduce引擎,该引擎由JobTrackers和TaskTrackers组成。Hadoop分布式计算平台核心包括分布式文件系统HDFS、MapReduce处理过程,以及数据仓库工具Hive和分布式数据库Hbase
- HDFS
- HDFS 的架构是基于一组特定的节点构建,一个NameNode和DataNode
- NameNode(仅一个),它在 HDFS 内部提供元数据服务
- 存储在HDFS中的文件被分成块,然后将这些块复制到多个计算机中(DataNode)
- HDFS 内部的所有通信都基于标准的TCP/IP协议
- NameNode
- NameNode 是一个通常在 HDFS 实例中的单独机器上运行的软件。它负责管理文件系统名称空间和控制外部客户机的访问。NameNode 决定是否将文件映射到 DataNode 上的复制块上。对于最常见的 3 个复制块,第一个复制块存储在同一机架的不同节点上,最后一个复制块存储在不同机架的某个节点上
- 实际的 I/O事务并没有经过 NameNode,只有表示 DataNode 和块的文件映射的元数据经过 NameNode。当外部客户机发送请求要求创建文件时,NameNode 会以块标识和该块的第一个副本的 DataNode IP 地址作为响应。这个 NameNode 还会通知其他将要接收该块的副本的 DataNode
- NameNode 在一个称为 FsImage 的文件中存储所有关于文件系统名称空间的信息。这个文件和一个包含所有事务的记录文件(这里是 EditLog)将存储在 NameNode 的本地文件系统上。FsImage 和 EditLog 文件也需要复制副本,以防文件损坏或 NameNode 系统丢失
- NameNode本身不可避免地具有SPOF(Single Point Of Failure)单点失效的风险,主备模式并不能解决这个问题,通过Hadoop Non-stop namenode才能实现100% uptime可用时间
- DataNode
- DataNode 也是一个通常在 HDFS实例中的单独机器上运行的软件。Hadoop 集群包含一个 NameNode 和大量 DataNode。DataNode 通常以机架的形式组织,机架通过一个交换机将所有系统连接起来。Hadoop 的一个假设是:机架内部节点之间的传输速度快于机架间节点的传输速度
- DataNode 响应来自 HDFS 客户机的读写请求。它们还响应来自 NameNode 的创建、删除和复制块的命令。NameNode 依赖来自每个 DataNode 的定期心跳(heartbeat)消息。每条消息都包含一个块报告,NameNode 可以根据这个报告验证块映射和其他文件系统元数据。如果 DataNode 不能发送心跳消息,NameNode 将采取修复措施,重新复制在该节点上丢失的块
- 文件操作
- HDFS 并不是一个万能的文件系统。它的主要目的是支持以流的形式访问写入的大型文件
- 如果客户机想将文件写到 HDFS 上,首先需要将该文件缓存到本地的临时存储。如果缓存的数据大于所需的 HDFS 块大小,创建文件的请求将发送给 NameNode。NameNode 将以 DataNode 标识和目标块响应客户机
- 同时也通知将要保存文件块副本的 DataNode。当客户机开始将临时文件发送给第一个 DataNode 时,将立即通过管道方式将块内容转发给副本 DataNode。客户机也负责创建保存在相同 HDFS名称空间中的校验和(checksum)文件
- 在最后的文件块发送之后,NameNode 将文件创建提交到它的持久化元数据存储(在 EditLog 和 FsImage 文件)
- MapReduce
- 最简单的 MapReduce应用程序至少包含 3 个部分:一个 Map 函数、一个 Reduce 函数和一个 main 函数。main 函数将作业控制和文件输入/输出结合起来。在这点上,Hadoop 提供了大量的接口和抽象类,从而为 Hadoop应用程序开发人员提供许多工具,可用于调试和性能度量等
- MapReduce 本身就是用于并行处理大数据集的软件框架。MapReduce 的根源是函数性编程中的 map 和 reduce 函数。它由两个可能包含有许多实例(许多 Map 和 Reduce)的操作组成。Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表
- 一个代表客户机在单个主系统上启动的 MapReduce应用程序称为 JobTracker。类似于 NameNode,它是 Hadoop 集群中惟一负责控制 MapReduce应用程序的系统。在应用程序提交之后,将提供包含在 HDFS 中的输入和输出目录。JobTracker 使用文件块信息(物理量和位置)确定如何创建其他 TaskTracker 从属任务。MapReduce应用程序被复制到每个出现输入文件块的节点。将为特定节点上的每个文件块创建一个惟一的从属任务。每个 TaskTracker 将状态和完成信息报告给 JobTracker
- 并没有将存储移动到某个位置以供处理,而是将处理移动到存储。这通过根据集群中的节点数调节处理,因此支持高效的数据处理
- Hadoop和MapReduce的关系和区别
- Hadoop是一种分布式数据和计算的框架。它很擅长存储大量的半结构化的数据集。数据可以随机存放,所以一个磁盘的失败并不会带来数据丢失。Hadoop也非常擅长分布式计算——快速地跨多台机器处理大型数据集合
- MapReduce是处理大量半结构化数据集合的编程模型。编程模型是一种处理并结构化特定问题的方式。例如,在一个关系数据库中,使用一种集合语言执行查询,如SQL。告诉语言想要的结果,并将它提交给系统来计算出如何产生计算。还可以用更传统的语言(C++,Java),一步步地来解决问题。这是两种不同的编程模型,MapReduce就是另外一种
- MapReduce和Hadoop是相互独立的,实际上又能相互配合工作得很好
- 核心架构
- MapReduce 流程的概念流
- 显示处理和存储的物理分布的 Hadoop 集群
0 0
- 【总结】Hadoop剖析
- Hadoop - YARN NodeManager 剖析
- Hadoop -YARN ResourceManager 剖析
- Hadoop - MapReduce MRAppMaster-剖析
- Hadoop - MapReduce MRAppMaster-剖析
- Hadoop 文件读取剖析
- hadoop namenode深度剖析
- Annotated Hadoop (源码剖析)
- Annotated Hadoop (源码剖析)
- 深入剖析Hadoop程序日志
- Hadoop I/O管道剖析
- 深入剖析HADOOP程序日志
- 深入剖析HADOOP程序日志
- Hadoop文件写入(详细剖析)
- hadoop环境搭建图文剖析
- Hadoop YARN配置参数剖析
- Hadoop YARN配置参数剖析
- Hadoop - Ambari集群管理剖析
- 【总结】搜索服务Solr
- 执行hibernate报错“node to traverse cannot be null”问题的解决
- Redis学习记录之命令Pub/Sub(十六)
- android开机动画启动流程
- Android DrawingCache超詳細解析,解決getDrawingCache方法回傳null
- 【总结】Hadoop剖析
- getWindow().setFlags()方法
- iframe自适应父容器宽高
- javascript 中 apply 方法的使用
- 在Eclipse中编写log4j的时候,无法输入中文的解决办法
- java两种方式实现“将字符串前m位移到字符串的第n位之后”
- IOS中输入框被软键盘遮挡的解决办法
- C语言学习之标准函数库第一讲
- Leetcode—三的幂