2024年大数据最全【Hadoop】一、Apache Hadoop、 HDFS(1)

</property>

<!-- 整合hive 用户代理设置 -->
<property>
    <name>hadoop.proxyuser.root.hosts</name>
    <value>*</value>
</property>

<property>
    <name>hadoop.proxyuser.root.groups</name>
    <value>*</value>
</property>

<!-- 文件系统垃圾桶保存时间 -->
<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

```
+ hdfs-site.xml

 
```
<!-- 设置SNN进程运行机器位置信息 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>node2:9868</value>
</property>

```
+ mapred-site.xml

 
```
<!-- 设置MR程序默认运行模式: yarn集群模式 local本地模式 -->
<property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
</property>

<!-- MR程序历史服务地址 -->
<property>
  <name>mapreduce.jobhistory.address</name>
  <value>node1:10020</value>
</property>
 
<!-- MR程序历史服务器web端地址 -->
<property>
  <name>mapreduce.jobhistory.webapp.address</name>
  <value>node1:19888</value>
</property>

<property>
  <name>yarn.app.mapreduce.am.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.map.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

<property>
  <name>mapreduce.reduce.env</name>
  <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
</property>

```
+ yarn-site.xml

 
```
<!-- 设置YARN集群主角色运行机器位置 -->
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>node1</value>
</property>

<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 是否将对容器实施物理内存限制 -->
<property>
    <name>yarn.nodemanager.pmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 是否将对容器实施虚拟内存限制。 -->
<property>
    <name>yarn.nodemanager.vmem-check-enabled</name>
    <value>false</value>
</property>

<!-- 开启日志聚集 -->
<property>
  <name>yarn.log-aggregation-enable</name>
  <value>true</value>
</property>

<!-- 设置yarn历史服务器地址 -->
<property>
    <name>yarn.log.server.url</name>
    <value>http://node1:19888/jobhistory/logs</value>
</property>

<!-- 历史日志保存的时间 7天 -->
<property>
  <name>yarn.log-aggregation.retain-seconds</name>
  <value>604800</value>
</property>

```
+ workers

 
```
node1
node2
node3

