设为首页 收藏本站
查看: 738|回复: 0

[经验分享] Hadoop学习分享----入门概要介绍

[复制链接]

尚未签到

发表于 2016-12-9 09:45:42 | 显示全部楼层 |阅读模式
  一、什么是Hadoop?


  • 基于2003年google发表Map/Reduce 和 Google File System(GFS)论文研发。
  • 用java实现的HDFS(Hadoop分布式文件系统)+Map/Reduce(并行编程计算处理框架)。
  • 对大量数据进行分布式处理的软件框架。
二、Hadoop的优势
 1、高可靠性:
HDFS假设计算元素和存储会失败,因此它维护多个工作数据副本,确保能够针对失败的节点重新分布处理。MapReduce的任务监控保证了分布式处理的可靠性。
2、高效性:
Hadoop (M/R)是高效的,因为它以并行的方式工作,通过并行处理加快处理速度。
3、高扩展性:
Hadoop可以扩展至数千个节点,对数据持续增长,数据量特别巨大的需求很合适。

4、低成本:

Hadoop是开源项目,而且不仅从软件上节约成本,硬件上的要求也不高。Hadoop生态群活跃,其周边开源项目丰富,HBase, Hive,Impala等等基础开源项目众多。


三、Hadoop的不足

1、不适合低延迟数据访问,不适合做实时数据分析。

2、无法高效存储大量小文件。

3、不支持多用户写入及任意修改文件。


四、Hadoop的两大核心子项目介绍

(一)、HDFS简介
提供一个高效可用的分布式文件系统,具体如下:
1、可以创建、删除、移动或重命名文件,等等。
2、采用多个备份,保证单节点出现故障是,数据不会丢失。
3、是一个抽象的文件系统,实际的文件数据是分布在多个节点上。


HDFS的结构:
DSC0000.jpg


<1>、NameNode和Secondary NameNode介绍
NameNode:

  • 负责管理文件系统名称空间(Namespace)和控制外部客户机的访问。
  • 维护文件系统树(filesystem tree)以及文件树中所有的文件和文件目录信息的元数据(metadata)。
  • 是hadoop守护进程中最重要的一个,位于HDFS的主端,它跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。
Secondary NameNode:

  • 是一个用来监控HDFS状态的辅助后台程序。就想NameNode一样,每个集群都有一个Secondary  NameNode,并且部署在一个单独的服务器上。Secondary  NameNode不同于NameNode,它不接受或者记录任何实时的数据变化,但是,它会与NameNode进行通信,以便定期地保存HDFS元数据的快照。由于NameNode是单点的,通过Secondary  NameNode的快照功能,可以将NameNode的宕机时间和数据损失降低到最小。同时,如果NameNode发生问题,Secondary  NameNode可以及时地作为备用NameNode使用。
NameNode维护以上管理信息的四个重要的物理文件:



  • fsimage:二进制文件,存储HDFS的文件和目录元数据。格式如下:
  • DSC0001.jpg
  • edits:作为NameNode的变更日志,记录fsimage的变更信息,如创建/删除目录,创建/删除文件,修改权限,修改namespace/diskspace限额等。
  • fstime:记录最近一次checkpoint的时间,作为Secondary NameNode判断当前是否需要进行checkpoint的依据。
  • VERSION:记录namspaceID,作为整个namespace的唯一标识,DataNode也保存这个标识,在每次DataNode连接NameNode时都要检查,不一致的DataNode会被拒绝连接。
NameNode和secondary Namenode:
DSC0002.jpg

为什么会用这样的交互机制?
原因:
1.fsimage是存于硬盘的元数据检查点,Hadoop不会对每个文件操作都写出到fsimage,这样是很慢的,但是每个文件操作都会在提交后运行前先写入edits编辑日志,这样在namenode出现故障后,就会将fsimage和edits编辑日志结合读入内存,重建元数据信息。
 2.为了避免edits编辑日志的无限制扩大,secondary namenode 就回按照时间阈值(比如1小时)或者按大小阈值(edits编辑日志文件大小超过64M,这些参数都可以设置)“周期性”的读取namenode中的edits和fsimage重构fsimage检查点,同时在namenode中进行edits的滚动,来解决这个问题。


<2>、DataNode介绍


  • 提供数据存储空间,保存HDFS中的数据信息,它管理的是数据块(Block) 。
  • 响应来自 HDFS 客户端的读写请求,
  • 响应来自 NameNode 的创建、删除和复制块的命令。
当一个Datanode启动时,它会扫描本地文件系统,产生一个这些本地文件对应的所有HDFS数据块的列表,然后作为报告发送到Namenode,这个报告就是块状态报告。



<3>、Client介绍


  • 代表用户与namenode和datanode交互来访问整个文件系统。客户端提供了一些列的文件系统接口,因此我们在编程时,几乎无须知道datanode和namenode,即可完成我们所需要的功能。
