超有料的hadoop知识点总结

第一章

1.数据量单位的换算

B(Byte字节)=8bit
1KB (Kilobyte 千字节)=1024B,
1MB (Mega byte 兆字节 简称“兆”)=1024KB,
1GB (Giga byte 吉字节 又称“千兆”)=1024MB,
1TB (Tera byte 万亿字节 太字节)=1024GB,其中1024=2^10 ( 2 的10次方),
1PB(Peta byte 千万亿字节 拍字节)=1024TB,
1EB(Exa byte 百亿亿字节 艾字节)=1024PB,
1ZB (Zetta byte 十万亿亿字节 泽字节)= 1024 EB,
1YB (Yotta byte 一亿亿亿字节 尧字节)= 1024 ZB,
1BB (Bronto byte 一千亿亿亿字节)= 1024 YB
1NB(Nona byte )= 1024BB
1DB(Dogga byte)= 1024NB

2.大数据的4V特性

(1)数据量大(Volume):“数据爆炸”成为大数据时代鲜明的特征
(2)数据种类繁多(Variety):结构化数据和非结构化数据
(3)处理速度快(Velocity):数据处理和数据分析的速度通常要达到秒级响应
(4)价值密度低(Value):价值密度远远低于传统关系数据库中已经有的那些数据

3.大数据的两大核心技术

(1)分布式存储
(2)分布式处理

4.Hadoop来源两大核心创始人:Doug Cutting

5.hadoop 生态圈有啥组件

Hadoop除了其核心的MapReduce和HDFS之外,还包含了很多不可或缺的周边项目。具体介绍如下:

(1)Common:一组分布式文件系统和通用I/O的组件与接口(序列化、Java RPC和持久化数据结构)。

(2)HBase:一个分布式、按列存储数据库。HBase使用HDFS作为底层存储,同时支持MapReduce的批量式计算和点查询(随机读取)。

(3)Sqoop:Sqoop是一款开源的工具,主要用于在传统数据库和HDFS之间高效传输数据,可以将一个关系型数据库中的数据导入到Hadoop的HDFS中,也可以将HDFS中的数据到出道关系数据库中

(4)Hive:一个分布式、按列存储的数据仓库。Hive管理HDFS中存储的数据,并提供基于 SQL的查询语言(由运行时引擎翻译成MapReduce作业)用以查询数据。

(5)Pig:一种数据流语言和运行环境,用以检索非常大的数据集。Pig 运行在MapReduce和HDFS的集群上。

(6)ZooKeeper:一个分布式、可用性高的协调服务。ZooKeeper提供分布式锁之类的基本服务用于构建分布式应用。

6.HDFS和MapReduce体系结构

Hadoop核心项目:
HDFS: Hadoop Distributed File System :分布式文件系统
MapReduce:并行计算框架

(1)HDFS体系结构
主从结构
主节点,只有一个: namenode
从节点,有很多个: datanodes
namenode负责:
接收用户操作请求
维护文件系统的目录结构
管理文件与block之间关系,block与datanode之间关系
datanode负责:
存储文件
文件被分成block存储在磁盘上
为保证数据安全,文件会有多个副本

(2)Mapreduce体系结构
主从结构
主节点,只有一个: JobTracker
从节点,有很多个: TaskTrackers
JobTracker负责:
接收客户提交的计算任务
把计算任务分给TaskTrackers执行
监控TaskTracker的执行情况
TaskTrackers负责:
执行JobTracker分配的计算任务

7.Hadoop特性

(1)高可靠性:采用冗余数据存储方式,即使一个副本发生故障,其他副本也可以保证正常对外提供服务。

(2)高效性:作为并行分布式计算平台,Hadoop采用分布式存储和分布式处理两大核心技术,能够高效地处理PB级别数据。

(3)高容错性:采用冗余数据存储方式,自动保存数据的多个副本,并且能够自动将失败的任务重新进行分配。

(4)高可扩展性:Hadoop的设计目标是可以高效稳定地运行在廉价的计算机集群上,可以扩展到数以千计的计算机节点上。

(5)成本低:Hadoop采用廉价的计算机集群,成本比较低,普通用户也很容易用自己的PC搭建Hadoop运行环境。

(6)运行在Linux平台上:Hadoop是基于Java语言开发的,可以较好地运行在Linux平台上。

