Week2 学习笔记

Hadoop核心组件

  1. Hadoop HDFS(分布式文件存储系统):解决海量数据存储

  2. Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度

  3. Hadoop MapReduce(分布式计算框架):解决海量数据计算

安装hadoop环境

集群角色规划

服务器 运行角色
node1 namenode datanode resourcemanager nodemanager
node2 secondarynamenode datanode nodemanager
node3 datanode nodemanager

服务器基础环境搭建

下载vmware workstation pro

https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html

百度搜一个密钥用

密钥 ZF3R0-FHED2-M80TY-8QYGC-NPKYF

下载centos 7系统镜像文件

https://www.centos.org/download/

在vmware安装一台centos 7 虚拟机 并克隆两台



克隆两台

进入虚拟机 修改主机名

查看当前主机名指令: cat /etc/hostname

修改当前主机名指令:vim /etc/hostname

:wq保存后重新加载该配置

重新加载配置指令source /etc/hostname

修改host映射 方便后面操作 省的一直输ip地址

修改指令vim /etc/hosts

查看指令cat /etc/hosts

ps:查看你主机的ip地址指令:ifconfig

防火墙关闭(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

ntpdate ntp4.aliyun.com从阿里云同步

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

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

mkdir -p /export/data/ #数据存储路径

mkdir -p /export/software/ #安装包存放路径

jdk安装

jdk安装详细过程 https://www.cnblogs.com/stulzq/p/9286878.html

上传、解压Hadoop安装包(node1) 上传可以用rz命令或你的连接工具如finalshell自带的

cd /export/server 进入目录

tar zxvf hadoop-3.3.0-Centos7-64-with-snappy.tar.gz解压事先准备好的hadoop安装包

Hadoop安装包目录结构

第一类1个:hadoop-env.sh

第二类4个:

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

  1. core-site.xml 核心模块配置

  2. hdfs-site.xml hdfs文件系统模块配置

  3. mapred-site.xml MapReduce模块配置

  4. yarn-site.xml yarn模块配置

第三类1个:workers

所有的配置文件目录:/export/server/hadoop-3.3.0/etc/hadoop

编辑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

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- MR程序历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<!-- 历史服务器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

<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

分发同步安装包

在node1机器上将Hadoop安装包scp同步到其他机器

cd /export/server
scp -r hadoop-3.3.0 root@node2:$PWD
scp -r hadoop-3.3.0 root@node3:$PWD

在node1上配置Hadoop环境变量

vim /etc/profile
export HADOOP_HOME=/export/server/hadoop-3.3.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

将修改后的环境变量同步其他机器

scp /etc/profile root@node2:/etc/
scp /etc/profile root@node3:/etc/

重新加载环境变量 验证是否生效(3台机器)

source /etc/profile
hadoop #验证环境变量是否生效

NameNode format(格式化操作)

首次启动HDFS时,必须对其进行格式化操作。

format本质上是初始化工作,进行HDFS清理和准备工作

hdfs namenode -format

执行结果

PS:1. 首次启动之前需要format操作; 2. format只能进行一次 后续不再需要; 3. 如果多次format除了造成数据丢失外,还会导致 hdfs集群主从角色之间互不识别。通过删除所有机 器hadoop.tmp.dir目录重新format解决

安装环境完成 进入使用阶段

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

启动完毕之后可以使用jps命令查看进程是否启动成功

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

HDFS集群UI页面浏览

地址:http://namenode_host:9870

namenode用你指定的node替代

如http://node1:9870/dfshealth.html#tab-overview

HDFS文件系统UI页面浏览

YARN集群 UI体验

地址:http://resourcemanager_host:8088

其中resourcemanager_host是resourcemanager运行所在机器的主机名或者ip

如我访问的就是http://node1:8088/cluster

HDFS 初体验

shell命令操作

hadoop fs -mkdir /itcast
hadoop fs -put zookeeper.out /itcast
hadoop fs -ls /

Web UI页面操作

执行Hadoop官方自带的MapReduce案例,评估圆周率π的值。

cd /export/server/hadoop-3.3.0/share/hadoop/mapreduce/
hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 2 4

HDFS shell命令行常用操作

创建文件夹

hadoop fs -mkdir [-p] ...

path 为待创建的目录

-p选项的行为与Unix mkdir -p非常相似,它会沿着路径创建父目录

查看指定目录下内容

hadoop fs -ls [-h] [-R] [ ...]

path 指定目录路径

-h 人性化显示文件size

-R 递归查看指定目录及其子目录

上传文件到HDFS指定目录下

hadoop fs -put [-f] [-p] ...

-f 覆盖目标文件(已存在下)

-p 保留访问和修改时间,所有权和权限

localsrc 本地文件系统(客户端所在机器)

dst 目标文件系统(HDFS)

查看HDFS文件内容

hadoop fs -cat ...

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

下载HDFS文件

hadoop fs -get [-f] [-p] ...

下载文件到本地文件系统指定目录

-f 覆盖目标文件(已存在下)

-p 保留访问和修改时间,所有权和权限。

拷贝HDFS文件

hadoop fs -cp [-f] ...

-f 覆盖目标文件(已存在下)

追加数据到HDFS文件中

hadoop fs -appendToFile ...

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

HDFS数据移动操作

hadoop fs -mv ...

移动文件到指定文件夹下 可以使用该命令移动数据,重命名文件的名称

各个角色

官方架构图

主角色:namenode

  • NameNode是Hadoop分布式文件系统的核心,架构中的主角色。

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

  • 基于此,NameNode成为了访问HDFS的唯一入口。

  • NameNode内部通过内存和磁盘文件两种方式管理元数据。

  • 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log(Journal)编辑日志。

namenode职责

  • NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际数据。
  • NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
  • NameNode不持久化存储每个文件中各个块所在的datanode的位置信息,这些信息会在系统启动时从DataNode 重建。
  • NameNode是Hadoop集群中的单点故障。
  • NameNode所在机器通常会配置有大量内存(RAM)。

从角色:datanode

  • DataNode是Hadoop HDFS中的从角色,负责具体的数据块存储。

  • DataNode的数量决定了HDFS集群的整体数据存储能力。

  • 通过和NameNode配合维护着数据块。

datanode职责

  • DataNode负责最终数据块block的存储。是集群的从角色,也称为Slave。
  • DataNode启动时,会将自己注册到NameNode并汇报自己负责持有的块列表。
  • 当某个DataNode关闭时,不会影响数据的可用性。 NameNode将安排由其他DataNode管理的块进行副本复制 。
  • DataNode所在机器通常配置有大量的硬盘空间,因为实际数据存储在DataNode中。

主角色辅助角色: secondarynamenode

  • Secondary NameNode充当NameNode的辅助节点,但不能替代NameNode。

  • 主要是帮助主角色进行元数据文件的合并动作。可以通俗的理解为主角色的“秘书”

写数据完整流程图

核心概念--Pipeline管道

  • Pipeline,中文翻译为管道。这是HDFS在上传文件写数据过程中采用的一种数据传输方式。
  • 客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将 其复制到第三个数据节点。

核心概念--ACK应答响应

  • ACK (Acknowledge character)即是确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符。表示 发来的数据已确认接收无误。
  • 在HDFS pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据传输安全

读数据完整流程图

  1. HDFS客户端创建对象实例DistributedFileSystem, 调用该对象的open()方法来打开希望读取的文件。

  2. DistributedFileSystem使用RPC调用namenode来确定文件中前几个块的块位置(分批次读取)信息。 对于每个块,namenode返回具有该块所有副本的datanode位置地址列表,并且该地址列表是排序好的,与客户端的 网络拓扑距离近的排序靠前。

  3. DistributedFileSystem将FSDataInputStream输入流返回到客户端以供其读取数据。

  4. 客户端在FSDataInputStream输入流上调用read()方法。然后,已存储DataNode地址的InputStream连接到文件 中第一个块的最近的DataNode。数据从DataNode流回客户端,结果客户端可以在流上重复调用read()

  5. 当该块结束时,FSDataInputStream将关闭与DataNode的连接,然后寻找下一个block块的最佳datanode位置。 这些操作对用户来说是透明的。所以用户感觉起来它一直在读取一个连续的流。 客户端从流中读取数据时,也会根据需要询问NameNode来检索下一批数据块的DataNode位置信息。

  6. 一旦客户端完成读取,就对FSDataInputStream调用close()方法

MapReduce学习

一个完整的MapReduce程序在分布式运行时有三类

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

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

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

示例 评估圆周率π(PI)的值

运行MapReduce程序评估一下圆周率的值,执行中可以去YARN页面上观察程序的执行的情况。

  • 第一个参数:pi表示MapReduce程序执行圆周率计算任务;

  • 第二个参数:用于指定map阶段运行的任务task次数,并发度,这里是10;

  • 第三个参数:用于指定每个map任务取样的个数,这里是50。

[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar pi 10 50

示例位置:/export/server/hadoop-3.3.0/share/hadoop/mapreduce





示例 wordcount单词词频统计

  • 上传文本文件1.txt到HDFS文件系统的/input目录下,如果没有这个目录,使用shell创建

  • hadoop fs -mkdir /input 创建hdfs输入目录

  • hadoop fs -put 1.txt /input 提交文件到hdfs文件系统

  • 准备好之后,执行官方MapReduce实例,对上述文件进行单词次数统计

  • 第一个参数:wordcount表示执行单词统计任务;

  • 第二个参数:指定输入文件的路径;

  • 第三个参数:指定输出结果的路径(该路径不能已存在)

[root@node1 mapreduce]# pwd
/export/server/hadoop-3.3.0/share/hadoop/mapreduce
[root@node1 mapreduce]# hadoop jar hadoop-mapreduce-examples-3.3.0.jar wordcount
/input /output

上传到文件系统

执行结果

第一个success没用 只是一个成功失败的标识 第二个part才是真正的结果

执行原理

map阶段执行流程

  • 第一阶段:把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。 默认Split size = Block size(128M),每一个切片由一个MapTask处理。(getSplits)

  • 第二阶段:对切片中的数据按照一定的规则读取解析返回对。 默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容。(TextInputFormat)

  • 第三阶段:调用Mapper类中的map方法处理数据。 每读取解析出来的一个 ,调用一次map方法。

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

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

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

reduce阶段执行流程

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

  • 第二阶段:把拉取来数据,全部进行合并merge,即把分散的数据合并成一个大的数据。再对合并后的数据排序 。

  • 第三阶段是对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对 写入到HDFS文件中。

Hadoop入门学习笔记(一)的更多相关文章

  1. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  2. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  3. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  4. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  5. Hadoop入门学习笔记总结系列文章导航

    一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...

  6. Hadoop入门学习笔记之一

    http://hadoop.apache.org/docs/r1.2.1/api/index.html 适当的利用 null 在map中可以实现对文件的简单处理,如排序,和分集合输出等. 需要关心的内 ...

  7. Hadoop入门学习笔记(二)

    Yarn学习 YARN简介 YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度 YARN功能说明 资源管理系统:集群的硬件资源,和程序运行相关,比如内存.CPU等. 调度平 ...

  8. Hadoop入门学习笔记-第一天 (HDFS:分布式存储系统简单集群)

    准备工作: 1.安装VMware Workstation Pro 2.新建三个虚拟机,安装centOS7.0 版本不限 配置工作: 1.准备三台服务器(nameNode10.dataNode20.da ...

  9. Hadoop入门学习笔记-第二天 (HDFS:NodeName高可用集群配置)

    说明:hdfs:nn单点故障,压力过大,内存受限,扩展受阻.hdfs ha :主备切换方式解决单点故障hdfs Federation联邦:解决鸭梨过大.支持水平扩展,每个nn分管一部分目录,所有nn共 ...

随机推荐

  1. 使用Dropbox搭建静态网站详细教程

    DropBox是一款非常好用的免费网络文件同步工具,是Dropbox公司运行的在线存储服务,通过云计算实现因特网上的文件同步,用户可以存储并共享文件和文件夹.今天小z和大家分享一下如何使用dropbo ...

  2. Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 报错及解决办法

    亲测Unknown host mirrors.opencas.cn You may need to adjust the proxy settings in Gradle 解决办法 - 程序员大本营 ...

  3. nodeJs入门的第一节课

    nodejs是什么? nodejs的架构模式以及优缺点 nodejs异步IO nodejs事件驱动 nodejs单线程 nodejs应用场景 一.nodejs是什么? 1.1nodejs是一个开源的. ...

  4. spring-注入集合对象

    1.创建Stu类 package com.spring.collections; import java.util.Arrays; import java.util.List; import java ...

  5. B. Build the Permutation

    题目分析:我们先简单的分析一下这道题是在干什么啊,给我们三个整数n,a,b,问我们能否构造这样的排列使得序列中有a个极大值,b个极小值,能的话就给出任意一种可能的情况,不能的话就输出-1: 其实一开始 ...

  6. Linux内核--链表结构(二)

    Linux内核链表定义了一系列用于链表遍历的宏,本章详细描述. 一.container_of和offsetof 首先介绍两个很好用的宏container_of和offsetof.offsetof宏用于 ...

  7. [个人配置] VSCode Better Comments 扩展配置、高亮注释插件

    在VSCode IDE中,我的代码注释一般都有高亮颜色,那要怎么安装这个插件呢?

  8. 一行代码,让 VS Code 内置 PDF 阅读器变成深色模式

    使用 CSS/JS 简单实现 PDF 深色模式.

  9. Spring 源码(4)在Spring配置文件中自定义标签如何实现?

    Spring 配置文件自定义标签的前置条件 在上一篇文章https://www.cnblogs.com/redwinter/p/16165274.html Spring BeanFactory的创建过 ...

  10. linux常用理论(一)

    第一周 1.按系列罗列Linux的发行版,并描述不同发行版之间的联系与区别. Debian Redhat issue 2.安装Centos7.9和ubuntu操作系统,创建一个自己名字的用户名,并可以 ...