WEEK-12 学习心得
HDFS
三个问题:
(1)怎么存储大文件
(2)怎么快速读
(3)怎么防止文件损坏导致整个文件不可用
常用 RADI 技术
RAID0 : 文件写到多个磁盘;
RAID1:文件写到两个复制盘
RAID 10:2 组盘,每组有组内复制;
RAID 5:
RAID 6
HDFS 系统架构
spark 计算的数据在 HDFS ,所以 spark 要支持 HDFS
HDFS 在大数据的领域是增强的,需要支持 HDFS 才有生命力;
HDFS 支持单文件的万亿级存储。
几千台 DATA NODE 服务器;
几台 NAME NODE 服务器;
DATA NODE 分成很多个块,默认是 64M ,这些块需要在 NAME NODE 注册;
EX : 服务器 IP,端口多少,有多少个数据块;
mapreduce 就是很多个 CLIENT 程序,去并发的读写文件;
HDFS 设计目标
HDFS 以流式数据访问模式存储超大文件,运行于商用硬件集群上
超大文件
流式数据访问
不适合 HDFS 的场景
(1)低延迟的数据访问
(2)大量小文件
超过 NAMENODE 的处理能力
(3)多用户随机写入修改文件
设计目标:
假设:节点失效是常态
理想:
(1)任何节点失效不影响服务
(2)自动完成集群内副本复制
分而治之
NameNode:
DataNode:
datanode 要向 namenode 注册;
HDFS 如何写文件
HDFS CLIENT ->NAMENODE
HDFS CLIENT ->DATANODE
DATANODE-> DATANODE2(副本)->DATANODE3(副本)
DATANODE 磁盘挂了怎么办
DATANODE 正常服务
坏掉的磁盘上数据尽快通知 NAMENODE
NameNode 挂了怎么办
持久化元数据
操作日志(EDIT LOG)
记录文件创建,删除,修改文件属性等操作
重做日志,如果挂了重做,耗时会比较长
Fsimage
包含完整的命名空间
FILE->BLOCK 的映射关系
文件的属性(ACL,quota,修改时间等)
定时对文件系统镜像备份
基于 ZOOKEEPER 管理 的 NAMENODE 主从架构
主 NAMENODE -写->SHARED EDITS -读->从 NAMENODE
MAPREDUCE
HDFS 的设计目标就是为了 MAPREDUCE
真正并发的是 MAPREDUCE 计算程序;
处理海量数据 >1TB
上百上千 CPU 实现并行处理
简单地实现以上目的
移动计算比移动数据更划算
MAPREDUCE 特性
自动实现分布式并行计算
容错
提供状态监控攻击
模型抽象简洁,程序员易用
WORD COUNT 举例
MAPREDUCE 内需要两个类
一个是 MAP 类,重写 MAP 函数
一个是 REDUCE 类,重写 REDUCE 函数
MAP 读文件的每一行, 输出 WORD 和 ONE
REDUCE 的 KEY 是 WORD ,ITERABLE 是 ONE 的集合
MAP 的输出是 REDUCE 的输入;
大数据技术是从 GOOGLE 上产生的;
目前的大数据:就是 HADOOP SPARK 以及相关的技术。
HDFS 将超大规模的文件进行存储和管理。
MAPREDUCE 就是写一个 MAP 函数和一个 REDUCE 函数。
MAP:
KEY 就是 偏移量,VALUE 就是一行;
输出,KEY VALUE
REDUCE:
输入是 KEY 就是单词,VALUE 就是 MAP 输出单词出现的次数的
MAPREDUCE 的处理,就是分布式的计算,从 X 万个文件中同时统计数据
一个例子:
hello world 0 hello world hello 1 world
bye world 12 bye world
MAP 是自己写的,想怎么算就怎么算;
YARN
大数据 1.0: MAPREDUCE
大数据 2.0: 通用的运行时框架,用户自己编写框架,在环境中运行;
架构方案的主要缺点是,服务器集群资源调度管理和 MAPREDUCE 执行耦合,
无法运行其它计算任何,比如:SPARTK STORM 无法统一集中资源。
YARN 架构
hadoop1 没用 yam,hadoop1 使用的是 job tracker
YARM 两个部分:
资源管理器
节点管理
HIVE
SQL 计算非常多,绝大多数的公司的分析计算都是 SQL 计算。
PAGEID+AGE 称为 KEY VALUE 就是 1 ,SHUFFLE SORT
# 关联这个表到这个文件
LOAD DATA LOCAL INPATH 'XXXXXXX' OVERWRITE INTO TABLE
针对这个表的 HIVE 语句就会被转换成 MAPREDUCE 的计算程序。
HIVE 的整体架构
CLIENT -> driver ->hadoop
metastore
compiler
SQL 转成语法树
将抽象语法树转成查询块 QB
把 QB 转成逻辑执行计划
HIVE 也可以 EXPLAIN 输出 XML
HIVE 的开发技术难度比 MAPREDUCE 要难很多。
MAPREDUCE 如果只是基础功能(非工业级)1-2 周就可以写出来了,其实主要是底层技术。
但是 HIVE 的难度就比较高(目前已有 40 年)
大数据读数据的工作比较重,一般是读一次数据,进行多次的计算
HIVE CLI 和 MYSQL 可以关联
将创建的表写入 MYSQL 中;当然 HIVE 有自带的
HIVE QL - JOIN
HIVE 怎么 执行 JOIN 操作。
PAGEID 和 USERID 关联
USERID 和 AGE 关联
输出 PAGEID 和 AGE 的统计
MAP 的输入,只能是一张表的一行输入
MAP 的 KEY 就是关联的字段,VALUE 就是 <表编号,业务字段>
SHUFFLE
HIVE 中 大表和小表进行 JION 的操作经常有
HIVE 给出了一个方法,可以在 HIVE 中指定。
了解了 MAPREDUCE 的思想,其它的都一样。
【总结】
大数据学习,一定要弄懂 MAPREDUCE,其它的框架原理都一样,达到举一反三的效果。学习框架要深入理解架构解决问题的思维,这个才是架构的精髓。
评论