Hadoop基础知识
作者:互联网
什么是Hadoop
提供分布式(一个文件本拆分成很多块,并且以副本的方式存储在各个节点中)的存储和计算
- Hadoop Common:公用工具,用于支持其他模块的组件
- HDFS:提供分布式存储
- Hadoop YARN: 分布式资源管理、作业调度框架
- Hadoop MapReduce:基于YARN的分布式计算框架
HDFS
源于GFS,提供分布式、通用机器、扩展性、容错性、海量数据存储
Hadoop distributed file system
-分布式,通用机器,容错
HDFS前提和设计目标
- 硬件错误:集群中结点宕机,磁盘损坏
- 流式数据访问:高吞吐量、批处理,而不是低延时
- 大规模数据集
- 移动计算比移动数据更划算
HDFS架构
- Namenode和 DataNodes
- master/slave 架构
- Namenode: /home/hadoop/software、/app ,管理文件系统的文件的命名空间,通过客户端对于数据进行操作
- DataNodes:存储数据
- HDFS exposes a file system namespace and allow user data stored 将文件切分成指定大小的数据块,以多副本的模式存储在一系列的机器上,除了最后一个块大小不一样,其他都一样
eg:
文件: test.log 200m
块:默认blocksize是128,此文件需要两个块
副本:默认三副本
node1:blk1 blk2
node2:blk2
node3:blk1 blk2
node4:
node5:blk1
- NameNode提供基本的CRUD操作
- 元数据信息:NN决定DN blocking的映射,决定某个block存放在那个DN上,并且对于用户透明
HDFS架构图
客户端可以装在任何机器上,元数据信息:文件名,几个副本,在哪
HDFS机架感知
Hadoop在设计时考虑到数据的安全与高效,数据文件默认在HDFS上存放三份,存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。这样如果本地数据损坏,节点可以从同一机架内的相邻节点拿到数据,速度肯定比从跨机架节点上拿数据要快;同时,如果整个机架的网络出现异常,也能保证在其它机架的节点上找到数据。为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本。那么Hadoop是如何确定任意两个节点是位于同一机架,还是跨机架的呢?答案就是机架感知。
默认情况下,hadoop的机架感知是没有被启用的。所以,在通常情况下,hadoop集群的HDFS在选机器的时候,是随机选择的,也就是说,很有可能在写数据时,hadoop将第一块数据block1写到了rack1上,然后随机的选择下将block2写入到了rack2下,此时两个rack之间产生了数据传输的流量,再接下来,在随机的情况下,又将block3重新又写回了rack1,此时,两个rack之间又产生了一次数据流量。在job处理的数据量非常的大,或者往hadoop推送的数据量非常大的时候,这种情况会造成rack之间的网络流量成倍的上升,成为性能的瓶颈,进而影响作业的性能以至于整个集群的服务
HDFS读取和存储过程
存储流程
读取流程
Checkpoint
HDFS的元数据管理
- 元数据:HDFS的目录结构以及每个文件的BLOCK信息(ID,副本数,Bolck存放位置)
- 存在什么位置:对应
${hadoop.tmp.dir}/name....
- 元数据存放在文件中:
- 原本的元数据信息是存放在内存当中的,NN会定期将元数据信息序列化到磁盘
- 对于一段时间内的数据(还没来得及序列化到磁盘的),通过日志文件进行事实存储
- 设置Second NN对于数据进行合并,将edit log与fsimage进行加载,然后合并,生成新的fsimage。
SafeMode
NameNode启动的时候,首先进入SafeMode,无法进行读写
MapReduce
一个分布式计算框架
Google MapReduce的克隆版,提供扩展性、容错性、海量数据离线处理
- 准备MAP的输入数据
- MAPPER
- SHUFFLE:可自定义
- REDUCE处理
Combiner
YARN
资源管理和调度,扩展性容错性,多框架资源同一调度(Hive,Spark)
Yet Another Resource Negotiator
Yarn产生背景
master/slave:JobTracker/TaskTracker
将JOB分为多个TASK
JobTracker:
- 单点,挂掉了整个集群就挂了
- 单点,压力大
- 只能支持mr作业(Spark不支持)
- 利用率低
什么是YARN
- Yet Another Resource Negotiatior
- 通用的资源管理系统
- 为上层应用提供统一的资源管理和调度
Client: 客户端用于提交任务、杀死任务等
Master: ResourceManager(RM),用于资源管理,处理来自客户端的请求,启动监控AM,接收NM心跳信息。
Slave: NodeManager(NM),用于数据计算,发送心跳信息,任务的执行情况,接收AM的请求
Application Master: 每一个作业对应一个本作业的管理器,向RM申请资源,运行在NM上,为每个task向RM申请资源(container),本任务的监控
container: 任务的运行抽象,memory/cpu,task运行的地方,可以运行AM也可以运行具体的MAP\REDUCE task
Yarn的执行流程
- Client 使用RM申请资源
- RM在某个NM上启动了一个Container来执行AM(可以理解为主机上的一个进程)
- AM注册到RM,相当于可以查询掌控本作业的运行情况,并且申请资源
- 申请到资源后启动多个Container(进程)来执行具体的任务
- 不同的工作对应的只是AM的不同,例如Spark、Hive与Hadoop
数据仓库 Hive
HIVE产生背景
- MR编程不方便,不如语句来的直接
- 传统RDBMS人员需要
HIVE概述
- 由Facebook开源,用于解决海量结构化日志的数据统计问题
- 构建在Hadoop之上的数据仓库
- 提供SQL查询语言,使用SQL对大数据进行统计分析
- 底层支持多种不同的执行引擎(例如MapReduce,Tez,Spark),并且对用户透明
统一的元数据管理:
- Hive数据式存储在HDFS中的
- 元数据信息是存放在MYSQL中的
- SQL on Hadoop: Hive,Spart sql,impala,创建的表,互相之间都可以直接移植使用
HIVE体系架构
client: shell本机代码,thrift/jdbc(server/jdbc)jdbc连接,webUI(HUE/Zeppelin)在界面上可视化
Metastore:元数据,存储在MYSQL上
Driver:将SQL语句编译成语法树,对语法树优化,并将其最终翻译成MR作业,使用Hadoop进行运行
HIVE部署架构
测试环境:
生产环境,防止MYSQL完蛋
HIVE与RDBMS的区别
标签:HDFS,存储,副本,Hadoop,基础知识,机架,数据 来源: https://blog.csdn.net/qq_33556348/article/details/115858205