【Hadoop 01】简介

目录

1 Hadoop 简介

2 下载并配置Hadoop

2.1 修改/etc/profile

2.2 修改hadoop-env.sh

2.3 修改core-site.xml

2.4 修改hdfs-site.xml

2.5 修改mapred-site.xml

2.6 修改yarn-site.xml

2.7 修改workers

2.8 修改start-dfs.sh、stop-dfs.sh

2.9 修改start-yarn.sh、stop-yarn.sh

2.10 启动集群

3 HDFS

3.1 HDFS常见shell操作

3.2 HDFS实操案例

3.3 HDFS体系结构

3.4 DataNode总结

3.5 NameNode总结

3.6 HDFS的回收站

 3.7 HDFS的安全模式

 3.8 案例:定时上传文件到HDFS

 3.9 HDFS的高可用(HA)

 3.10 HDFS的高扩展(Federation)

4 MapReduce

4.1 Map阶段

4.2 Redeuce阶段

4.3 MapRedeuce任务日志查看

4.4 Shuffle原理

4.5 Shuffle原理

4.6 InputSplit原理

4.7 RecodReader原理


1 Hadoop 简介

Hadoop适合海量数据分布式存储和分布式计算

Hadoop 3.x的细节优化:

  • Java改为支持8及以上
  • HDFS支持纠删码
  • HDFS支持多NameNode
  • MR任务级本地优化
  • 多重服务默认端口变更

hadoop-structure

Hadoop主要包含三大组件:HDFS+MapReduce+YARN

  • HDFS负责海量数据的分布式存储
  • MapReduce是一个计算模型,负责海量数据的分布式计算
  • YARN主要负责集群资源的管理和调度

2 下载并配置Hadoop

ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys

把 公钥 的内容 附加到 authorized_keys 里:

修改hostname

su root
hostname bigdata01

第一次设置密码

 更换主机名之后

2.1 修改/etc/profile

vim /etc/profile

添加

export HADOOP_HOME=/data/soft/hadoop-3.2.0
export PATH=.:$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH

需要root权限

等号前后不能有空格


 

java的环境也要有

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie"  http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz

 source一下使得环境变量生效

source /etc/profile

检查一下环境是否装好

检查是否装好hadoop

以下文件在{HADOOP_HOME}/etc/hadoop/目录下

2.2 修改hadoop-env.sh

JAVA_HOME是ubuntu系统自带的 log日志是自己建立的

export JAVA_HOME=/home/gdan/data/jdk-8u131-linux-x64/jdk1.8.0_131
export HADOOP_LOG_DIR=/home/gdan/data/soft/hadoop_repo/logs/hadoop

(注意这里 等号附近 前往不能有空格)

2.3 修改core-site.xml

<configuration>
    <property>
         <name>fs.defaultFS</name>
         <value>hdfs://bigdata01:9000</value>
     </property>
     <property>
         <name>hadoop.tmp.dir</name>
         <value>/data/hadoop_repo</value>
     </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
</configuration>

2.4 修改hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

2.5 修改mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

2.6 修改yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

2.7 修改workers

bigdata01

2.8 修改start-dfs.sh、stop-dfs.sh

在文件开头添加

HDFS_DATANODE_USER=root
HDFS_DATANODE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

2.9 修改start-yarn.sh、stop-yarn.sh

在文件开头添加

YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

2.10 启动集群

第一次启动时,先初始化datanode,执行如下命令:

hdfs namenode -format

格式化操作

启动集群:(这里可能有一堆问题 例如openssh没有安装等等) 

访问界面

  • HDFS webui界面:http://bigdata01:9870
  • YARN webui界面:http://bigdata01:8088

 

3 HDFS

HDFS是一种允许文件通过网络在多台主机上分享的文件系统,可以让多台机器上的多个用户分享文件和存储空间

3.1 HDFS常见shell操作

hdfs dfs [-cmd] 
  • -ls:查询指定路径信息
  • -put:从本地上传文件
  • -cat:查看HDFS文件内容
  • -get:下载文件到本地
  • -mkdir [-p]:创建文件夹
  • -rm [-r]:删除文件/文件夹

3.2 HDFS实操案例

hdfs dfs -ls / | grep / | wc -l

 linux管道

