hadoop知识点总结

Hadoop简介安装

狭义上Hadoop指的是Apache软件基金会的一款开源软件用java语言实现,开源允许用户使用简单的编程模型实现跨机器集群对海量数据进行分布式计算处理

Hadoop核心组件

  • Hadoop HDFS(分布式文件存储系统):解决海量数据存储
  • Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度****
  • Hadoop MapReduce(分布式计算框架):解决海量数据计算

Hadoop之父:Doug Cutting
遇到瓶颈:如何解决数十亿网页的存储和索引问题
源自Google三篇论文

Hadoop集群包括两个集群:

两个集群逻辑上分离、通常物理上在一起
两个集群都是标准的主从架构集群

  • HDFS集群
  • YARN集群

首次启动HDFS时,必须对其进行格式化操作。
format本质上是初始化工作,进行HDFS清理和准备工作
命令:
hdfs namenode -format
每台机器上每次手动启动关闭一个角色进程,可以精准控制每个进程启停,避免群起群停。

  • HDFS集群

hadoop3.x版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenode

  • YARN集群

hadoop3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager

shell脚本一键启停

在node1上,使用软件自带的shell脚本一键启动。前提:配置好机器之间的SSH免密登录和
workers文件。

  1. HDFS集群
start-dfs.sh 
stop-dfs.sh
  1. YARN集群
start-yarn.sh
stop-yarn.sh
  1. Hadoop集群
start-all.sh
stop-all.sh

启动完毕之后可以使用jps命令查看进程是否启动成功
web界面:

  • HDFS集群:http://namenode_host:9870
  • YARN集群:http://resourcemanager_host:8088

HDFS shell命令:

