Hadoop入门学习笔记(一)
Week2 学习笔记
Hadoop核心组件
Hadoop HDFS(分布式文件存储系统):解决海量数据存储
Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度
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中的默认配置。
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配置文件
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校验,确保数据传输安全
读数据完整流程图
HDFS客户端创建对象实例DistributedFileSystem, 调用该对象的open()方法来打开希望读取的文件。
DistributedFileSystem使用RPC调用namenode来确定文件中前几个块的块位置(分批次读取)信息。 对于每个块,namenode返回具有该块所有副本的datanode位置地址列表,并且该地址列表是排序好的,与客户端的 网络拓扑距离近的排序靠前。
DistributedFileSystem将FSDataInputStream输入流返回到客户端以供其读取数据。
客户端在FSDataInputStream输入流上调用read()方法。然后,已存储DataNode地址的InputStream连接到文件 中第一个块的最近的DataNode。数据从DataNode流回客户端,结果客户端可以在流上重复调用read()
当该块结束时,FSDataInputStream将关闭与DataNode的连接,然后寻找下一个block块的最佳datanode位置。 这些操作对用户来说是透明的。所以用户感觉起来它一直在读取一个连续的流。 客户端从流中读取数据时,也会根据需要询问NameNode来检索下一批数据块的DataNode位置信息。
一旦客户端完成读取,就对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入门学习笔记(一)的更多相关文章
- Hadoop入门学习笔记---part4
紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...
- Hadoop入门学习笔记---part3
2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...
- Hadoop入门学习笔记---part2
在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...
- Hadoop入门学习笔记---part1
随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...
- Hadoop入门学习笔记总结系列文章导航
一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...
- Hadoop入门学习笔记之一
http://hadoop.apache.org/docs/r1.2.1/api/index.html 适当的利用 null 在map中可以实现对文件的简单处理,如排序,和分集合输出等. 需要关心的内 ...
- Hadoop入门学习笔记(二)
Yarn学习 YARN简介 YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度 YARN功能说明 资源管理系统:集群的硬件资源,和程序运行相关,比如内存.CPU等. 调度平 ...
- Hadoop入门学习笔记-第一天 (HDFS:分布式存储系统简单集群)
准备工作: 1.安装VMware Workstation Pro 2.新建三个虚拟机,安装centOS7.0 版本不限 配置工作: 1.准备三台服务器(nameNode10.dataNode20.da ...
- Hadoop入门学习笔记-第二天 (HDFS:NodeName高可用集群配置)
说明:hdfs:nn单点故障,压力过大,内存受限,扩展受阻.hdfs ha :主备切换方式解决单点故障hdfs Federation联邦:解决鸭梨过大.支持水平扩展,每个nn分管一部分目录,所有nn共 ...
随机推荐
- java中请给出例子程序:找出两个数的最大公约数和最小公倍数
9.2 找出12和8的最大公约数和最小公倍数. public class Test { public static void main(String[] args) { ...
- Linux安装Redis步骤和make遇到的坑
Linux安装Redis服务步骤 1.获取redis资源 cd /usr/local wget https://mirrors.huaweicloud.com/redis/redis-6 ...
- JAVASE If 单选择、双选择及镶嵌笔记
//单选package com.huang.boke.flowPath;import java.util.Scanner;public class test02 { public static voi ...
- matplotlib---Annotation标注
import numpy as np import matplotlib.pyplot as plt x = np.linspace(-3, 3, 50) y = 2 * x + 1 plt.figu ...
- Spring Boot-@Value获取值和@ConfigurationProperties获取值的比较
@Value和@ConfigurationProperties都是用于属性的注入(相当于spring中<bean id=" " class=" "> ...
- HCIE笔记-第十节-静态路由
协议 :标识 前方的目的网络 是通过什么协议形成的 优先级:代表形成路由的协议的优先级数值 [厂商规定] 开销值:代表该路由协议形成此路由时的开销 -- 不同的协议计算开销值的方式有区别(越小越优) ...
- 『现学现忘』Git基础 — 8、Git创建本地版本库
目录 1.Git版本库介绍 2.创建本地版本库 场景一:创建一个空的本地版本库. 场景二:项目中已存在文件时,创建该项目的本地版本库. 场景三:在GitHub网站上创建仓库,克隆到本地. 1.Git版 ...
- Jquery_HTML-对HTML内容删除添加、操作CSS改变样式、遍历定位元素
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- CV技术指南免费版知识星球
最近公众号的交流群满了,我们决定搞一个免费的知识星球,让大家在里面交流.以往都是我们写原创,大家阅读,读者之间没什么交流.与此同时,在CV技术指南交流群里,大部分问题都得到了很好地解决,但从来没有 ...
- .Net IDE智能提示汉化(.Net6、AspNetCore)
.Net IDE智能提示汉化(.Net6.AspNetCore) 先上现成的.net6汉化文件,可以手动下载后参照 如何为 .NET 安装本地化的 IntelliSense 文件 进行安装.或者使用后 ...