在Linux中,管道(pipe)是一种特殊的机制,用于将一个命令的输出连接到另一个命令的输入。通过使用管道,可以将多个命令组合在一起,以实现更复杂的任务。

管道使用竖线符号(|)表示。它将前一个命令的输出作为后一个命令的输入。例如,下面的命令将列出当前目录中的文件,并将结果通过管道传递给grep命令进行过滤:

 ls | grep keyword

上述命令将列出包含关键字"keyword"的文件。

管道可以连接任意数量的命令。例如,下面的命令将列出当前目录中的文件,并按文件大小进行排序,然后显示前10个最大的文件:

ls -l | sort -nrk 5 | head -n 10

上述命令首先使用ls -l命令列出文件和目录的详细信息,然后将结果通过管道传递给sort命令,按第5列(文件大小)进行逆序排序,最后将结果通过管道传递给head命令,只显示前10行。

通过使用管道,可以将简单的命令组合成更复杂的操作,提高命令行的灵活性和效率。管道是Linux中强大而常用的功能之一。

 ls 指定/目录,grep 搜索 / 目录,wc显示行数

hdfs dfs -ls / | grep / | awk '{print $8,$5}'

| awk '{print $8,$5}': 这部分命令继续使用管道符号将前一个命令的输出传递给awk命令。awk '{print $8,$5}'用于打印每行的第8个字段(文件或目录名)和第5个字段(文件大小)。字段之间用空格分隔。

3.3 HDFS体系结构

  • HDFS支持主从结构,主节点称为NameNode,支持多个;从节点称为DataNode,支持多个
  • HDFS中还包含一个SecondaryNameNode进程

1. NameNode--大老板

  • NameNode是整个文件系统的管理节点
  • 它主要维护着整个文件系统的文件目录树,文件/目录的信息和每个文件对应的数据块列表,并且还负责接收用户的操作请求

2. SecondaryNameNode--秘书

  • 主要负责定期的把edits中的内容合并到fsimage中
  • 这个合并操作称为checkpoint,在合并的时候会对edits中的内容进行转换,生成新的内容保存到fsimage文件中
  • 注意:在NameNode的HA(高可用)架构中没有SecondaryNameNode进程,文件合并操作会由standby NameNode负责实现

3. DataNode--小二

  • 提供真实文件数据的存储服务
  • HDFS会按照固定的大小,顺序对文件进行划分并编号,划分好的每一个块称一个Block,HDFS默认Block大小是128MB
  • HDFS中,如果一个文件小于一个数据块的大小,那么并不会占用整个数据块的存储空间
  • Replication:多副本机制,HDFS默认副本数量为3
  • 通过dfs.replication属性控制

3.4 DataNode总结

注意:Block块存放在哪些DataNode上,只有DataNode自己知道,当集群启动的时候,DataNode会扫描自己节点上面的所有Block块信息,然后把节点和这个节点上的所有Block块信息告诉给NameNode。这个关系是每次重启集群都会动态加载的【这个其实就是集群为什么数据越多,启动越慢的原因】

3.5 NameNode总结

NameNode维护了两份关系:

  • 第一份关系:File与Block list的关系,对应的关系信息存储在fsimage和edits文件中(当NameNode启动的时候会把文件中的元数据信息加载到内存中)
  • 第二份关系:Datanode与Block的关系(当DataNode启动时,会把当前节点上的Block信息和节点信息上报给NameNode)

文件的元数据信息在NameNode里面都会占用150字节的存储空间。

1,fsimage文件其实是hadoop文件系统元数据的一个永久性的检查点,其中包含hadoop文件系统中的所有目录和文件idnode的序列化信息。

2,edits文件存放的是hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。

3.6 HDFS的回收站

在core-site.xml添加配置

<property>
    <name>fs.trash.interval</name>
    <value>1440</value>
</property>

重启hadoop

stop-all.sh
start-all.sh

忽略回收站删除文件的命令:

  • HDFS为每个用户创建一个回收站目录:/user/用户名/.Trash/
  • 回收站中的数据都会有一个默认保存周期,过期未恢复则会被HDFS自动彻底删除
  • 注意:HDFS的回收站默认是没有开启的,需要修改core-site.xml中的fs.trash.interval属性

 3.7 HDFS的安全模式

  • 集群刚启动时,HDFS会进入安全模式,此时无法执行操作
  • 查看安全模式:hdfs dfsadmin -safemode get
  • 离开安全模式:hdfs dfsadmin -safemode leave

 3.8 案例:定时上传文件到HDFS

