Hadoop-HDFS,思想的总结

Hadoop的工作离线数据处理的简单流程(也就是不是实时更新是数据,如果要实时更新,就要用到spark进行实时处理):

Hadoop处理海量数据 hadoop怎样处理数据_Hadoop处理海量数据


流程:①②③④⑤⑥⑦⑧

① :是产生的数据源,会将客户的操作等以日志的形式保存

② :这些数据都会上传到Tomact服务器上,进行保存

③ :通过flume对保存到磁盘的数据,进行捕抓到HDFS中的各个datenode

④ :通过mapreduce对HFDS上的数据进行作业调度和集群管理(就是对数据进行预处理)

注:MapReduce是一个基于yarn的并行的处理大数据集的系统

:MapReduce对数据预处理之后,还是在HDFS里

⑤ :把预处理的数据导入hive仓库(数据仓库工具)

⑥ :把在hive仓库的数据,通过ETL,编写SQL

⑦ :存入mysql数据库(其他数据库也行)

⑧ :数据的使用

注:实时处理数据的部分的流程:

①:将flume到数据放置KaFka中,通过spack代码进行处理,更新

②:存入数据库中

③:再数据的使用


HDFS的数据写入工作流程:

Hadoop处理海量数据 hadoop怎样处理数据_元数据_02


总结:服务器与HDFS存储数据的交互

  1. 服务器向namenode上传文件
  2. Namenode会检查datenode是存在
  3. 存在,则表示可以存
  4. 然后将元数据发送给namenode
  5. Namenode进行查询自身的块信息
  6. 并返回datenode列表给服务器
  7. 服务器就开始向datenode写入数据(以packet形式写入直到该块写完)
    理解:因为有3个副本(或者多个),所以写入到第一个datenode的时候,也会通过该datenode,写给其他的datenode
    副本的放置策略是:就近原则
    ① 在就近的第一台主机放一份
    ② 第二备份与第一台在不同的机架上,随意一台主机–机架犹如书架,一层一层的放主机
    ③ 第三份与第二份在相同的机架上,随意一台主机上放
    副本存在的意义:就是预防数据丢失,存个底
  8. 其他的块,相同的操作流程,直到写完最后一个块
  9. 最后更新元数据

HDFS的读取数据的工作流程:

Hadoop处理海量数据 hadoop怎样处理数据_Hadoop处理海量数据_03


(1) 客户端跟namenode通信查询元数据,找到块文件所在的datanode服务器

(2) 挑选一台datanode(就近原则,然后随机)服务器,请求socket流

(3) Datanode开始发送数据给客户端(从磁盘里面读取数据写入流,以packet为单位的)

(4) 客户端已packet为单位去接收数据,先在本地缓存,然后写入目标文件

注:读数据时,会进行数据的校验,如果块损坏,读其他节点上的块每个节点的作用:

Namenode:负责响应客户端,管理datenode的状态,和存储元数据

Datenode:负责数据块的存储,定时向namenode的报告(自身状态,块的信息,更新元数据)

Sencodarynamenode:namenode管理元数据的辅助节点,默认在同一台机器上

Edits:日志

Fsimage:内存元数据的镜像

Hadoop处理海量数据 hadoop怎样处理数据_元数据_04