(7)支持多种编程语言:Hadoop上的应用程序也可以使用其他语言编写,如C++。

第二章

传送门:Centos8安装Hadoop框架并运行示例程序(伪分布式)

1.hadoop安装模式:单机(本地)模式、伪分布式模式、分布式模式

单机(本地)模式:
(1)默认情况下,Hadoop即处于该模式,用于开发和调式。
(2)不对配置文件进行修改。
(3)使用本地文件系统,而不是分布式文件系统。
(4)Hadoop不会启动NameNode、DataNode、JobTracker、TaskTracker等守护进程,Map()和Reduce()任务作为同一个进程的不同部分来执行的。
(5)用于对MapReduce程序的逻辑进行调试,确保程序的正确。

伪分布式模式:一个机器上,既当namenode,又当datanode,或者说 既是jobtracker,又是tasktracker。没有所谓的在多台机器上进行真正的分布式计算,故称为"伪分布式"。

分布式模式:集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。

2.hadoop搭建基本步骤

(1)关闭防火墙
查看Linux系统防火墙状态:Service iptables status
关闭防火墙:service iptables stop
关闭防火墙的自动运行:chkconfig iptables off

(2)修改IP
设置Linux系统静态IP地址
因为虚拟机网络采用NAT方式,客户机的数据包通过宿主机进行转发,因此按如下方式设置客户操作系统的IP地址:
客户操作系统的IP地址和主操作系统在同一网段
客户操作系统的网关和主操作系统一致
客户操作系统的DNS和主操作系统一致
设置完毕执行命令:service network restart重启Linux系统网络。
验证:使用ifconfig命令查看设置是否成功

(3)修改HOSTNAME
修改当前会话中的主机名(暂时性):hostname hadoop
修改配置文件中的主机名(永久性):vi /etc/sysconfig/network HOSTNAME=hadoop

(4)设置ssh自动登录
执行以下命令产生密钥,位于~/.ssh目录
ssh-keygen –t rsa
执行以下拷贝命令,创建密钥文件authorized_keys
cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
验证:
执行命令:ssh localhost 登录主机
执行命令:exit 退出连接

(5)安装jdk
使用winscp将jdk安装文件从windows拷贝到Linux的/usr/local目录下
给jdk文件赋予用户的可执行权限:
chmod u+x jdk文件
解压缩jdk文件
./jdk文件
为以后使用方便,将解压后的文件夹重命名为jdk
mv 旧文件名 jdk
设置环境变量:
vi /etc/profile #编辑此文件,增加2行内容
export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH
执行以下命令,使设置立即生效
source /etc/profile
验证:
java -version

(6)安装hadoop
①解压文件:
使用winscp将hadoop安装包拷贝/usr/local目录下,然后进入此目录解压缩hadoop安装文件:tar zxvf hadoop-2.6.2.tar.gz

②设置环境变量:
vi /etc/profile #编辑此文件,增加2行内容
export HADOOP_HOME=/usr/local/hadoop-2.6.2
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
执行以下命令,使设置立即生效
source /etc/profile

③修改hadoop的配置文件:
配置文件路径:/usr/local/hadoop-2.6.2/etc/hadoop/ 目录下
1)修改hadoop-env.sh 文件,配置jdk的路径
export JAVA_HOME=/usr/lib/jvm/jdk…(jdk实际安装路径)
2)修改yarn-env.sh 文件,配置jdk的路径
export JAVA_HOME=/usr/lib/jvm/jdk…(jdk实际安装路径)
3)修改 core-site.xml,添加以下内容,配置HDFS的地址和端口号

<configuration>
<property>
  <name>fs.defaultFS</name>
  <value>hdfs://hadoop0:9000</value>
</property>
<property>
  <name>hadoop.tmp.dir</name>
  <value>/usr/local/hadoop-2.6.2/tmp</value>
</property> 
</configuration>

4)修改 hdfs-site.xml文件,修改block副本数:replication

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

5)修改mapred-site.xml,配置使用yarn框架
先创建mapred-site.xml:
执行命令:cp mapred-site.xml.template mapred-site.xml
在进行下面的配置:

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

6)修改yarn-site.xml,配置yarn属性及端口

<configuration>
<property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
</property>
<property>
  <name>yarn.resourcemanager.address</name>
  <value>hadoop0:9001</value>
</property>