```
  • 分发同步hadoop安装包
cd /export/server

scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD

  • 将hadoop添加到环境变量(3台机器)
vim /etc/profile

export HADOOP\_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP\_HOME/bin:$HADOOP\_HOME/sbin

source /etc/profile


#别忘了scp给其他两台机器哦

  • Hadoop集群启动

    • (首次启动)格式化namenode
    hdfs namenode -format
    
    
    • 脚本一键启动
    [root@node1 ~]# start-dfs.sh 
    Starting namenodes on [node1]
    Last login: Thu Nov  5 10:44:10 CST 2020 on pts/0
    Starting datanodes
    Last login: Thu Nov  5 10:45:02 CST 2020 on pts/0
    Starting secondary namenodes [node2]
    Last login: Thu Nov  5 10:45:04 CST 2020 on pts/0
    
    [root@node1 ~]# start-yarn.sh 
    Starting resourcemanager
    Last login: Thu Nov  5 10:45:08 CST 2020 on pts/0
    Starting nodemanagers
    Last login: Thu Nov  5 10:45:44 CST 2020 on pts/0
    
    
    • Web UI页面

      • HDFS集群:http://node1:9870/
      • YARN集群:http://node1:8088/

  • 错误1:运行hadoop3官方自带mr示例出错。

    • 错误信息
    Error: Could not find or load main class org.apache.hadoop.mapreduce.v2.app.MRAppMaster
    
    Please check whether your etc/hadoop/mapred-site.xml contains the below configuration:
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${full path of your hadoop distribution directory}</value>
    </property>
    
    
    • 解决 mapred-site.xml,增加以下配置
    <property>
      <name>yarn.app.mapreduce.am.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.map.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
      <name>mapreduce.reduce.env</name>
      <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    
    

Hadoop集群启停

  • 每台机器上每次手动启动关闭一个角色进程,可以精准控制每个进程启停,避免群起群停。
  • HDFS集群
#hadoop2.x版本命令
hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
#hadoop3.x版本命令
hdfs --daemon start|stop namenode|datanode|secondarynamenode

  • YARN集群
#hadoop2.x版本命令
yarn-daemon.sh start|stop resourcemanager|nodemanager
#hadoop3.x版本命令
yarn --daemon start|stop resourcemanager|nodemanager

shell脚本一键启停

  • 在node1上,使用软件自带的shell脚本一键启动。前提:配置好机器之间的SSH免密登录和workers文件。
  • HDFS集群 start-dfs.sh stop-dfs.sh
  • YARN集群 start-yarn.sh stop-yarn.sh
  • Hadoop集群 start-all.sh stop-all.sh

HDFS集群

  • 地址:http://namenode_host:9870 其中namenode_host是namenode运行所在机器的主机名或者ip 如果使用主机名访问,别忘了在Windows配置hosts

在这里插入图片描述

YARN集群

  • 地址:http://resourcemanager_host:8088 其中resourcemanager_host是resourcemanager运行所在机器的主机名或者ip 如果使用主机名访问,别忘了在Windows配置hosts

在这里插入图片描述

3、HDFS分布式文件系统基础

文件系统定义

  • 文件系统 是一种 存储组织数据 的方法,实现了数据的存储、分级组织、访问和获取等操作,使得用户 对文件访问和查找变得容易;
  • 文件系统使用 树形目录 的抽象逻辑概念代替了硬盘等物理设备使用数据块的概念,用户不必关心数据底层存在硬盘哪里,只需要记住这个文件的所属目录和文件名即可;
  • 文件系统通常使用硬盘和光盘这样的存储设备,并维护文件在设备中的物理位置。

传统常见的文件系统

  • 所谓 传统 常见的文件系统更多指的的单机的文件系统,也就是底层不会横跨多台机器实现。比如windows操作系统上的文件系统、Linux上的文件系统、FTP文件系统等等。
  • 这些文件系统的共同特征包括:
  1. 带有抽象的目录树结构,树都是从/根目录开始往下蔓延;
  2. 树中节点分为两类:目录和文件 ;
  3. 从根目录开始,节点路径具有唯一性。

数据、元数据

  • 数据
    指存储的内容本身,比如文件、视频、图片等,这些数据底层最终是存储在磁盘等存储介质上的,一般用户无需关心,只需要基于目录树进行增删改查即可,实际针对数据的操作由文件系统完成。
  • 元数据
    元数据(metadata)又称之为解释性数据,记录数据的数据;
    文件系统元数据一般指文件大小、最后修改时间、底层存储位置、属性、所属用户、权限等信息。

海量数据存储遇到的问题

  • 成本高
    传统存储硬件通用性差,设备投资加上后期维护、升级扩容的成本非常高。
  • 如何支撑高效率的计算分析
    传统存储方式意味着数据:存储是存储,计算是计算,当需要处理数据的时候把数据移动过来。
    程序和数据存储是属于不同的技术厂商实现,无法有机统一整合在一起。
  • 性能低
    单节点I/O性能瓶颈无法逾越,难以支撑海量数据的高并发高吞吐场景。
  • 可扩展性差
    无法实现快速部署和弹性扩展,动态扩容、缩容成本高,技术实现难度大。

一、分布式存储的优点

 问题:数据量大,单机存储遇到瓶颈
 解决:
单机纵向扩展:磁盘不够加磁盘,有上限瓶颈限制
多机横向扩展:机器不够加机器,理论上无限扩展

二、元数据记录的功能

 问题:文件分布在不同机器上不利于寻找
 解决:元数据记录下文件及其存储位置信息,快速定位文件位置

三、分块存储好处

 问题:文件过大导致单机存不下、上传下载效率低
 解决:文件分块存储在不同机器,针对块并行操作提高效率

四:副本机制的作用

 问题:硬件故障难以避免,数据易丢失
 解决:不同机器设置备份,冗余存储,保障数据安全

HDFS简介

  • HDFS(Hadoop Distributed File System ),意为: Hadoop分布式文件系统 。是Apache Hadoop核心组件之一,作为大数据生态圈最底层的分布式存储服务而存在。也可以说大数据首先要解决的问题就是海量数据的存储问题。
  • HDFS主要是解决大数据如何存储问题的。分布式意味着是HDFS是横跨在多台计算机上的存储系统。
  • HDFS是一种能够在普通硬件上运行的分布式文件系统,它是高度容错的,适应于具有大数据集的应用程序,它非常适于存储大型数据(比如TB 和PB)。
  • HDFS使用多台计算机存储文件, 并且提供统一的访问接口, 像是访问一个普通文件系统一样使用分布式文件系统。

HDFS设计目标

  • 硬件故障(Hardware Failure)是常态,HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此 故障检测和自动快速恢复 是HDFS的核心架构目标。
  • HDFS上的应用主要是以流式读取数据(Streaming Data Access)。HDFS被设计成 用于批处理 ,而不是用户交互式的。相较于数据访问的反应时间,更 注重数据访问的高吞吐量
  • 典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成 支持大文件(Large Data Sets) 。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
  • 大部分HDFS应用对文件要求的是 write-one-read-many 访问模型。一个文件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据一致性问题,使高吞吐量的数据访问成为可能。
  • 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效。将计算移动到数据附近,比之将数据移动到应用所在显然更好。
  • HDFS被设计为可从一个平台轻松移植到另一个平台。这有助于将HDFS广泛用作大量应用程序的首选平台。

HDFS应用场景

适合场景

大文件
数据流式访问
一次写入多次读取
低成本部署,廉价PC
高容错

不适合场景

小文件
数据交互式访问
频繁任意修改
低延迟处理

HDFS重要特性

( 1 )主从架构

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

在这里插入图片描述

( 2 )分块存储

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

在这里插入图片描述

( 3 )副本机制

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

( 4 )元数据管理

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

  • 文件自身属性信息
    文件名称、权限,修改时间,文件大小,复制因子,数据块大小。
  • 文件块位置映射信息
    记录文件块和DataNode之间的映射信息,即哪个块位于哪个节点上。

( 5 )namespace

  • HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。
  • Namenode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被Namenode记录下来。
  • HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

在这里插入图片描述

( 6 )数据块存储

  • 文件的各个block的具体存储管理由DataNode节点承担。
  • 每一个block都可以在多个DataNode上存储。

HDFS shell命令行解释说明

介绍

  • 命令行界面(英语:command-line interface,缩写:CLI),是指用户通过键盘输入指令,计算机接收到指令后,予以执行一种人际交互方式。
  • Hadoop提供了文件系统的shell命令行客户端: hadoop fs [generic options]

文件系统协议

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

区别

  • hadoop dfs 只能操作HDFS文件系统(包括与Local FS间的操作),不过已经Deprecated;
  • hdfs dfs 只能操作HDFS文件系统相关(包括与Local FS间的操作),常用;
  • hadoop fs 可操作任意文件系统,不仅仅是hdfs文件系统,使用范围更广;
    目前版本来看,官方最终推荐使用的是hadoop fs。当然hdfs dfs在市面上的使用也比较多。

HDFS shell命令行常用操作

1 、创建文件夹

  • hadoop fs -mkdir [-p] …
    path 为待创建的目录
    -p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录。

2 、查看指定目录下内容

  • hadoop fs -ls [-h] [-R] [< path> …]
    path 指定目录路径
    -h 人性化显示文件size
    -R 递归查看指定目录及其子目录

3 、上传文件到HDFS指定目录下

  • hadoop fs -put [-f] [-p] …
    -f 覆盖目标文件(已存在下)
    -p 保留访问和修改时间,所有权和权限。
    localsrc 本地文件系统(客户端所在机器)
    dst 目标文件系统(HDFS)

4 、查看HDFS文件内容

  • hadoop fs -cat …
    读取指定文件全部内容,显示在标准输出控制台。
    注意:对于 大文件内容读取,慎重 。

5 、下载HDFS文件

  • hadoop fs -get [-f] [-p] …
    下载文件到本地文件系统指定目录,localdst必须是目录
    -f 覆盖目标文件(已存在下)
    -p 保留访问和修改时间,所有权和权限。

6 、拷贝HDFS文件

  • hadoop fs -cp [-f] …
    -f 覆盖目标文件(已存在下)

7 、追加数据到HDFS文件中

  • hadoop fs -appendToFile …
    将所有给定本地文件的内容追加到给定dst文件。
    dst如果文件不存在,将创建该文件。
    如果为-,则输入为从标准输入中读取。

8 、HDFS数据移动操作

  • hadoop fs -mv …
    移动文件到指定文件夹下
    可以使用该命令移动数据,重命名文件的名称

命令官方指导文档
https://hadoop.apache.org/docs/r3.3.0/hadoop-project-dist/hadoop-common/FileSystemShell.html

4、HDFS工作流程与机制

HDFS集群角色与职责

主角色:namenode

  • NameNode 是Hadoop分布式文件系统的核心,架构中的主角色。
  • NameNode维护和管理文件系统元数据 ,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
  • 基于此,NameNode成为了访问HDFS的唯一入口。
  • NameNode内部通过内存和磁盘文件两种方式管理元数据。
  • 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log(Journal)编辑日志。

在这里插入图片描述

从角色:datanode

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

e维护和管理文件系统元数据** ,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。

  • 基于此,NameNode成为了访问HDFS的唯一入口。
  • NameNode内部通过内存和磁盘文件两种方式管理元数据。
  • 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log(Journal)编辑日志。

在这里插入图片描述

从角色:datanode

[外链图片转存中…(img-PQdiKCao-1714645039449)]
[外链图片转存中…(img-8XVgFInd-1714645039450)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值