https://blog.csdn.net/qq_16146103/category_9925937.html
https://www.zhihu.com/question/333417513

Hadoop就是存储海量数据和分析海量数据的工具。

Hadoop生态构成:Hadoop包括 HDFS,Hbase,MapReduce
  • HDFS:分布式文件系统
    • ZKFC:为实现NameNode高可用,在NameNode和Zookeeper之间传递信息,选举主节点工具。
    • NameNode:存储文件元数据
    • DateNode:存储具体数据
    • JournalNode:同步主NameNode节点数据到从节点NameNode
  • MapReduce:开源的分布式批处理计算框架
  • Yarn:调度资源管理器 YARN的全称是Yet Another Resource Negotiator,直译就是另一种资源协调者。

大数据生态

  • Spark:分布式基于内存的批处理框架
  • Zookeeper:分布式协调管理
  • HBase:基于HDFS的NoSql列式数据库
  • Hive:将SQL转换为MapReduce进行计算
  • Hue:是CDH的一个UI框架
  • Impala:是Cloudra公司开发的一个查询系统,类似于Hive,可以通过SQL执行任务,但是它不基于MapReduce算法,而是直接执行分布式计算,这样就提高了效率。
  • oozie:是一个工作流调度引擎,负责将多个任务组合在一起按序执行。
  • kudu:Apache Kudu是转为hadoop平台开发的列式存储管理器。和impala结合使用,可以进行增删改查。
  • Sqoop:将hadoop和关系型数据库互相转移的工具。
  • Flume:采集日志
  • 还有一些其它的

https://zhuanlan.zhihu.com/p/54994736
Hadoop的核心,说白了,就是HDFS和MapReduce。HDFS为海量数据提供了存储,而MapReduce为海量数据提供了计算框架
image.png

NameNode:是Master节点(主节点),可以看作是分布式文件系统中的管理者,主要负责管理文件系统的命名空间、集群配置信息和存储块的复制等。NameNode会将文件系统的Meta-data存储在内存中,这些信息主要包括了文件信息、每一个文件对应的文件块的信息和每一个文件块在DataNode的信息等。

DataNode:是Slave节点(从节点),是文件存储的基本单元,它将Block存储在本地文件系统中,保存了Block的Meta-data,同时周期性地将所有存在的Block信息发送给NameNode。

Client:切分文件;访问HDFS;与NameNode交互,获得文件位置信息;与DataNode交互,读取和写入数据。

还有一个Block(块)的概念:Block是HDFS中的基本读写单元;HDFS中的文件都是被切割为block(块)进行存储的;这些块被复制到多个DataNode中;块的大小(通常为64MB)和复制的块数量在创建文件时由Client决定。

首先是写入流程
image.png
1 用户向Client(客户机)提出请求。例如,需要写入200MB的数据。
2 Client制定计划:将数据按照64MB为块,进行切割;所有的块都保存三份。
3 Client将大文件切分成块(block)。
4 针对第一个块,Client告诉NameNode(主控节点),请帮助我,将64MB的块复制三份。
5 NameNode告诉Client三个DataNode(数据节点)的地址,并且将它们根据到Client的距离,进行了排序。
6 Client把数据和清单发给第一个DataNode。
7 第一个DataNode将数据复制给第二个DataNode。
8 第二个DataNode将数据复制给第三个DataNode。
9 如果某一个块的所有数据都已写入,就会向NameNode反馈已完成。
10 对第二个Block,也进行相同的操作。
11 所有Block都完成后,关闭文件。NameNode会将数据持久化到磁盘上。

读取流程:
1 用户向Client提出读取请求。
2 Client向NameNode请求这个文件的所有信息。
3 NameNode将给Client这个文件的块列表,以及存储各个块的数据节点清单(按照和客户端的距离排序)。
4 Client从距离最近的数据节点下载所需的块。
image.png