案例需求:例如日志文件为access_2020_01_01.log,每天上传到HDFS中
解决思路

  1. 我们需要获取到昨天日志文件的名称
  2. 在HDFS上面使用昨天的日期创建目录
  3. 将昨天的日志文件上传到刚创建的HDFS目录中
  4. 要考虑到脚本重跑,补数据的情况
  5. 配置crontab任务

 3.9 HDFS的高可用(HA)

HDFS HA

  • HDFS的HA,表示一个集群中存在多个NameNode,只有一个NameNode是处于Active状态,其它的是处于Standby状态
  • Active NameNode(ANN)负责所有客户端的操作,Standby NameNode(SNN)用于同步ANN的状态信息,提供快速故障恢复能力
  • 使用HA的时候,不能启动SecondaryNameNode

 3.10 HDFS的高扩展(Federation)

  • Federation可解决单一命名空间的一些问题,提供以下特性:HDFS集群扩展性、性能更高效、良好的隔离性

4 MapReduce

  • MapReduce是一种分布式计算模型,主要用于搜索领域,解决海量数据的计算问题
  • MapReduce有两个阶段组成:Map和Reduce

MapReduce原理

4.1 Map阶段

  1. 框架会把输入文件(夹)划分为很多InputSplit,默认每个HDFS的Block对应一个InputSplit。通过RecordReader类,把每个InputSplit解析成一个个<k1,v1>。默认每一行数据,会被解析成一个<k1,v1>
  2. 框架调用Mapper类中的map(...)函数,map函数的输入是<k1,v1>,输出是<k2,v2>。一个InputSplit对应一个Map Task
  3. 框架对map函数输出的<k2,v2>进行分区。不同分区中的<k2,v2>由不同的Reduce Task处理,默认只有1个分区
  4. 框架对每个分区中的数据,按照k2进行排序、分组。分组,指的是相同k2的v2分成一个组
  5. 在Map阶段,框架可以执行Combiner操作【可选】
  6. 框架会把Map Task输出的<k2,v2>写入Linux的磁盘文件中

4.2 Redeuce阶段

  1. 框架对多个Map Task的输出,按照不同的分区,通过网络Copy到不同的Reduce节点,这个过程称作Shuffle
  2. 框架对Reduce节点接收到的相同分区的<k2,v2>数据进行合并、排序、分组
  3. 框架调用Reducer类中的reduce方法,输入<k2,{v2...}>,输出<k3,v3>。一个<k2,{v2...}>调用一次reduce函数
  4. 框架把Reduce的输出结果保存到HDFS中

4.3 MapRedeuce任务日志查看

在yarn-site.xml添加配置,开启YARN的日志聚合功能,把散落在NodeManager节点上的日志统一收集管理,方便查看日志

<property> 
    <name>yarn.log-aggregation-enable</name> 
    <value>true</value>
</property>
<property>
    <name>yarn.log.server.url</name>
    <value>http://bigdata01:19888/jobhistory/logs/</value>
</property>

重启Hadoop,并启动HistoryServer

stop-all.sh
start-all.sh
mapred --daemon start historyserver

使用命令查看任务执行的日志:这里的id不一定,可以通过 hadoop job -list 来看看是否有任务

yarn logs -applicationId application_158771356

停止yarn任务:

yarn application -kill application_15877135678

4.4 Shuffle原理

Shuffle原理

  1. 在Map阶段中,通过InputSplit过程产生一个Map任务,该任务在执行的时候会把 <k1,v1>转化为<k2,v2>,这些数据会先临时存储到一个内存缓冲区中,这个内存缓冲区的大小默认是100M(io.sort.mb属性),
  2. 当达到内存缓冲区大小的80%(io.sort.spill.percent)即80M时,会把内 存中的数据溢写到本地磁盘中(mapred.local.dir),直到Map把所有的数据都计算完
  3. 最后会把内存缓冲区中的数据一次性全部刷新到本地磁盘文件上
  4. 数据会被shuffle线程分别拷贝到不同的reduce节点,不同Map任务中的相同分区的数据会在同一个reduce节点进行合并,合并以后会执行reduce的功能,最终产生结果数据。