3.hadoop搭建过程中需要修改的配置文件

见上一个知识点

4.格式化HDFS系统的命令:hadoop namenode –format

5.启动/关闭hdfs、启动/关闭yarn进程的命令

启动hdfs:start-dfs.sh
关闭hdfs:stop-dfs.sh
启动yarn:start-yarn.sh
关闭yarn:stop-yarn.sh
全部启动:start-all.sh
全部关闭:stop-all.sh

6.查看集群主节点的端口: 50070

7.查看job运行状态的端口: 8088

8.何为安全模式:

在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结 束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入 安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
NameNode在启动的时候首先进入安全模式,如果datanode丢失的block达到一定的比例(1- dfs.safemode.threshold.pct),则系统会一直处于安全模式状态即只读状态。 dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了 元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。
hadoop dfsadmin -safemode enter | leave | get |wait

第三章

1.Hdfs实现可靠性保障的机制有哪些?

(1)一个名字节点和多个数据节点
(2)数据复制(冗余机制):存放的位置(机架感知策略)

(3)故障检测
1)数据节点
①心跳包(检测是否宕机)
②块报告(安全模式下检测)
③数据完整性检测(校验和比较)
2)名字节点(日志文件,镜像文件)
(4)空间回收机制

2.关于块的几个问题

Hadoop2.0以后默认块的大小
(答案:128M)。
如果一个数据文件大小为500M,则分为几个块保存。
(答案:4块,但实际储存空间为500M)
重点:HDFS使用了块的概念,默认大小设为128M字节
HDFS将一个文件分为一个或数个块来存储
与传统文件系统不同的是,如果实际数据没有达到块的大小,则并不实际占用磁盘空间。

3.hdfs 副本保存策略

(1)默认副本放置策略:
在默认情况下副本数量是3个,所有的DN都是在同一个机架下,此时写block时,三个DN机器的选择是完全随机的。

(2)配置机架后的副本放置策略:
配置机架感知后,HDFS在选择三个DN时,就会进行相应的判断:
①如果上传本机不是一个DN,而是一个客户端,那么就从所有slave机器中随机选择一台DN作为第一个块的写入机器(DN1)。而此时如果上传机器本身就是一个DN,那么就将该DN本身作为第一个块写入机器。
②随后在DN1所属的机架外的另外的机架上,随机的选择一台,作为第二个block的写入DN机器(DN2)
③在写第三个block前,先判断前两个DN是否在同一个机架上,如果是在同一个机架,那么就尝试在另外一个机架上选择第三个DN作为写入机器(DN3)。而如果DN1和DN2没有在同一个机架上,则在DN2所在的机架上选择一台DN作为DN3。(hadoop fsck xx -files -blocks -locations -racks )

4.何为机架感知(告诉 Hadoop 集群中哪台机器属于哪个机架)

为什么要设置机架感知:
(1)开启机架感知,NN可以知道DN所处的网络位置,
(2)根据网络拓扑图可以计算出rackid,通过rackid信息可以计算出任意两台DN之间的距离
(3)在HDFS写入block时,会根据距离,调整副本放置策略
(4)写入策略会将副本写入到不同的机架上,防止某一机架挂掉,副本丢失的情况。同时可以降低在读取时候的网络I/O。但是会增加写操作的成本。

4.namenode 被格式化之后产生了哪些文件?各自的功能是什么?

namenode 被格式化之后,将在/usr/local/hadoop-2.7.1/data/hdfs/name/current 目录中
产生文件名为edits,fsimage,seen_txid,VERSION
(1) fsimage文件:HDFS文件系统元数据的一个永久性检查点,包含HDFS文件系统的所有目录和文件idnode的序列化信息。
(2)edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端所有的写操作首先会被记录到edits文件中。
(3)seen_txid文件保存的是一个数字,即最后一个edits的数字
每次NameNode启动时都会将fsimage文件读入内存,并从0001开始到seen_txid中记录的数字,依次执行每个edits里面更新操作,保证内存中的元数据信息是最新的,同步的,可以看成namenode启动时,将fsimage和edits文件进行合并。

5.第二名称节点的功能

