1. HDFS架构
1 Master(NameNode/NM) 带 N个Slaves(DataNode/DN)
HDFS/YARN/HBase
1个文件会被拆分成多个Block
NN:
1)负责客户端请求的响应
2)负责元数据(文件的名称、副本系数、Block存放的DV)的管理
DN:
1)存储用户的文件对应的数据块(Block)
2)要定期向NN发送心跳信息,汇报本身及其所有的block信息,健康状况
replication factor:副本系数、副本因子
2. HDFS shell常用命令的使用
1)ls 查看目录 fs -ls -R 递归查看
2)get 获取文件
3)cat 查看内容
4)mkdir 创建文件夹 fs -mkdir -p /a/b 创建多个目录
5)hadoop fs -put hafs.cmd /test/ 复制文件
6)hadoop fs -text xxx 查看内容
7)hadoop fs -rmr /a rmr递归的删除
3. HDFS优点
1)高容错
2)适合批处理
3)适合大数据处理
4)可构建在廉价的机器上
HDFS缺点:
1)低延迟的数据访问
2)小文件存储
4. 分布式计算框架MapReduce(公司里基本不用了)
1)易于编程
2)良好的扩展性
3)高容错性
4)适合海量数据的离线处理
5)将计算向存储转移
(1)MapReduce不擅长的场景
1)实时计算;
2)流式计算;(流式计算的特点是 无时无刻都在产生数据,但是MapReduce的数据是静态离线的)
3)DAG计算;(DAG是指任务相互之间存在先后关系的)
(2)NapReduce编程模型
1)input
2)map&reduce
3)output
4)过程:首先被分成3个块,然后逐步处理每行,每行以空格分割,然后map逐个统计个数,形成kv对,然后在reduce中将相同key值得value加起来
5.资源调度框架YARN
(1)YARN产生背景
1)MapReduce1.x存在的问题:JobTracker负责资源管理,任务调度,工作较多:容易发生单点故障
2)资源利用率&运维成本比较高,因为几个框架Hadoop,spark,MPI不能统一调配
YARN的优点在于,所有的资源管理都是可以由YARN完成的,无论是什么框架和数据类型,都可以跑在YARN上
(2)YARN架构
由1个RM(Resource Manger) + N个NM(Node Manger)
RM(ResourceManager)的职责:一个集群active状态的RM只有一个,负责整个集群的资源管理和调度
1)处理客户端的请求(启动/杀死)
2)启动、监控ApplicationMaster(一个作业对应一个AM)
3)监控NM
4)系统的资源分配和调度
NodeManager:整个集群中有N个,负责单个节点的资源管理和使用以及task的运行情况
1)定期向RM汇报本节点的资源使用请求和各个Container的运行状态
2)接收并处理RM的container启停的各种命令
3)单个节点的资源管理和任务管理
ApplicationMaster:一个作业对应一个,负责应用程序的管理
1)数据的切分
2)为应用程序向RM申请资源(container),并分配给内部任务
3)与NM通信以启停task,task是运行在container中的
4)task的监控和容错
Container:对任务运行情况的描述:cpu、memory、环境变量等
(3)YARN的执行流程:首先客户端找到RM,然后RM找到NM,然后NM找到一个AM,并且AM向RM汇报和申请资源,并在对应的NM上启动,开始作业
1)用户向YARN提交作业
2)RM为该作业分配第一个container(AM)
3)RM会与对应的NM通信,要求NM在这个container上启动应用程序的AM
4)AM首先向RM注册,然后AM将为各个任务申请资源,并监控运行情况
5)AM采用轮训的方式通过RPC协议向RM申请和领取资源
6)AM申请到资源以后,便和响应的NM通信,要求NM启动任务
7)NM启动我们作业对应的task
6. 大数据数据仓库Hive
(1)Hive产生背景
1)MapReduce的编程不便性(必须本地编好代码,并打包上传文件运行
2)HDFS上的文件缺少Scheme(Scheme是指数据类型信息,必须学习到Java或者MapReduce相关编程技巧)
(2)Hive是什么
1)由facebook开源的,最初用于解决海量结构化的日志数据统计问题
2)构建在Hadoop之上的数据仓库
3)Hive定义了一种类SQL查询语言:HQL(类似SQL但不完全相同)
4)通常用于进行离线数据处理(采用MapReduce)
5)底层支持多种不同的执行引擎(可以使用spark,Tez,MapReduce,Hive on spark)
6) 支持多种不同的压缩格式,存储格式以及自定义函数(压缩:GZIP,LZO,Snappy,BZIP2;存储:TextFile,SequenceFile,RCFile,ORC)
(3)为什么要使用Hive
1)简单,容易上手(提供类似于SQL查询语言HQL)
2)为超大数据集设计的计算/存储扩展能力(MR计算,HDFS存储)
3)统一的元数据管理(可与Presto/Impala(基于内存)/SparkSQL等共享数据) 意味着创建的表在相互之间可与通用
(4)Hive体系架构
1)最上层:可与通过shell和JDBC等客户端进行操作,写SQL语句
2)Driver:首先解析SQL语句,生成逻辑执行计划,然后进行优化,然后生成物理执行计划,最后生成执行引擎,提交到MapReduce执行
3)采用HDFS,HBase执行
4)左侧是指表格存放在Mysql中
Hive部署架构--生产环境
1)所有元数据管理都放在MySQL中执行
2)Hive在Hadoop上运行
3)具有Active MySQL和Standby MySQL
4)Hive只需要部署一个,因为他只是一个客户端,用来提交SQL
Hive的基本使用
1)创建表 CREAT TABLE table_name(数据名 数据类型)
2)将数据加载 LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename
3)查询语句 select word,count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word;
lateral view explode();