:shuffle其实是横跨Map端和Reduce端,主要是负责把Map端产生的数据通过网络拷贝到Reduce阶段进行统一聚合计算。

4.5 Shuffle原理

  • 序列化:将内存中的对象信息转成二进制的形式,方便存储到文件中
  • Hadoop实现了自己的序列化和反序列化机制,单独设计了一些writable的实现,例如LongwritableText

特点:

  1. 紧凑:高效使用存储空间
  2. 快速:读写数据的额外开销小
  3. 可扩展:可透明地读取老格式的数据
  4. 互操作:支持多语言的交互

4.6 InputSplit原理

  • 当文件剩余大小bytesRemaining与splitSize的比值大于1.1的时候,就继续切分,否则,剩下的直接作为一个InputSize(即当bytesRemaining/splitSize <= 1.1时,会停止划分,将剩下的作为一个InputSplit)
  • 把不支持切割的文件作为一个InputSplit,比如压缩文件

4.7 RecodReader原理

  • 每一个InputSplit都有一个RecordReader,作用是把InputSplit中的数据解析成Record,即<k1,v1>
  • 如果这个InputSplit不是第一个InputSplit,将会丢掉读取出来的第一行,因为总是通过next()方法多读取一行(会多读取下一个InputSplit的第一行)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/42954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【VUE】解决图片视频加载缓慢/首屏加载白屏的问题

1 问题描述 在 Vue3 项目中&#xff0c;有时候会出现图片视频加载缓慢、首屏加载白屏的问题 2 原因分析 通常是由以下原因导致的&#xff1a; 图片或视频格式不当&#xff1a;如果图片或视频格式选择不当&#xff0c;比如选择了无损压缩格式&#xff0c;可能会导致文件大小过大…

MySQL(一)基本架构、SQL语句操作、试图

MySQL系列文章 MySQL&#xff08;一&#xff09;基本架构、SQL语句操作、试图 MySQL&#xff08;二&#xff09;索引原理以及优化 MySQL&#xff08;三&#xff09;SQL优化、Buffer pool、Change buffer MySQL&#xff08;四&#xff09;事务原理及分析 MySQL&#xff08;五&a…

清洁机器人规划控制方案

清洁机器人规划控制方案 作者联系方式Forrest709335543qq.com 文章目录 清洁机器人规划控制方案方案简介方案设计模块链路坐标变换算法框架 功能设计定点自主导航固定路线清洁区域覆盖清洁贴边沿墙清洁自主返航回充 仿真测试仿真测试准备定点自主导航测试固定路线清洁测试区域…

SpringBoot项目的创建

等待maven下载完成 删除无用文件 此时我们就创建成功了

在外远程NAS群晖Drive - 群晖Drive挂载电脑磁盘同步备份【无需公网IP】

文章目录 前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用 2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用 3. 结语 前言 群晖作为专业的数据存储中心&…

Windows11的VS201x编译OpenCV+Contrib+CUDA

(1) CUDA下载&#xff0c;注意要和cudnn版本号相关。 我安装的是cuda11.0,注意VS2015不能编译CUDA11&#xff0c;所以用VS2015的话需要下载CUDA 10。因为更高的版本目前还没有cudnn。 (2) 下载和安装VS2015。 (3) 下载和解压CMake。 CMake地址&#xff1a; Releases Kitw…

Linux中docker的基本操作

文章目录 一、docker概述1.1 什么是docker1.2 Docker与虚拟机的特性区别1.3 容器在内核中支持2种重要技术1.4 docker的核心概念 二、安装docker三、Docker 镜像操作四、Docker 容器操作 一、docker概述 1.1 什么是docker 是一个开源的应用容器引擎&#xff0c;基于go语言开发…

js 在浏览器窗口关闭后还可以不中断网络请求

有个需求&#xff0c;我们需要在用户发送数据过程中&#xff0c;如果用户关闭了网页(包括整个浏览器关闭)&#xff0c;不要中断数据传递 目前XMLHttpRequest对象是不支持的 http服务器 为了测试效果我们用nodejs写了个http服务器代码 文件名为httpServer.js如下&#xff0c;…

基于深度学习淡水鱼体重智能识别模型研究