(1)EditLog与Fsimage的合并操作。
每隔一段时间,第二名称节点会和名称节点通信,请求其停止使用Editlog文件,暂时将新到达的写操作添加到一个新的文件EditLog.new中。然后,第二名称节点把名称节点中的FsImage文件和EditLog文件拉回到本地,在加载到内存中,对二者执行合并操作,即在内存中逐条执行EditLog中的操作,使得FsImage保持最新。合并结束后,第二名称节点会把合并后最新的FsImage文件发送到名称节点。名称节点收到后,会用最新的FsImage文件去替换旧的FsImage文件,同时用EditLog.new文件去替换EdotLog文件,从未减小EditLog文件的大小。
(2)作为名称节点的“检查点”。
从上面的合并过程可以看出,第二名称节点会定期和名称节点通信,从名称节点获取FsImage文件和EditLog文件,执行合并操作得到最新的FsImage文件。从这个角度来讲,第二名称节点相当于为名称节点设置了一个检查点,周期性地备份名称节点中的元数据信息,当名称节点发生故障,就可以用第二名称节点中记录的元数据信息进行系统恢复。
在HDFS设计中,并不支持把系统直接切换到第二名称节点,因此,从这个角度来讲,第二名节点只是起到了名称节点的“检查点”作用,并不起到热备份的作用。

6.hdfs读写流程

写文件流程:
(1)客户端把数据缓存到本地临时文件夹
(2)临时文件夹数据大小达到一个block大小时,客户端联系NameNode, NameNode分配DataNode,DataNode依照距离客户端的位置被排列成一个有着最近物理距离的序列。
(3)与序列的第一个数据服务器建立Socket连接,发送请求,然后等待回应,依次下传,客户端得到回包,流水线建立成功。
(4)正式发送数据,以4K为大小传送。

读文件流程:
(1)客户端联系NameNode,得到所有数据块信息,以及数据块对应的所有数据服务器的位置信息
(2)尝试从某个数据块对应的一组数据服务器中选出一个,进行连接(选取算法未加入相对位置的考虑)
(3)数据被一个包一个包发送回客户端,等到整个数据块的数据都被读取完了,就会断开此链接,尝试连接下一个数据块对应的数据服务器,整个流程,依次如此反复,直到所有想读的都读取完了为止

7.元数据包含哪些?其中哪些是持久化到磁盘中保存的。

元数据包含:
(1)HDFS文件系统的目录树
(2)文件(数据)与块的映射关系 file1→ block000 block001 block002
(3)块与DataNode的映射关系 DN1:block001,block0010
目录树、文件和块的映射是持久化到磁盘中保存的。

补充:内存中:读写速度快,但是元数据信息在断电时,数据丢失,不能做到持久化。保存的信息包括元数据目录树,文件与块的映射,块与DataNode的映射。 磁盘中:读写速度慢,为了实现元数据的持久化,只包含目录树、文件和块的映射。 元数据保存在内存中,提供高速度的读写,以序列化的形式保存在磁盘中,保证数据持久化。

8.Hdfs shell操作基本命令(hadoop fs 等于 hdfs dfs 等于 hadoop dfs)

hadoop fs help //使用此命令可以查看HDFS的所有常用命令语法
hadoop fs –help 命令 //查看某个命令的具体功能

参数:
-help [cmd]	   //显示命令的帮助信息
-ls(r) <path>	//显示当前目录下所有文件
-du(s) <path>	//显示目录中所有文件大小
-count[-q] <path>	//显示目录中文件数量
-mv <src> <dst>	   //移动多个文件到目标目录
-cp <src> <dst>	   //复制多个文件到目标目录
-rm(r)		        //删除文件()
-put <localsrc> <dst>	//本地文件复制到hdfs
-copyFromLocal	   //同put
-moveFromLocal	   //从本地文件移动到hdfs
-get [-ignoreCrc] <src> <localdst>	//复制文件到本地,可以忽略crc校验
-getmerge <src> <localdst>		//将源目录中的所有文件排序合并到一个文件中
-cat <src>	  //在终端显示文件内容
-text <src>	//在终端显示文件内容
-copyToLocal [-ignoreCrc] <src> <localdst>	//复制到本地
-moveToLocal <src> <localdst>
-mkdir <path>	//创建文件夹
-touchz <path>	//创建一个空文件

第四章

1.对hdfs文件进行操作的常用类:

(1)org.apache.hadoop.fs.FileSystem:一个通用文件系统的抽象基类,可以被分布式文件系统继承。所有可能使用hadoop文件系统的代码都要使用这个类。Hadoop为FileSystem这个抽象类提供了多种具体的实现,如LocalFileSystem、DistributionFileSystem、HftpFileSystem、HsftpFileSystem、FfpFileSystem。
(2)Org.apache.hadoop.fs.FileStatus:一个接口向客户端展示系统中文件和目录的元数据,具体包括文件大小、块大小、副本信息、所有者、修改时间等,可通过FileSystem.listStatus()方法获得具体的实例对象。
(3)org.apache.hadoop.fs.FSDataInputStream:文件输入流,用于读取hadoop文件
(4)org.apache.hadoop.fs.FSDataOutputStream:文件输出流,用于写hadoop文件。
(5)org.apache.hadoop.conf.Configuration:访问配置项。所有配置项的值,如果在core-site.xml中有对应的配置,则以core-site.xml为准。
(6)org.apache.hadoop.fs.Path:用于表示hadoop文件系统中的一个文件或者一个目录的路径。
(7)org.apache.hadoop.fs.PathFilter:一个接口,通过实现方法PathFilter.accept(Path path)来判断是否接收路径path表示的文件或者目录。
(8)IOutils

2.对hdfs文件进行操作的常用方法及其返回值类型

(1)先获取FileSystem对象

private static FileSystem getFileSystem() throws Exception {
   Configuration conf = new Configuration();
   URI uri = new URI("hdfs://主机名:9000");
   final FileSystem fileSystem = FileSystem.get(uri , conf);
   return fileSystem;
 }

(2)调用fileSystem的open方法读取文件示例

private static void readFile() throws Exception {
FileSystem fileSystem = getFileSystem();
FSDataInputStream openStream = fileSystem.open(new Path("hdfs://itcast0106:9000/aaa"));
IOUtils.copyBytes(openStream, System.out, 1024, false);
IOUtils.closeStream(openStream);
}

(3)调用fileSystem的mkdirs方法创建目录示例

private static void mkdir() throws Exception {
FileSystem fileSystem = getFileSystem();
fileSystem.mkdirs(new Path("hdfs://itcast0106:9000/bbb"));
}

(4)调用fileSystem的delete方法删除文件或目录示例

private static void rmdir() throws Exception {
FileSystem fileSystem = getFileSystem();
fileSystem.delete(new Path("hdfs://itcast0106:9000/bbb"));
}

(5)遍历目录,使用FileSystem的listStatus(path),如果要查看file状态,使用FileStatus对象

private static void list() throws Exception{
		FileSystem fileSystem = getFileSystem();
		FileStatus[] listStatus = fileSystem.listStatus(new 
                              Path("hdfs://itcast0106:9000/"));
		for (FileStatus fileStatus : listStatus) {
			String isDir = fileStatus.isDir()?"目录":"文件";
			String name = fileStatus.getPath().toString();
			System.out.println(isDir+"  "+name);
		}
}

(6)使用IOUtils进行读文件的示例

import java.net.URL
import  org.apache.hadoop.io.IOUtils
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory

(7)FileSystem可以实现的操作包括
上传操作 put
下载操作 get
拷贝操作 copyFromLocalFile copyFromLocalFile
写文件 create
读取文件 open
创建目录 mkdirs
删除文件或目录 delete
列出目录的内容 listStatus
显示文件系统的目录和文件的元数据信息 getFileStatus

3.何为RPC,RPC的调用过程

RPC是远程过程调用协议:它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

RPC的调用过程:
(1)调用者(客户端Client)以本地调用的方式发起调用;
(2)Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体;
(3)Client stub将消息体通过网络发送给服务端;
(4)Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数;
(5)Server stub根据方法名和参数进行本地调用;
(6)被调用者(Server)本地调用执行后将结果返回给server stub;
(7)Server stub将返回值打包编码成消息,并通过网络发送给客户端;
(8)Client stub收到消息后,进行拆包解码,返回给Client;
(9)Client得到本次RPC调用的最终结果。

第五章

1.Mapreduce是什么

MapReduce是一种分布式运算程序的编程框架,使用户开发“基于hadoop的数据分析应用”,由Google提出,主要用于搜索领域,解决海量数据(大于1TB)的计算问题。

2.Mapreduce的优缺点

