1、概论
-
什么是大数据?
指所涉及的数据集规模已超过了传统数据软件获取、存储、管理和分析的能力。
-
大数据的特点5V:大量、高速、多样、低价值密度、真实性
volume、velocity、variety、value、veracity
-
Google三驾马车GFS、MapReduce、BigTable
(HDFS) (HBase) -
Hadoop生态系统:HDSF、MapReduce、HBase、Zookeeper、OoZie、Pig、Hive(七个)
2、HDFS
-
hadoop三大基本组件HDSF、MapReduce、YARN
-
HDFS的局限性:
- 查询性能低
- 基于一次写入多次读取设计(不支持并发写入)
- 不支持文件修改
- 不支持缓存
- 不适合存储小文件
-
HDFS的主从架构(守护进程):NameNode、DataNode、SecondaryNameNode
-
NameNode:负责存储和管理文件系统元数据信息,包括namespace目录结构、文件块位置信息、访问权限等
访问hdfs的唯一入口
-
DataNode:存储文件具体的数据块
决定hdfs集群的整体数据存储能力,通过和namenode配合维护数据块
-
SecondaryNamenode:主节点的辅助,帮助主节点进行数据的合并
辅助namenode从namenode下载fsimage文件和edits log文件进行合并
-
-
元数据的管理机制:内存元数据、fsimage、edits文件,以及checkpoint过程(主要解决什么问题?参与该过程的节点有什么?)
-
内存元数据(meta data):namenode把所有元数据存储在内存中,成为内存元数据。内存中的元数据是最完整的,包括文件自身属性信息、文件块信息映射信息。用于元数据查询。
断点数据丢失,数据不会持久化。namenode辅佐了元数据文件来保证元数据的安全完整
-
fsimage内存镜像文件:内存元数据的一个持久化的检查点,仅包含hadoop文件系统中文件自身属性相关的元数据信息,不包含文件块位置的信息,位置信息只存储在内存中。由datanode启动加入集群时向namenode进行数据块的汇报得到的,并且后续简短指定时间进行数据块报告。持久化的动作是一种数据从内存到磁盘的IO过程,会对namenode正常服务造成一定的影响,不能频繁地进行持久化。持久化存储元数据
-
edits log编辑文件:数据操作日志,记录更改记录,可于运算出元数据,为了避免两次持久化之间数据丢失的问题设计的。文件中记录的是hdfs所有更改操作的日志,文件系统客户端执行的更改操作首先会被记录到edits文件中。
-
checkpoint机制:核心是fsimage与edits log合并以生成新的fsimage的过程,fsimage就会不断更新、edits log文件不会太大
流程:
- sn向nn发起询问是否需要checkpoint
- nn读取fstime中上次checkpoint时间,结合edits文件大小等因素,决定开始checkpoint
- nn新建一个edits文件,让新操作写入到edits.new中(避免在checkpoint过程中edits文件改变)
- SNN向NN请求(http get)获取fsimage和edits文件
- SNN将edits与fsimage合并,生成新的fsimage.checkpoint文件
- SNN将fsimage.checkpoint发送给NN
- NN收到fsimage.checkpoint后将其与旧的fsimage替换,更新fstime文件记录本次checkpoint操作
checkpoint触发条件由core-site.xml配置
dfs.namenode.checkpoint.period=3600 //两次连续的checkpoint之间的时间间隔。默认1小时 dfs.namenode.checkpoint.txns=1000000 //最大没有执行checkpoint事务的数量,满足将强制执行紧急checkpoint,即使尚未达到检查点周期。默认100万事务数量。
-
管理过程:
- 系统启动时,读取fsimage和edits至内存,形成内存元数据meta data
- client向namenode发起数据增删查请求
- namenode接收到请求后,在内存元数据中执行增删查操作,并向client返回操作结果
- 如果是增删操作,则同时记录数据操作日志edits
- 使用snn,在适当时机将操作日志合并到fsimage中(checkpoint过程)
-
-
HA模式(高可用模式)
- 允许配置两个相同的nn,一个为active mode处于活动模式,另一个为standby mode处于待机模式
- 两个nn数据保持一致,一旦活动节点失效,则由待机节点切换为活动节点,保证hadoop的正常运行
- 两个nn之间的数据共享可使用nfs或Quorum Journal Node实现
HA模式中,checkpoint通过standby namenode实现,不需要再配置snn
jourmalnode是轻量化的节点,用于两个nn之间的通信,需要配置三个以上的节点
-
心跳机制:用于dn与nn之间的通信
- register:datanode启动时,将自身信息发送给namenode
- block report:将block的信息汇报给namenode,使得namenode可以维护block和datanode之间的映射关系
- 周期性send heartbeat:
- 向namenode报告剩余存储空间等信息
- 执行namenode返回过来的指令
- 如果namenode没有收到datanode周期性的heartbeat则认为该dn已失效,nn会将失效节点中的block重新备份到其他dn上
-
什么是block:所有的文件将被拆分为若干block,以存放再不同的datanode中(每个block将有三个备份保存到不同datanode)
-
为什么HDFS不适合存储小文件?
每个文件最少一个block,每个block的元数据都会在namenode占用内存如果存在大量的小文件,它们会吃掉namenode节点的大量内存。
-
处理小文件不适合存储的问题,可以把多个文件归档成为一个文件,归档后还可以透明地访问每一个文件。
-
创建archive:(archive归档是通过mapreduce程序完成的,需要启动yarn集群)
hadoop archive -archiveName test.har(archive名称) -p /smallfile /outputdir
路径写法(-p后面的内容):
-p /foo/bar a/b/c e/f/g,这里的/foo/bar是a/b/c与e/f/g的父路径,所以完整路径为/foo/bar/a/b/c与/foo/bar/e/f/g
-
-
HDFS命令:
hdfs dfs -ls / 查看当前目录信息 hdfs dfs -mkdir /hello 创建文件夹 hdfs dfs -mkdir -p /hello/world 创建多级文件夹 hdfs dfs -get /hdfs路径 /本地路径 下载文件到本地 hdfs dfs -copyToLocal /hdfs路径 /本地路径 hdfs dfs -put /本地路径 /hdfs路径 上传文件 hdfs dfs -copyFromLocal /本地路径 /hdfs路径 hdfs dfs -cat /文件 查看hdfs中的文件
-
HDFS Java API:hdfs命令的抽象,支持远程访问hdfs,应用程序能够以和读写本地数据系统相同的方式从hdfs读取数据,或者将数据写入到hdfs
-
50070Web端口:hdfs的web服务地址,显示hdfs服务状态和日志
3、Hadoop安装
-
Hadoop的安装模式及特点(单机、伪分布、多节点集群)
- 单机模式:hadoop运行在一个单独的JVM中,便于开发调试
- 伪分布式集群模式:各节点在不同的java进程中,用于模拟集群环境
- 多节点集群安装模式:各节点安装在不同的系统中,是可用于生产的集群环境
-
Hadoop由什么语言开发?Java,所以必须先安装JDK
-
SSH免密的原理是什么?RSA非对称加密
通过加密算法将需要传输的数据进行处理后,进行tcp传输,在两端之间通过密文交互达到安全目的,本质是数据加密
-
怎么启动Hadoop:cd /home/hadoop/hadoop-3.1.2/
sbin/start-all.sh
-
重要的配置文件:
- core-site.xml:hadoop系统的通用关键属性
- workers:定义所有dn地址
- hdfs-site.xml:hdfs属性配置
- yarn-site.xml:yarn基本属性
- mapred-site.xml:mapreduce计算框架的属性配置
- /etc/profile:涉及系统的环境,与环境变量相关
- /etc/hosts:负责ip地址与域名快速解析的文件,hosts映射文件
-
简单的网络异常排查
(1)如果ping外网域名不通,但ping外网IP通,问:问题可能出在哪?
(2)如果ping网关通,但ping外网不IP通,问:问题可能出在哪?
…… -
简单Linux命令:
jps 检查守护进程 cd cd ~跳到home目录 .表示目前所在的目录 ..表示目前目录的上一层目录 ../..当前目录的上上两层 vi ls mkdir ssh
scp scp [可选参数] file_source file_target 基于ssh登陆进行安全的远程文件拷贝命令 scp local_file remote_username@remote_ip:remote_folder 或者 scp local_file remote_username@remote_ip:remote_file 或者 scp local_file remote_ip:remote_folder 或者 scp local_file remote_ip:remote_file scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music scp /home/space/music/1.mp3 root@www.runoob.com:/home/root/others/music/001.mp3 scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music scp /home/space/music/1.mp3 www.runoob.com:/home/root/others/music/001.mp3
vi编辑器:
i 编辑模式
esc 非编辑模式
:
w
q
wq
x
q!
$跳到文件末尾
/关键字 查找关键字
4、YARN
-
什么是YARN(yet another resource negotiator)
统一资源管理和调度平台
-
Hadoop的哪个版本开始支持YARN的?
MRv2
-
YARN的守护进程:ResourceManager、NodeManager
- resourcemanager(Master):集群中各个节点的管理者,yarn的常驻进程,数目是一个,负责整个集群上资源监控、管理等
- nodemanager(Slave):集群中单个节点的代理,yarn的常驻进程,工作节点上都有一个,启动和监控工作节点上的容器(cpu,内存等资源)
-
双层调度范式:
- 一级调度ResourceManager->Schedular:resourcemanager接收作业,在指定NM(nodemanager)节点上启动AM,在scheduler中执行调度算法为AM(applicationmanager)分配资源,管理各个AM
- 二级调度NodeManager->ApplicationMaster:applicationmaster运行在NM上,向RM请求资源,接收RM的资源分配,在NM上启动container,在container中执行application,并监控application的执行状态
- ApplicationMaster和Container的功能
- container:yarn的资源表示模型,CPU、内存、网络等资源分配给container,由container提供给其中的任务
- applicationmaster:运行在resourcemanager中,管理yarn中所有的application
-
Map和Reduce任务运行在哪里?Container
-
ApplicationMaster运行在哪里?Container
5、MapReduce
- WordCount代码(实验3)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileSplit;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;
import org.apache.hadoop.util.Tool;
import org.apache.hadoop.util.ToolRunner;
import java.io.IOException;
import java.util.Iterator