基础学习:
- Hadoop是一个开源的大数据框架
Hadoop是一个分布式计算的解决方案
Hadoop = HDFS(分布式文件系统)+MapReduce(分布式计算)
- HDFS分布式文件系统:存储是大数据技术的基础
MapReduce编程模型:分布式计算是大数据应用的解决方案。
HDFS总结:
- 普通的成百上千的机器
- 按TB甚至PB为单位的大量数据
- 简单便捷的文件获取
- HDFS概念 i. 数据块:数据块是抽象块而非整个文件作为存储单元,默认大小为64MB,一般设置为128M,备份*3。比如:10MB独占数据块,300MB占128M ii. NameNode:【主】
管理文件系统的命名空间,存放文件元数据
维护着文件系统的所有文件和目录,文件与数据块的映射
记录每个文件中各个块所在数据节点的信息 iii. DataNode:【从】
存储并检索数据块
向NameNode更新所存储块的列表
datanode定期向namenode发送心跳,如果namenode没收到则认为挂掉了,会分配到其他节点 iv. HDFS优点
适合大文件存储,支持TB、PB级别的数据存储,并有副本策略
可以构建在脸颊的机器上,并有一定的容错和恢复机制
支持流式数据访问,一次写入,多次读取最高效v. HDFS缺点
不适合大量小文件存储
不适合并发写入,不支持文件随机修改
不支持随机读等低延时的访问方式
思考:(1)NameNode的容错机制,挂掉了怎么办?
HA(高可用)
(2)数据块大小多少合适?
一般为128M,太小查找耗费性能。- HDFS的写流程:
Data|client <-->NameNode --> DataNode-1|DataNode-2|DataNode-3
- 客户端向NameNode发起写数据请求
- 分块写入DataNode节点,DataNode自动完成副本备份
- dataNode向NameNode汇报存储完成,NameNode通知客户端
- HDFS的读流程:
- 客户端向NameNode发起读数据的请求
- NameNode找出距离最近的DataNode节点信息
- 客户端从DataNode分块下载文件
- HDFS的写流程:
常用HDFS Shell命令
- 类Linux系统:
ls,cat,mkdir,rm,chmod,chown等 - HDFS文件交互:
copyFromLocal,copyToLocal,get,put
Hadoop基础架构
- MapReduce简介
MapReduce是一种编程模型,是一种编程方法,是抽象的理论。 - YARN概念
资源管理:i. ResourceManager: 分配和调度资源 启动并监控ApplicationMaster 监控NodeManager
ii. ApplicationMaster:为MR类型的程序申请资源,并分配给内部任务。 负责数据的切分。 监控任务的执行及容错。
iii. NodeManager: 管理单个节点的的资源。处理来自ResourceManager的命令。处理来自ApplicatonMaster的命令。 - MapReduce编程模型
输入一个大文件,通过split之后,将其氛围多个分片
每个文件分片由单独的机器去处理,就是Map方法
将各个机器计算的结果进行汇总并得到最终的结果,这就是Reduce方法。 -----spark
- split阶段
- Map阶段(需要编码)
- Shuffle阶段
- Reduce阶段(需要编码)
Hadoop总结
- 存储(HDFS)与计算(MapReduce模型)
- 利用shell命令及Python程序操作HDFS
思考:
- 如何通过Hadoop存储小文件?
- 当有节点故障的时候,集群是如何继续提供服务的,如何读?如何写?
- 哪些是影响MapReduce性能的因素?
Hadoop生态圈
Hive --数据仓库 HBase --海量小文件(二次开发) spark --
HBase
高可靠,高性能,面向列,可伸缩,实时读写的分布式数据库
利用HDFS作为其文件存储系统,支持MR程序读取数据
存储非结构化和半结构化数据
RowKey:数据的唯一标识,按字典排序 (如何设计)
Column Family:列族,多个列的集合,最多不要超过3个
TimeStamp时间戳:支持多版本数据同时存在
Spark 大数据计算框架
基于内存的大数据并行计算框架 Spark是MapReduce的替代方案,兼容HDFS,Hive等数据源
- spark优势:
基于内存计算的分布式计算框架
抽象出分布式内存存储数据结构 弹性分布式数据急RDD
基于事件驱动,通过线程池复用线程提高性能