工作原理为&#xff1a;首先对大众淡水鱼图片进行数据清洗并做标签分类&#xff0c;之后基于残差网络ResNet50模型进行有监督的分类识别训练&#xff0c;获取识别模型。其次通过搭建回归模型设计出体重模型&#xff0c;对每一类淡水鱼分别拟合出对应的回归方程&#xff0c;将获…

Transformer 模型实用介绍:BERT

动动发财的小手&#xff0c;点个赞吧&#xff01; 在 NLP 中&#xff0c;Transformer 模型架构是一场革命&#xff0c;极大地增强了理解和生成文本信息的能力。 在本教程[1]中&#xff0c;我们将深入研究 BERT&#xff08;一种著名的基于 Transformer 的模型&#xff09;&#…

Jmeter 如何并发执行 Python 脚本

目录 1. 前言 2. Python 实现文件上传 3. Jmeter 并发执行 4. 最后 1. 前言 JMeter 是一个开源性能测试工具&#xff0c;它可以帮助我们更轻松地执行性能测试&#xff0c;并使测试结果更加可靠。Python 是一种广泛使用的编程语言&#xff0c;它可以用于开发各种软件和应用…

017-从零搭建微服务-系统服务(四)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

数学建模入门-如何从0开始,掌握数学建模的基本技能

一、前言 本文主要面向没有了解过数学建模的同学&#xff0c;帮助同学们如何快速地进行数学建模的入门并且尽快地在各类赛事中获奖&#xff0c;或者写出优秀的数学建模论文。 在本文中&#xff0c;我将从什么是数学建模、数学建模的应用领域、数学建模的基本步骤、数学建模的技…

DevOps系列文章之 Git知识大全

这里是结合实际业务场景输出。 使用的 Git版本&#xff1a;git version 2.24.0 命令 git log 查看日志&#xff0c;常规操作&#xff0c;必备 # 输出概要日志,这条命令等同于 # git log --prettyoneline --abbrev-commit git log --oneline# 指定最近几个提交可以带上 - 数…

SpringBoot整合SpringData JPA

SpringBoot整合SpringData JPA 下一节直通车 JPA的一对一、一对多、多对多查询 简介 JPA(Java Persistence API)意即Java持久化API&#xff0c;是Sun官方在JDK5.0后提出的Java持久化规范&#xff08;JSR 338&#xff0c;这些接口所在包为javax.persistence&#xff0c;详细…

【《Spring Boot微服务实战(第2版)》——一本关于如何在Spring Boot中构建微服务的全面指南】

使用Spring Boot框架构建基于Java的微服务架构&#xff0c;将应用程序从小型单体架构蜕变为由多个服务组成的事件驱动架构。这个最新版本围绕服务发现、负载均衡、路由、集中式日志、按环境配置和容器化等知识点&#xff0c;循序渐进地讲述微服务架构、测试驱动的开发和分布式系…

Mac 预览(Preview)丢失PDF标注恢复

感谢https://blog.csdn.net/yaoyao_chen/article/details/127462497的推荐&#xff01; 辛苦用预览在pdf上做的阅读标记&#xff0c;关闭后打开全丢失了&#xff0c;推荐尝试下网站导入文件进行恢复&#xff1a; 直接使用该网页应用PDF Annotation Recovery 或者访问该项目&a…

下载|GitLab 2023 年 DevSecOps 全球调研报告:安全左移深入人心、AI/ML 蔚然成风

目录 谁应该对应用程序安全负主要责任&#xff1f; 安全实践的最大挑战 AI 驱动研发&#xff0c;提升研发效率 各个角色使用的工具数量是多少&#xff1f; 一体化 DevSecOps 平台有哪些优势&#xff1f; 56%、74%、71%、65%、57% 这些数字和 DevSecOps 结合在一起&#xf…

MySQL一些知识

六、MySQL命令参数 七、远程登录 use mysql 八、SQL语句和常见的SQL操作 九、数据库和表的创建及插入 指定字段名称&#xff0c;按照表的字段名称顺序写&#xff1a; 指定字段名称&#xff1a; 字段名称可以不全部指定&#xff1a;

K8s Service网络详解(二)

Kube Proxy Kubernetes 在设计之初就充分考虑了针对容器的服务发现与负载均衡机制。 Service 资源&#xff0c;可以通过 kube-proxy 配合 cloud provider 来适应不同的应用场景。 Service相关的事情都由Node节点上的 kube-proxy处理。在Service创建时Kubernetes会分配IP给Ser…