本文笔记仅自用,杠勿cue
编程题:Hadoop 实验MR编程速记
1. 绪论
-
大数据4V特征:
- Volume(容量大)
- Variety(种类多)
- Value(有价值)
- Velocity(追求速度时效)
-
Hadoop 是分布式系统开发的框架,由三部分组成:HDFS(分布式文件系统),MapReduce(分布式运算框架),Yarn(资源分配系统)。
-
Google的论文和Apache开发的框架关系:
BigTable和HBase,MapReduce和MapReduce,GFS和HDFS。 -
特点:
- Hadoop可以存储和处理PB级别的数据(1PB=1024TB)
- 成本低:服务器的集群节点达到上千个节点
- 可靠性:自动维护多份副本
- 高效率:可以并行调度资源处理
-
大数据产生模式的三个阶段:运营式系统阶段,用户原创内容阶段,感知式系统阶段
-
大数据和科学研究:实验,理论,计算,数据密集型
-
大数据和思维方式:全样非采样,效率非准确,相关非因果
-
大数据计算模式:批处理计算(MapReduce),流计算(Storm,Flink,SPark streaming),图计算(Pregel,SPark GraphX),查询分析计算(Hive,Dremel,Impala)
-
运行模式:本地单机,伪分布式,全分布式
真正的分布式,由3个及以上的实体机或者虚拟机组件的机群。
伪分布式,这种模式也是在一台单机上运行,但用不同的Java进程模仿分布式运行中的各类结点(NameNode,DataNode,JobTracker,TaskTracker,SecondaryNameNode)
从分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个
从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务。TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。一个机器上,既当namenode,又当datanode,或者说 既 是jobtracker,又是tasktracker。没有所谓的在多台机器上进行真正的分布式计算,故称为"伪分布式"。
NameNode(1)+DataNode(n)
JobTracker调度(1)+TaskTracker执行(n)
TaskTracker一定要在DataNode上,JobTracker则可以在任意机器上
2. HDFS 分布式文件系统
预备知识:
- 什么是元数据?:元数据就是描述数据的数据
- 什么是快照:我们在很多情况下都需要备份文件,但是往往需要备份的那台机器不能即时停止运行,这个时候我们需要对文件系统进行打快照,我们对文件系统锁所进行的所有操作都是有记录的,因此,快照系统的操作就是把元数据保存下来,我们可以根据这份快照对文件系统恢复到某个时间点(用Git的思维思考一下)。
HDFS的相关知识:
- HDFS系统适合处理超大文件,流式访问数据,不适合低延迟的数据访问,不适合大量小文件的存储,不支持多用户写入和任意修改

fsimage - 它是在NameNode启动时对整个文件系统的快照
edit logs - 它是在NameNode启动后,对文件系统的改动序列
SecondaryNameNode所完成的工作就是合并fsimage和edit logs
-
一些常用的概念:
- Block:大小默认是256M
- NameNode:管理文件系统的命名空间,维护整个文件系统的目录树和文件的索引目录。有两种信息,一种是命名空间镜像,一种是编辑日志,namenode在每次系统启动的时候动态重建这些信息,当运行任务的时候,客户通过NameNode获取元数据信息,元数据(描述数据的数据)运行保存在NameNode的内存当中。
- 副本策略:副本1存放在上传文件的DN,如果是在集群外提交过来的放在磁盘空闲CPU不忙的节点。副本2放在和副本1 不同Rack(机架)的节点
- 文件操作:NameNode负责文件元数据的操作,DataNode负责处理文件内容的读写请求,数据流不经过NameNode,读取文件的时候NamNode会尽量让用户先读取最近的副本
- SecondaryNamenode不是备份节点,主要工作是阶段性的合并fsimage和edits文件,以此来控制 edits 的文件大小在合理的范围
- HDFS系统启动的时候,NamNode进入安全模式,所谓安全模式就是禁止文件系统修改,NameNode先检查DataNode数据块的副本数量是否达到最小值再考虑退出安全模式。
-
HDFS的读写操作:
管道式写入(Pipeline),写入遵循这样的步骤:先创建一个任务到NameNode上,然后同时驱使DataOutputStream写入数据,OutputStream(缓冲区)将数据写入某一个DN里面,边写这个DN的时候向其他的DN也写入,并发管道写入,写入的同时不断有ACK报文回复写入的状态,最后关闭缓冲区,OK,完成。如图:

HDFS的读操作:

本文详细介绍了Hadoop的组成部分(HDFS、MapReduce和Yarn)、大数据特征、HDFS的工作原理、MapReduce计算框架的原理与实践,以及Yarn资源调度系统和HBase、Hive等周边技术。涵盖了分布式文件系统、计算框架、数据仓库和协调服务等内容。
最低0.47元/天 解锁文章
1042





