Hadoop

目录

初识

分布式与集群

HDFS YARN MapReduce

HDFS集群  YARN集群

分布式存储系统

安装部署

下载 编译

集群角色规划

服务器基础环境配置

安装包结构

修改配置文件同步安装包与环境变量

format初始化操作

 集群启停命令

手动逐个进程启停

shell脚本一键启停

进程状态日志查看(网页)

体验

HDFS

初识

shell命令行

文件系统协议

shell命令行常用操作

HDFS工作流程机制

HDFS集群角色与职责

HDFS写数据流程(上传文件)pipeline

 MapReduce

初识

数据类型

特点

实例进程

阶段组成

Hadoop MapReduce官方示例

示例文件

评估圆周率的值

wordcount单词词频统计

Map阶段执行流程

 reduce阶段执行流程

shuffle机制

YARN

初识

简介

架构图 角色

程序提交YARN交换流程

YARN资源调度器Scheduler

三种调度器

 FIFO Scheduler(先进先出调度器)

 Capacity Schedulere容量调度

 Fair Scheduler(公平调度器)


初识

分布式与集群

分布式:多台机器,每台机器上部署不同组件

集群:多台,每台机器部署相同组件

hadoop集群分两个:HDFS集群 YARN集群

HDFS YARN MapReduce

HDFS:分布式文件存储系统

YARN:集群资源管理和任务带哦都框架,解决资源任务调度

MapReduce:分布式计算框架:解决海量数据计算

HDFS集群  YARN集群

HDFS主:NameNode  从:DateNode 主辅:SecondaryNameNode

YARN主:ResourceManager 从:NodeManager

 (每个框都是进程java)

分布式存储系统

文件系统:数据  元数据(文件大小、最后修改时间、用户等信息)

属性:分布式存储(横向延申) 元数据记录(记录了每个文件在那个机器上)分块存储(针对性高) 副本机制

安装部署

下载 编译

下载hadoop-3.3.0-......

(编译好的) 

集群角色规划

(上图)

服务器基础环境配置

主机名

cat /etc/hostname

hosts映射

vim /etc/hosts

关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

ssh免密登陆

(100上)ssh-keyen(生成公钥、私钥)

ssh-copy-id 主机1、2、3 (复制到其他机器)

 时间同步(所有机器执行)

yum -yinstall ntpdate

ntpdate ntp4.aliyun.com 

创建统一工作目录(所有机器执行)

mkdir -p /export/server/(软件安装路径)

mkdir -p /export/date/(数据存储路径)

mkdir -p /export/software(安装包存储路径)

安装JDK(所有机器)

安装到/export/server/下(文件安装包在D盘easy)

tar -zxvf jdk-8u241-linux(解压)

可rm原安装包

配置环境变量

vim /etc/profile

最后加上

export JAVA_HOME=/export/server/jdk1.8.0_241
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

 source /etc/profile(重新加载)

java -version(验证是否安装成功)

scp -r /export/server/jdk1.8.0_241/ 用户名@ip:/export/server/(拷贝,剩下机器都操作)

scp /etc/profile 用户@ip:/etc/(拷贝环境变量)

source /etc/profile(所有机器)

java -version(验证是否安装成功 所有)

安装包结构

hadoop上传解压

cd /export/server/

上传文件

tar -zxvf hadoop......(解压)

rm安装包    cd进去

安装包结构

bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管
理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop

etc:Hadoop配置文件所在的目录

sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/
关闭脚本

share:Hadoop各个模块编译后的jar包所在的目录,官方自带示例

修改配置文件同步安装包与环境变量

cd  /export/server/hadoop-3.3.0/etc/hadoop(所有配置文件都在)

hadoop-env.sh

 #文件最后添加
 #指定java路径
    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(核心配置文件)

两个(config.....中间)

<!-- 设置默认使用的文件系统 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(hdfs文件系统模块配置)
两个(config.....中间)

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

 mapred-site.xml(MapReduce模块配置)

<!-- 设置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模块配置)

<!-- 设置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>

(同上,删除两个中间的注释)

vim workers

node1.itcast.cn
node2.itcast.cn
node3.itcast.cn

替换原内容

分发同步hadoop安装包
cd /export/server
 scp -r hadoop-3.3.0 root@ip:$PWD

 scp -r hadoop-3.3.0 root@ip:$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 /etc/profile 主机名:/etc/

source /etc/profile(所有机器)

hadoop(所有,验证)

format初始化操作

