【Hadoop】一、Apache Hadoop、 HDFS

  • Step1:集群角色规划

    • 角色规划的准则根据软件工作特性和服务器硬件资源情况合理分配

比如依赖内存工作的NameNode是不是部署在大内存机器上?

+ 角色规划注意事项资源上有抢夺冲突的,尽量不要部署在一起

工作上需要互相配合的。尽量部署在一起

服务器运行角色
node1namenode datanode resourcemanager nodemanager
node2secondarynamenode datanode nodemanager
node3atanode nodemanager
  • Step2:服务器基础环境准备

主机名(3台机器) vim /etc/hostname

node1
node2
node3

设置静态IP

+ `node1:`  
 `UUID="08d531cc-32bb-4c25-b146-566ad30307af"`  
 `IPADDR="192.168.88.131"`
+ `node2:`  
 `UUID="08d531cc-32bb-4c25-b147-566ad30307af"`  
 `IPADDR="192.168.88.132"`
+ `node3:`  
 `UUID="08d531cc-32bb-4c25-b148-566ad30307af"`  
 `IPADDR="192.168.88.133"`Hosts映射(3台机器) `vim /etc/hosts`
192.168.88.131 node1
192.168.88.132 node2
192.168.88.133 node3

防火墙关闭(3台机器)

systemctl stop firewalld.service #关闭防火墙 

systemctl disable firewalld.service #禁止防火墙开启自启

ssh免密登录(node1执行->node1|node2|node3)

ssh-keygen #4个回车 生成公钥、私钥 
ssh-copy-id node1、ssh-copy-id node2、ssh-copy-id node3 #

集群时间同步(3台机器)

 yum -y install ntpdate 
 ntpdate ntp4.aliyun.com

创建统一工作目录(3台机器)

 mkdir -p /export/server/ #软件安装路径 
 mkdir -p /export/data/ #数据存储路径 
 mkdir -p /export/software/ #安装包存放路径

  • Step3:上传安装包、解压安装包
  • Step4:Hadoop安装包目录结构
目录说明
binHadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
etcHadoop配置文件所在的目录
include对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
lib该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
libexec各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
sbinHadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
shareHadoop各个模块编译后的jar包所在的目录,官方自带示例。

配置文件概述

+ 官网文档:https://hadoop.apache.org/docs/r3.3.0/
+ 第一类1个:hadoop-env.sh
+ 第二类4个:

 xxxx-site.xml ,site表示的是用户定义的配置,会覆盖default中的默认配置。

 core-site.xml 核心模块配置 hdfs-site.xml hdfs文件系统模块配置

 mapred-site.xml MapReduce模块配置

 yarn-site.xml yarn模块配置
+ 第三类1个:workers
+ 所有的配置文件目录:/export/server/hadoop-3.3.0/etc/hadoop
  • 修改配置文件(配置文件路径 hadoop-3.3.0/etc/hadoop)

    • hadoop-env.sh
    #文件最后添加
    export JAVA\_HOME=/export/server/jdk1.8.0_241
    
    export HDFS\_NAMENODE\_USER=root
    export HDFS\_DATANODE\_USER=root
    export HDFS\_SECONDARYNAMENODE\_USER=root
    export YARN\_RESOURCEMANAGER\_USER=root
    export YARN\_NODEMANAGER\_USER=root 
    
    
    • core-site.xml
    <!-- 设置默认使用的文件系统 Hadoop支持file、HDFS、GFS、ali|Amazon云等文件系统 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node1:8020</value>
    </property>
    
    <!-- 设置Hadoop本地保存数据路径 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/export/data/hadoop-3.3.0</value>
    </property>
    
    <!-- 设置HDFS web UI用户身份 -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </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 …
    读取指定文件全部内容,显示在标准输出控制台。
    注意:对于 大文件内容读取,慎重 。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
img

注意:对于 大文件内容读取,慎重 。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数大数据工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年大数据全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
[外链图片转存中…(img-sNVyFm00-1712868434151)]
[外链图片转存中…(img-rnkaSdGv-1712868434151)]
[外链图片转存中…(img-s9UxJoSJ-1712868434151)]
[外链图片转存中…(img-yIzZJHQK-1712868434152)]
[外链图片转存中…(img-GeK8JLgW-1712868434152)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上大数据开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注大数据获取)
[外链图片转存中…(img-ITNQU4N2-1712868434152)]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值