写点什么

架构师训练营第一期 - 第十二周学习总结

发布于: 2020 年 12 月 17 日

现在大数据应用已经无处不在,典型的应用有:医学影像智能识别、病历大数据智能诊疗、AI 外语老师、智能解题、舆情监控与分析、大数据风控、新零售、无人驾驶。大数据相关的技术包括:用于大数据存储的HDFS;之上是大数据计算框架:批处理计算MapReduce、Spark,流处理计算Strom\flink\spark streaming以及NOSQL系统hbase\cassandra;在计算框架之上:一是进行大数据分析及大数据仓库的执行引擎hive\spark sql,把数据仓库的sql转换成大数据批处理计算调用底层的数据存储完成数据的分析计算;二是大数据挖掘和机器学习相关的框架TensorFlow、Mahout 以及MLlib等;最上层构建大数据平台,打造一个完整的大数据系统,从数据的获取到数据的处理最后到数据的展示,完整的完成数据的整个处理链路。



数据是一切的基础,有了数据才能进行计算,然后才有数据计算基础之上的各种应用,大数据的存储是HDFS。HDFS采用Master/Slave的架构,由HDFS Client、NameNode、DataNode和Secondary NameNode四部分组成。

Client:客户端

1、文件切分:文件上传HDFS时,Client按照Block大小切分文件,然后进行存储

2、与NameNode交互,获取文件位置信息

3、与DataNode交互,读取或写入数据

4、Client提供一些命令管理和访问HDFS

NameNode:Master

1、管理HDFS的名称空间

2、管理数据块(Block)映射信息

3、配置副本策略

4、处理客户端读写请求

DataNode:Slave(执行NN下达命令的实际操作)

1、存储实际的数据块

2、执行数据块的读/写操作

Secondary NameNode:并非NameNode的热备,当NN停止服务时,它并不能马上替换NN并提供服务

1、辅助NN,分担其工作量

2、定期合并fsimage和fsedits,并推送给NN

3、在紧急情况下,通过手工切换为主服务器

HDFS的设计目标是以流式数据访问模式存储超大文件,运行于商用硬件集群上。因此其适合用于存储超大文件、进行流式数据访问及一次写入多次读取的应用场景;不适合存储大量小文件、需要低延迟的数据访问、多用户随机写入修改文件的应用场景。



数据存储主要是为了计算,大规模的数据计算需要使用大数据计算引擎mapreduce进行处理。mapreduce有两层意思:一是指mapreduce的编程模型,通过编写一个map程序一个reduce程序完成大规模的数据处理;二是指大数据计算框架程序,通过mapreduce计算框架完成数据的处理计算。

mapreduce编程模型分为map和reduce两个阶段:mapper类继承自框架提供的mapper类,提供一个map函数;reducer类继承自框架提供的reducer类,提供一个reduce函数。再通过编写一个main函数来启动map/reduce进行计算处理。

map函数的输入是key value,由MR框架处理后传入进来的;输出也是key value,key是map设置的处理目标,value是处理的结果。

reduce函数的输入key valuelist,key是map输入的key,valuelist是通过MR框架进行排序合并后同一个key的所有value;输出是key value,key是处理的目标,value是所有List计算处理的结果。



MR计算框架也是Master/Slave的架构,由JobTracker、TaskTracker及应用程序组成。其处理流程如下:

1.MapReduce程序启动,MR客户端把map/reduce作业的jar包发布到HDFS集群的DataNode,存储为一个job jar文件;

2.MR客户端向JobTracker提交作业,JobTracker的JobScheduler对作业进行调度管理;

3.JobTracker为作业创建一个JobInProcess树根节点,解析提交的作业Input文件路径下有多少能够处理的数据块;

4.根据数据块创建TaskInProcess子节点及其自己的任务处理节点TaskAttempt;如果处理超时,TaskInProcess会启动另一个TaskAttempt再去处理任务;

5.当TaskTracker空闲时,就发送心跳信息通知JobTracker有空闲的资源可以分配任务;

6.JobTracker分配一个任务给tasktracker,JobTracker分配任务时优先给tasktracker分配有本地数据的任务;

7.tasktracker领到任务后启动一个TaskRunner子进程去加载job jar中的map函数读取数据进行处理;

8.map函数处理完后,由Tasktracker进行数据拷贝传输给其它服务器的reduce;

9.其它reduce收到数据进行排序合并生成key valuelist给reduce去处理。



在MapReduce1里执行框架包含两部分职责:一是资源调度和管理,二是mapreduce计算过程的管理;在MapReduce2里执行框架只负责计算过程的管理,资源调度和管理由单独的资源管理框架yarn负责。YARN总体上仍然是Master/Slave结构,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。

1.用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。

2.ResourceManager为该应用程序分配第一个Container,并与对应的NodeManager通信,要求它在这个Container中启动应用程序的ApplicationMaster。

3.ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。

4.ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。

5.一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。

6.NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。

7.各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。

8.应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。



写map/reduce函数并不是一件愉快的事情,很麻烦,需要进行专门的训练,而大多数的企业想使用MapReduce来做数据分析,希望能像传统的数据分析一样可以使用SQL进行处理。Hive就是用来解决怎么把一个SQL转换成一个mapreduce计算的。

Hive的架构可以分为以下几部分:

1、用户接口主要有三个:shell/CLI, jdbc/odbc, webgui

CLI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互。

JDBC/ODBC,是Hive基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过连接器连接至 Hive server 服务。

Web UI,通过浏览器访问 Hive

2、Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

3、driver包含解释器、编译器、优化器,完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由MapReduce调用执行。

4、Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含的查询,比如select * from tbl不会生成Redcue任务)。

Hive将元数据存储在RDBMS中,有三种模式:

1、单用户模式:默认自带数据库Derby,一个hive一个数据库,一般用于Unit Test。

2、多用户模式:通过网络连接到数据库MySQL中,多个hive公用,是最经常使用到的模式。

3、远程服务器模式:用于非Java客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用Thrift协议通过MetaStoreServer访问元数据库。

对于数据存储,Hive没有专门的数据存储格式,也没有为数据建立索引,用户可以非常自由的组织Hive中的表,只需要在创建表的时候告诉Hive数据中的列分隔符和行分隔符,Hive就可以解析数据。Hive中所有的数据都存储在HDFS中,存储结构主要包括数据库、文件、表和视图。Hive中包含以下数据模型:Table内部表,External Table外部表,Partition分区,Bucket桶。Hive默认可以直接加载文本文件,还支持sequence file 、RCFile。



用户头像

还未添加个人签名 2019.01.15 加入

还未添加个人简介

评论

发布
暂无评论
架构师训练营第一期 - 第十二周学习总结