格式化 (初始化只能一此不能多次

hdfs namenode -format

验证(出现这句话成功)

成功

 集群启停命令

手动逐个进程启停

可以精准控制每个进程启停

HDFS

hadoop2.0版本

hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode

hadoop3.0版本

hdfs --daemon start|stop name|datanode|secondarynamenode

YARN集群

hadoop2.0版本

yarn-daemon.sh start|stop resourcemanager|nodemanager

hadoop3.0版本

yarn --daemon start|stop resourcemanager|nodemanager

shell脚本一键启停

(前提:配置好机器间的 SSH免密 和workers文件)

HDFS集群

start-dfs.sh

stop-dfs.sh

YARN集群

start-yarn.sh

stop-yarn.sh

Hadoop集群(全的)

start-all.sh

stop-all.sh

(启动一下  用jps命令验证是否成功(验证所有))

进程状态日志查看(网页)

启动完毕后可以用

jps命令查看

Hadoop启动日志路径:/export/server/hadoop-3.3.0/logs/

官方提供的web页面

HDFS

地址:http://namenode_host:9870 (最常用上面绿框Utilities  Browse)(主机名:9870)

输入的是node1:9870(第一台机器)

YARN

resourcemanager_host:8088(主机名:8088)

node1:8088

体验

(HDFS)

hadoop fs -ls /

hadoop fs -mkdir /itcast(到9870上查看Browse可观察目录详细信息)

hadoop fs -put 本地文件 路径(上传文件到集群)

也可在web页面上进行操作

 创建新目录

上传windows文件 

 (MapReduce)

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/

hadoop jar hadoop-mapreduce-examples-3.3.0 jar pi 2 2(用官方示例计算圆周率)

8088刷新

家目录下创建文件随便输入内容(统计单词出现次数)

hadoop fs -mkdir -p /wordcount/input

hadoop fs -put 文件 /wordcount/input

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce

hadoop jar hadoop-mapreduce-examples-3.3.0 jar wordcount /wordcount/input /wordcount/output

HDFS

初识

HDFS(hadoop distributed file system)hadoop分布式文件系统

解决海量数据存储

 特性:主从架构(一个NameNode主节点 多个DataNode从节点(一个集群))

分块存储 (块大小默认128mb 如果文件小于128不分块 本身一块)(块大小 hdfs-default.xml 文件中调dfs.blocksize参数可调整)

副本机制(所有块都有副本,由参数dfs.replication控制,默认3(额外复制两份))

元数据记录(Namenode管理的元数据分为两类 1文件自身属性(名字、权限~)2文件块位置映射(那个块位于哪个节点上))

抽象统一的目录数结构(namespace)

shell命令行

文件系统协议

操作什么文件系统取决于URL的前缀协议

hadoop fs -ls file:///(操作本地文件系统)(linux虚拟机上的)

hadoop fs -ls hdfs://node1:8020/(操作HDFS分布式文件系统)(与9870对应)

hadoop fs -ls/(直接根目录,没有指定协议,将直接加载读取fs.defaultFS值)(默认为HDFS文件系统 可/hadoop-3.3.0/etc/hadoop/core-site.xml中修改)

hadoop文件系统shell命令行客户端

hadoop fs [ ]

hdfs dfs []只能hdfs系统

shell命令行常用操作

大多数与linux相似 例子

hadoop fs -mkdir [ ] path

                 -ls [ ] path(参数-h :人性化查看文件size)

                  -cat  

                   -tail 

                   -cp [-f(覆盖目标文件)] /本地 /HDFS

                   -mv <src>...<dst>  

put上传文件

-put [-f] <localsrc>(本地(你操作的机器)文件系统)...< dst>(目标文件系统) 

-f覆盖目标文件

-p保留访问和修改时间

例:hadoop fs -put file:///etc/profile hdfs://node1:8020/itcase

简写hadoop fs -put /etc/profile /itcase

-get下载文件

hadoop fs -get [ ] <src>(HDfs)...<localdst>(本地)

-f覆盖目标文件

-p保留访问和修改时间 

同put

追加数据到HDFS

hadoop fs -appendToFile <localsrc>...<dst>

本地文件追加到给定dst文件(文件不存在创建)

例子:hadoop fs -appendToFile 1.txt 2.txt /3.txt

HDFS工作流程机制

HDFS集群角色与职责

主角色:namenode 

维护管理文件系统元数据(空间目录树结构、文件和块的位置信息、访问权限)

大量内存

文件系统入口

从角色:datanode

负责具体的数据块存储

大量内存

主角色辅助角色:secondraynamenode

是namenode的辅助节点,帮助主角色进行元数据文件的合并

HDFS写数据流程(上传文件)pipeline

pipeline管道上传文件时的一种数据传输方式、

三个副本

ACK 应答响应(确保数据传输安全)

 

默认三副本存储策略

第一个副本:优先客户端本地,否则随机

二:不同于第一块的不同机架

三:二相同机架不同机器

 

 MapReduce

初识

分布式计算框架

分而治之

Map:拆分成可以计算的小任务(任务之间不能有依赖关系)

Reduce:对map结果进行全局汇总

数据类型

MapReduce处理的数据类型是键值对

map: (k1;v1) --->(k2;v2)

reduce:(k2;[v2])-->(k3;v3)

特点

统一架构,隐藏底层细节

易于编程 ,良好的拓展性

实时计算性差 不能进行流式计算

实例进程

MRAppMaster:负责整个MR程序的过程调度及状态协调

MapTask:负责map阶段的整个数据处理流程

ReduceTask:负责reduce阶段的整个数据处理流程

阶段组成

一个MapReduce编程模型只能保护一个Map或Reduce

Map完必须是Reducer

Hadoop MapReduce官方示例

一个完整的MR程序:用户自己编写的代码+Hadoop自己实现的代码

示例文件

示例程序路径:/export/server/hadoop-3.3.0/share/hadoop/mapreduce/

实例程序:hadoop-mapreduce-examples-3.3.0.jar

MapReduce程序提交命令:[hadoop jar|yarn jar]hadoop-mapreduce-examples-3.3.0.jar(文件路径) arg(参数)

提交到YARN上运行

评估圆周率的值

jps看集群是否启动

hadoop jar hadoop-mapreduce-examples-3.3.0.jar(注意路径)pi  10 50

二三是撒点数(撒点法计算圆周率)

第一个参数:pi:计算圆周率

二:指定map阶段运行的任务task次数,并发度

三:每个map任务取样的个数

wordcount单词词频统计

实现思路

9870上传文件到input(自己创目录)

hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount  /input /output

输出 输入路径

输出:一个成功表示文件

Map阶段执行流程

(以wordcount为例)

第一阶段:输入文件按标准逐个行逻辑切片 切片大小默认128m 每个切片由一个MapTask处理

二:按行读数据 返回键值对 k是每一行起始偏移量 v值是文件内容

三:处理数据 每读一个键值对 调用一次map方法

第四阶段:按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reducetask      分区的数量就是reducetask运行的数量

第五阶段:Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序 sort     默认根据key字典序排序

 第六阶段:对所有溢出文件进行最终的merge合并,成为一个文件

 reduce阶段执行流程

第一阶段:ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据

二:数据进行合并,对合并后的数据排序

三:对排序后的键值对调用reduce方法,键相等的调用一次reduce方法 最后把这些键值对写入HDFS文件中。

shuffle机制

46

YARN

初识

简介

YARN(yet another resource negotiator)另一种资源协调者 hadoop资源管理器

一个统用的资源管理器和调度平台

YARN可以理解为相当于一个分布式的操作系统平台,MapReduce等计算程序则相当于运行于操作
系统之上的应用程序,YARN为这些程序提供运算所需的资源。

架构图 角色

Container容器(资源的抽想)(容器之间隔离 保证一台机器多个程序运行)

YARN3大组件

ResourceManager NodeManager  集群物理层面

ApplicatioMaster(App Mstr) App层面

ResourceManager

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

NodeManager

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

ApplicationMaster

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

程序提交YARN交换流程

 当用户向 YARN 中提交一个应用程序后, YARN将分两个阶段运行该应用程序 。
 第一个阶段是客户端申请资源启动运行本次程序的ApplicationMaster
 第二个阶段是由ApplicationMaster根据本次程序内部具体情况,为它申请资源,并监控它的整个运行过程,直到运行完成。

只有RM能申请资源

49

YARN资源调度器Scheduler

在YARN中,负责给应用分配资源的就是Scheduler,它是ResourceManager的核心组件之一

三种调度器

FIFO Scheduler(先进先出调度器)

Capacity Scheduler(容量调度器)

Fair Scheduler(公平调度器)

Apache版本YARN默认使用Capacity Scheduler(可以在yarn-site.xml中的yarn.resourcemanager.scheduler.class进行修改 配置)

 FIFO Scheduler(先进先出调度器)

 FIFO Scheduler是一个先进先出的思想,先提交的应用先运行

FIFO Scheduler拥有一个控制全局的队列queue,默认queue名称为default,该调度器会获取当前集群上所有的资源信息作用于这个全局的queue

 Capacity Schedulere容量调度

允许多个组织共享整个集群资源 每个组织可以获得集群的一部分计算能力。

通过为每个组织分配专门的队列,然后再为每个队列分配一定的集群资源

 Fair Scheduler(公平调度器)

只有A 全给A

来了B 给B一半  B新增作业  B中分一半

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值