Hadoop-HDFS,思想的总结
Hadoop的工作离线数据处理的简单流程(也就是不是实时更新是数据,如果要实时更新,就要用到spark进行实时处理):
流程:①②③④⑤⑥⑦⑧
① :是产生的数据源,会将客户的操作等以日志的形式保存
② :这些数据都会上传到Tomact服务器上,进行保存
③ :通过flume对保存到磁盘的数据,进行捕抓到HDFS中的各个datenode
④ :通过mapreduce对HFDS上的数据进行作业调度和集群管理(就是对数据进行预处理)
注:MapReduce是一个基于yarn的并行的处理大数据集的系统
:MapReduce对数据预处理之后,还是在HDFS里
⑤ :把预处理的数据导入hive仓库(数据仓库工具)
⑥ :把在hive仓库的数据,通过ETL,编写SQL
⑦ :存入mysql数据库(其他数据库也行)
⑧ :数据的使用
注:实时处理数据的部分的流程:
①:将flume到数据放置KaFka中,通过spack代码进行处理,更新
②:存入数据库中
③:再数据的使用
HDFS的数据写入工作流程:
总结:服务器与HDFS存储数据的交互
- 服务器向namenode上传文件
- Namenode会检查datenode是存在
- 存在,则表示可以存
- 然后将元数据发送给namenode
- Namenode进行查询自身的块信息
- 并返回datenode列表给服务器
- 服务器就开始向datenode写入数据(以packet形式写入直到该块写完)
理解:因为有3个副本(或者多个),所以写入到第一个datenode的时候,也会通过该datenode,写给其他的datenode
副本的放置策略是:就近原则
① 在就近的第一台主机放一份
② 第二备份与第一台在不同的机架上,随意一台主机–机架犹如书架,一层一层的放主机
③ 第三份与第二份在相同的机架上,随意一台主机上放
副本存在的意义:就是预防数据丢失,存个底 - 其他的块,相同的操作流程,直到写完最后一个块
- 最后更新元数据
HDFS的读取数据的工作流程:
(1) 客户端跟namenode通信查询元数据,找到块文件所在的datanode服务器
(2) 挑选一台datanode(就近原则,然后随机)服务器,请求socket流
(3) Datanode开始发送数据给客户端(从磁盘里面读取数据写入流,以packet为单位的)
(4) 客户端已packet为单位去接收数据,先在本地缓存,然后写入目标文件
注:读数据时,会进行数据的校验,如果块损坏,读其他节点上的块每个节点的作用:
Namenode:负责响应客户端,管理datenode的状态,和存储元数据
Datenode:负责数据块的存储,定时向namenode的报告(自身状态,块的信息,更新元数据)
Sencodarynamenode:namenode管理元数据的辅助节点,默认在同一台机器上
Edits:日志
Fsimage:内存元数据的镜像