HDFS Shell CLI支持操作多种文件系统,包括本地文件系统(file:///)、分布式文件系统(hdfs://nn:8020)等
具体操作的是什么文件系统取决于命令中文件路径URL中的前缀协议。
如果没有指定前缀,则将会读取环境变量中的fs.defaultFS属性,以该属性值作为默认文件系统。

hadoop fs -ls file:/// #操作本地文件系统
hadoop fs -ls hdfs://node1:8020/ #操作HDFS分布式文件系统
hadoop fs -ls / #直接根目录,没有指定协议 将加载读取fs.defaultFS值
hadoop fs -mkdir [-p] <path> ... 
path 为待创建的目录
-p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录。
hadoop fs -ls [-h] [-R] [<path> ...]
path 指定目录路径
-h 人性化显示文件size
-R 递归查看指定目录及其子目录
hadoop fs -put [-f] [-p] <localsrc> ... <dst>
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限。
localsrc 本地文件系统(客户端所在机器)
dst 目标文件系统(HDFS)
hadoop fs -cat <src> ... 
hadoop fs -get [-f] [-p] <src> ... <localdst>
下载文件到本地文件系统指定目录,localdst必须是目录
-f 覆盖目标文件(已存在下)
-p 保留访问和修改时间,所有权和权限
hadoop fs -cp [-f] <src> ... <dst>
-f 覆盖目标文件(已存在下)
hadoop fs -appendToFile <localsrc> ... <dst>
将所有给定本地文件的内容追加到给定dst文件。
dst如果文件不存在,将创建该文件。
如果<localSrc>为-,则输入为从标准输入中读取。
hadoop fs -mv <src> ... <dst>
移动文件到指定文件夹下
可以使用该命令移动数据,重命名文件的名称

HDFS

文件系统与分布式文件系统,HDFS简介,HDFS重要特性等

HDFS简介
HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。
HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非
常适于存储大型数据 (比如 TB 和 PB)。
HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统

整体概述

  • 主从架构

HDFS集群是标准的master/slave主从架构集群。
一般一个HDFS集群是有一个Namenode和一定数目的Datanode组成。
Namenode是HDFS主节点,Datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服
务。
官方架构图中是一主五从模式,其中五个从角色位于两个机架(Rack)的不同服务器上。

  • 分块存储

HDFS中的文件在物理上是分块存储(block)的,默认大小是128M(134217728),不足128M则本身就是一块
块的大小可以通过配置参数来规定,参数位于hdfs-default.xml中:dfs.blocksize。

  • 副本机制

文件的所有block都会有副本。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变
副本数由参数dfs.replication控制,默认值是3,也就是会额外再复制2份,连同本身总共3份副本

  • 元数据记录

在HDFS中,Namenode管理的元数据具有两种类型:

  1. 文件自身属性信息
    文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
  2. 文件块位置映射信息
    记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。
  • 抽象统一的目录树结构(namespace)

HDFS集群角色与职责
namenode职责

  • NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际数据。
  • NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
  • NameNode不持久化存储每个文件中各个块所在的datanode的位置信息,这些信息会在系统启动时从DataNode
  • 重建。
  • NameNode是Hadoop集群中的单点故障。
  • NameNode所在机器通常会配置有大量内存(RAM)。

datanode职责

  • DataNode负责最终数据块block的存储。是集群的从角色,也称为Slave。
  • DataNode启动时,会将自己注册到NameNode并汇报自己负责持有的块列表。
  • 当某个DataNode关闭时,不会影响数据的可用性。 NameNode将安排由其他DataNode管理的块进行副本复制
  • DataNode所在机器通常配置有大量的硬盘空间,因为实际数据存储在DataNode中。

写数据完整流程:

  • 通过pipeline管道客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将
    其复制到第三个数据节点。使用反方向ack校验,默认3副本策略。

YARN

YARN功能说明

  • 资源管理系统:集群的硬件资源,和程序运行相关,比如内存、CPU等。
  • 调度平台:多个程序同时申请计算资源如何分配,调度的规则(算法)。
  • 通用:不仅仅支持MapReduce程序,理论上支持各种计算程序。YARN不关心你干什么,只关心你要资源,在有的情况下给你,用完之后还我。

YARN概述

  • 可以把Hadoop YARN理解为相当于一个分布式的操作系统平台,而MapReduce等计算程序则相当于运行于操作系统之上的应用程序,YARN为这些程序提供运算所需的资源(内存、CPU等)。
  • Hadoop能有今天这个地位,YARN可以说是功不可没。因为有了YARN ,更多计算框架可以接入到 HDFS中,而不单单是 MapReduce,正是因为YARN的包容,使得其他计算框架能专注于计算性能的提升。
  • HDFS可能不是最优秀的大数据存储系统,但却是应用最广泛的大数据存储系统, YARN功不可没

YARN3大组件

  • ResourceManager(RM)

YARN集群中的主角色,决定系统中所有应用程序之间资源分配的最终权限,即最终仲裁者。
接收用户的作业提交,并通过NM分配、管理各个机器上的计算资源。

  • NodeManager(NM)

YARN中的从角色,一台机器上一个,负责管理本机器上的计算资源。
根据RM命令,启动Container容器、监视容器的资源使用情况。并且向RM主角色汇报资源使用情况。

  • ApplicationMaster(AM)

用户提交的每个应用程序均包含一个AM。
应用程序内的“老大”,负责程序内部各阶段的资源申请,监督程序的执行情况

核心交互流程

  • MR作业提交 Client-->RM
  • 资源的申请 MrAppMaster-->RM
  • MR作业状态汇报 Container(Map|Reduce Task)-->Container(MrAppMaster)
  • 节点的状态汇报 NM-->RM

YARN资源调度器Scheduler

在理想情况下,应用程序提出的请求将立即得到YARN批准。但是实际中,资源是有限的,并且在繁忙的群集上,应用程序通常将需要等待其某些请求得到满足。YARN调度程序的工作是根据一些定义的策略为应用程序分配资源。
在YARN中,负责给应用分配资源的就是Scheduler,它是ResourceManager的核心组件之一。Scheduler完全专用于调度作业,它无法跟踪应用程序的状态

三种调度器

  • FIFO Scheduler(先进先出调度器)

FIFO Scheduler是一个先进先出的思想,即先提交的应用先运行。调度工作不考虑优先级和范围,适用于负载较低的小规模集群。当使用大型共享集群时,它的效率较低且会导致一些问题

  • Capacity Scheduler(容量调度器)

Capacity Scheduler容量调度是Apache Hadoop3.x默认调度策略。该策略允许多个组织共享整个集群资源,每个组织可以获得集群的一部分计算能力。通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源,这样整个集群就可以通过设置多个队列的方式给多个组织提供服务了

  • Fair Scheduler(公平调度器)

Fair Scheduler叫做公平调度,提供了YARN应用程序公平地共享大型集群中资源的另一种方式。使所有应用在平均情况下随着时间的流逝可以获得相等的资源份额

MapReduce

Hadoop MapReduce是一个分布式计算框架,用于轻松编写分布式应用程序,这些应用程序以可靠,容错的方式并行处理大型硬件集群(数千个节点)上的大量数据(多TB数据集)。
MapReduce是一种面向海量数据处理的一种指导思想,也是一种用于对大规模数据进行分布式计算的编程模型。

WordCount编程实现思路

  • map阶段的核心:把输入的数据经过切割,全部标记1,因此输出就是<单词,1>。
  • shuffle阶段核心:经过MR程序内部自带默认的排序分组等功能,把key相同的单词会作为一组数据构成新的kv对。
  • reduce阶段核心:处理shuffle完的一组数据,该组数据就是该单词所有的键值对。对所有的1进行累加求和,就是单词的总次数

例子:WordCount程序提交
上传课程资料中的文本文件1.txt到HDFS文件系统的/input目录下,如果没有这个目录,使用shell创建

hadoop fs -mkdir /input
hadoop fs -put 1.txt /input

准备好之后,执行官方MapReduce实例,对上述文件进行单词次数统计
第一个参数:wordcount表示执行单词统计任务;
第二个参数:指定输入文件的路径;
第三个参数:指定输出结果的路径(该路径不能已存在)

[root@node1 mapreduce]# pwd
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount 
/input /output
posted @ 2023-04-07 12:01  步履不停1991  阅读(92)  评论(0编辑  收藏  举报