hadoop学习记录

发布时间 2023-04-07 12:07:54作者: 步履不停1991

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副本策略。