<4>、Namenode,Datanode,Client之间的通信


  • Namenode,Datanode,Client之间的通信都是建立在TCP/IP的基础之上的。当Client要执行一个写入的操作的时候,命令不是马上就发送到Namenode,Client首先在本机上临时文件夹中缓存这些数据,当临时文件夹中的数据块达到了设定的Block的值(默认是64M)时,Client便会通知Namenode,Namenode便响应Client的RPC请求,将文件名插入文件系统中并且在Datanode中找到一块存放该数据的block,同时将该Datanode及对应的数据块信息告诉Client,Client便把这些本地临时文件夹中的数据块写入指定的数据节点。

(二)、Map/Reduce和计算任务框架介绍
<一>、Map/Reduce介绍

  • 提供了一套并发处理数据的接口
  • Map 函数接受一组数据并将其转换为一个键/值对列表,输入域中的每个元素对应一个键/值对。
  • Reduce 函数接受 Map 函数生成的列表,然后根据它们的键(为每个键生成一个键/值对)缩小键/值对列表。
执行计算流程图:
DSC0003.jpg



  • Map/Reduce的本质是用户需编程提供两个以Key/value方式操作的函数:
          f(map) ~ input_data    list (k1,v1)
          f(reduce) ~  (k1,list(v1))   result_data

  • Map/Reduce系统提供的隐藏操作有:
         将map结果list(k1,v1)重新分发,使同一个k1对应的数据(k1,list(v1))定向到同一个计算单元reducer。
 
例子:我们想要统计每个员工每天在开会上平均要花费多少时间。数据内容:employee, date, meeting_time。

  • 如果用sql,maybe:select employee, avg(meeting_time) from tablename group by employee.
  • 如果用map/reduce programming,maybe:map过程,把数据按<employee, meeting_time>分发;reduce过程,对同一个employee的meeting_time求平均,并输出<employee, avg(meeting_time)>
DSC0004.jpg



<二>、JobTracker和TaskTracker介绍:

DSC0005.jpg

JobTracker介绍:
JobTracker后台程序用来连接应用程序与Hadoop。用户代码提交到集群以后,由JobTracker决定哪个文件将被处理,并且为不同的task分配节点。同时,它还监控所有的task,一旦某个task失败了,JobTracker就会自动重新开启这个task,在大多数情况下这个task会被放在不用的节点上。每个Hadoop集群只有一个JobTracker,一般运行在集群的Master节点上。


TaskTracker介绍:

TaskTracker与负责存储数据的DataNode相结合,其处理结构上也遵循主/从架构。JobTracker位于主节点,统领 MapReduce工作;而TaskTrackers位于从节点,独立管理各自的task。每个TaskTracker负责独立执行具体的task,而 JobTracker负责分配task。虽然每个从节点仅有一个唯一的一个TaskTracker,但是每个TaskTracker可以产生多个java 虚拟机(JVM),用于并行处理多个map以及reduce任务。TaskTracker的一个重要职责就是与JobTracker交互。如果 JobTracker无法准时地获取TaskTracker提交的信息,JobTracker就判定TaskTracker已经崩溃,并将任务分配给其他 节点处理。



DSC0006.jpg




  

五、Hadoop其他重要子项目

1、Hbase

  • Google Bigtable的开源实现
  • 列式数据库
  • 可集群化
  • 可以使用shell、web、api等多种方式访问,通过api函数对数据库进行操作
  • 适合高读写(insert)的场景:大量数据向数据库中写入,读出
  • HQL查询语言:Hbase Query Language
  • NoSQL的典型代表产品
2、Hive 蜂巢

  • 数据仓库工具,可以把hadoop下的原始结构化数据变成Hive中的表


  • 支持一种与SQL几乎完全相同的语言。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持


  • 可以看成是从SQL到Map-Reduce的映射器


  • 提供shell,JDBC/ODBC,Thrift,Web等接口
3、Zookeeper动物园管理员:通信协调软件:Hbase数据节点之间的协调

  • Google Chubby的开源实现


  • 用于协调分布式系统上的各种服务。例如确认消息是否准确到达,,防止单点失效,处理负载均衡等


  • 应用场景:Hbase,实现Namenode自动切换


  • 工作原理:领导者,跟随者以及选举过程
4、Avro鹰

  • 数据序列化工具,由Hadoop的创始人Doug Cutting主持开发


  • 如:java中产生数据,存入磁盘,需要先序列化


  • 用于支持大批量数据交换的应用。支持二进制序列化方式,可以便捷,快速地处理大量数据


  • 动态语言友好,Avro提供的机制使动态语言可以方便地处理Avro数据


  • Thrift接口
5、Cassandra(没落于hbase)

  • NoSQL,分布式的Key-Value型数据库,由Facebook贡献给apache


  • 与Hbase类似,也是借鉴Google Bigtable的思想体系


  • 只有顺序写,没有随机写的设计,满足高负荷轻型的性能需求

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-311801-1-1.html 上篇帖子: Fluentd+Hadoop结合进行日志收集、分析 下篇帖子: Hadoop配置项整理(mapred-site.xml)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表