(1)MapReduce优点
适合PB以上海量数据的离线批处理
易于编程
良好的扩展性
高容错性
(2)MapReduce缺点
不能实时的进行计算
不适合流式计算
不适合DAG计算

3.Mapreduce2.0架构及各组件功能

架构:
各组件功能:

(1)ResourceManager:整个集群只有一个,负责集群资源的统一管理和调度
详细功能:
1)处理客户端请求
2)启动/监控ApplicationMaster
3)监控NodeManager
4)资源分配与调度
(2)NodeManager:整个集群有多个,负责单节点资源管理和使用
详细功能:
1)单个节点上的资源管理和任务管理
2)处理来自ResourceManager的命令
3)处理来自ApplicationMaster的命令
(3)ApplicationMaster:每个应用有一个,负责应用程序的管理
详细功能:
1)为应用程序申请资源,并进一步分配给内部任务
2)任务监控与容错
(4)Container:对任务运行环境的抽象(资源分配的基本单位)
描述一系列信息:
1)任务运行资源(节点、内存、CPU)
2)任务启动命令
3)任务运行环境

4.yarn架构 工作流程

(1)用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
(2)ResourceManager为该应用程序分配第一个Container(这里可以理解为一种资源比如内存),并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
(3)ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManage查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
(4)ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
(5)一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
(6)NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
(7)各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
(8)应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。

5.Hdfs shell提交作业到yarn的命令

hadoop jar jarFile [mainClass] inputpath outputpath

6.Mapreduce执行过程

(1)一个MR程序就是一个job,job=map+reduce
(2)Map阶段的输出就是reduce阶段的输入
(3)一个MR程序,一共存在四对输入输出,所有的输入输出都是键值对。<key,value>
Map阶段
map阶段的输入:<k1,v1>
map阶段的输出:<k2,v2>
Reduce阶段:
reduce阶段的输入:<k3,v3>
reduce阶段的输入:<k4,v4>
其中:k2=k3,v3是一个集合,集合中的所有数据都是v2。

wordcount案例:
详情请进入传送门

7.Shuffle过程

所谓shuffle,是指对Map输出结果进行分区、排序、合并等处理并交给Reduce的过程。Shuffle过程分为Map端的操作和Reduce端的操作。

Map端的shuffle包括4个步骤
(1)输入数据和执行Map任务
(2)写入缓存
(3)溢写(分区、排序和合并)
(4)文件归并

Reduce端的shuffle具体步骤
(1)“领取”数据
(2)归并数据
(3)把数据输入给Reduce任务

8.Mapreduce输入输出相关的类

(1)InputFormat类(抽象类)
(2)RecordReader类(抽象类)
包:org.apache.hadoop.mapreduce;
功能:将分片拆成key/value这种形式
(3)OutputFormat类(抽象类)
功能:
1)验证输出,如输出的路径是否在文件系统中存在了。
2)提供RecordWriter方法,将结果输出到文件系统中。
3)子类:TextOutputFormat
(4)RecordWriter类
功能:将结果输出到文件系统中

9.Split分片默认大小,分片调用的方法

文件存储数据的方式是以块的形式存储的。一个数据分片就是一个块,默认大小:128M
切片由FileInputFormat类中的getsplits方法来完成

10.Hadoop序列化作用,要实现的接口,key必须要实现的接口

作用:进程间通信,永久存储。
要实现的接口:Writable、WritableComparable
key必须要实现的接口:Writable

11.Hadoop中数据类型和java中数据类型的转化

12.Mapreduce编程:map端和reduce端需要继承的类

map:Mapper
reduce:Reducer

13.Job类的定义及功能

定义:Job 类是 Hadoop 中一个特殊的类,其主要作用是给予设计设计人员对 MapReduce 过程的一个细节上操控的作用。
功能:
(1)setNumReduceTasks:设置执行的reduce个数
(2)setInputFormatClass:设置输入数据的方式
(3)setOutputFormatClass:设置输出数据的方式
(4)setJarByClass:设置运行的jar包
(5)setMapClass:设置Map处理类
(6)setReducerClass:设置Reducer处理类
(7)setOutputKeyClass:设置输出key类型
(8)setOutputValueClass:设置输出value类型
(9)killTask:结束任务
(10)getCounters:获得计数器
(11)submit:提交任务
(12)waitForCompletion:提交并等待任务结束

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达娃里氏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值