Hadoop练习
1.hadoop 是什么(整体概念,各个组件)
Hadoop是一个由Apache基金会所开发的分布式系统基础架构。3大核心组件:HDFS、MapReduce、Yarn。
核心功能是:
1)提供海量数据的存储服务。
2)提供分析海量数据框架及运行平台。
2.HDFS 的架构及概念
HDFS(Hadoop Distributed File System),它是一个文件系统,用于存储文件,通过目 录树来定位文件;其次,它是分布式的,由很多服务器联合起来实现其功能,集群中的服务 器有各自的角色。
3.yarn 的架构及概念
Yarn 是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式 的操作系统平台,而 MapReduce 等运算程序则相当于运行于操作系统之上的应用程序。
4.MapReduce 的概念及作用
● MapReduce将复杂的、运行于大规模集群上的并行计算过程高度地抽象到了两个函数:Map和Reduce
● 编程容易,不需要掌握分布式并行编程细节,也可以很容易把自己的程序运行在分布式系统上,完成海量数据的计算
● MapReduce采用“分而治之”策略,一个存储在分布式文件系统中的大规模数据集,会被切分成许多独立的分片(split),这些分片可以被 多个Map任务并行处理
● MapReduce设计的一个理念就是“计算向数据靠拢”,而不是“数据向计算靠拢”,因为移动数据需要大量的网络传输开销
● MapReduce框架采用了Master/Slave架构,包括一个Master和若干个Slave。 Master上运行JobTracker,Slave上运行TaskTracker
● Hadoop框架是用Java实现的,但是MapReduce应用程序则不一定 要用Java来写
5.yarn 的常见调度器有哪些?
先进先出调度器(FIFO)
容量调度器(默认)(Capacity Scheduler)
公平调度器(Fair Scheduler)
6.MapReduce 的执行流程
Map阶段执行流程
1.把输入目录下文件按照一定的标准逐个进行逻辑切片,形成切片规划。默认Split size = Block size(128M),每一个切片由一个MapTask处理(getSplits)。 2.对切片中的数据按照一定的规则读取解析返回KV键值对。默认是按行读取数据。key是每一行的起始位置偏移量,value是本行的文本内容(TextInputFormat)。 3.调用Mapper类中的map方法处理数据。每读取解析出来的一个KV ,调用一次map方法。 4.按照一定的规则对Map输出的键值对进行分区partition。默认不分区,因为只有一个reduceTask。分区的数量就是reducetask运行的数量。 5.Map输出数据写入内存缓冲区,达到比例溢出到磁盘上。溢出spill的时候根据key进行排序sort。 6.对所有溢出文件进行最终的merge合并,成为一个文件。
Reduce阶段执行过程
1.ReduceTask会主动从MapTask复制拉取属于需要自己处理的数据。 2.把拉取来数据全部进行合并merge,即把分散的数据合并成一个大的数据。再对合并后的数据排序。 3.对排序后的键值对调用reduce方法。键相等的键值对调用一次reduce方法。最后把这些输出的键值对写入到HDFS文件中。
7.hadoop-1.x 和 hadoop-2.x 的区别
第一代Hadoop包含三个大版本,分别是0.20.x,0.21.x和0.22.x,其中,0.20.x最后演化成1.0.x,变成了稳定版,而0.21.x和0.22.x则增加了NameNode HA等新的重大特性
第二代Hadoop包含两个版本,分别是0.23.x和2.x,它们完全不同于Hadoop 1.0,是一套全新的架构,均包含HDFS Federation和YARN两个系统,相比于0.23.x,2.x增加了NameNode HA和Wire-compatibility两个重大特性
8.HDFS 适合的应用场景及不适合的应用场景
适用:
兼容廉价的硬件设备
流数据读写
l大数据集
简单的文件模型
强大的跨平台兼容性
不适用:
不适合低延迟数据访问
无法高效存储大量小文件
l不支持多用户写入及任意修改文件
9.hdfs client 的作用有哪些?
hdfs client是用户操作HDFS最常用的方式,HDFS在部署时都提供了客户端
hdfs client是一个库,暴露了HDFS文件系统接口,这些接口隐藏了HDFS实现中的大部分复杂性
严格来说,hdfs client并不算是HDFS的一部分
hdfs client可以支持打开、读取、写入等常见的操作,并且提供了类似Shell的命令行方式来访问HDFS中的数据
HDFS也提供了Java API,作为应用程序访问文件系统的客户端编程接口
10.hdfs SecondaryNameNode 的作用?
SecondaryNameNode是HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS 元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上
SecondaryNameNode的工作情况:
(1)SecondaryNameNode会定期和NameNode通信,请求其停止使用EditLog文件,暂时将新的写操作写到一个新的文件edit.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别;
(2)SecondaryNameNode通过HTTP GET方式从NameNode上获取到FsImage和EditLog文件,并下载到本地的相应目录下;
(3)SecondaryNameNode将下载下来的FsImage载入到内存,然后一条一条地执行
EditLog文件中的各项更新操作,使得内存中的FsImage保持最新;这个过程就是EditLog和FsImage文件合并;
(4)SecondaryNameNode执行完(3)操作之后,会通过post方式将新的FsImage文件发送到NameNode节点上
(5)NameNode将从SecondaryNameNode接收到的新的FsImage替换旧的FsImage文件,同时将edit.new替换EditLog文件,通过这个过程EditLog就变小了
11.hdfs 限额/user/root/dir 文件夹下面设置最多上传三个文件,最多存放 4M 的数据
12.hdfs 上传、下载的命令是
上传:
hadoop fs -put [文件目录] [上传目录]
或
hadoop fs -copyFromLocal [文件目录] [上传目录]
下载:
hadoop fs -get [文件目录] [下载目录]
13.hdfs 进入、离开安全模式的命令,以及查看安全模式状态的命令
进入:
hdfs dfsadmin -safemode enter
离开:
hdfs dfsadmin -safemode leave
查看:
hdfs dfsadmin -safemode get
14.hdfs 能存储的最大文件个数受限于?有什么好的解决方案
NameNode是保存在内存中的,因此,整个HDFS可存储的文件数量受限于NameNode的内存大小
15.yarn container 的概念
相当一台独立的服务器,里面封装了任务运行所需要的资源,如内存、CPU、磁盘、网络等
16.yarn 常见的关于 container 的设置参数有哪些
第一个参数:container分配最小内存
yarn.scheduler.minimum-allocation-mb 1024 给应用程序container分配的最小内存
第二个参数:container分配最大内存
yarn.scheduler.maximum-allocation-mb 8192 给应用程序container分配的最大内存
第三个参数:每个container的最小虚拟内核个数
yarn.scheduler.minimum-allocation-vcores 1 每个container默认给分配的最小的虚拟内核个数
第四个参数:每个container的最大虚拟内核个数
yarn.scheduler.maximum-allocation-vcores 32 每个container可以分配的最大的虚拟内核的个数
第五个参数:nodeManager可以分配的内存大小
yarn.nodemanager.resource.memory-mb 8192 nodemanager可以分配的最大内存大小,默认8192Mb
17.ResourceManager、NodeManager 的作用
ResourceManager(RM):整个集群资源(内存、cpu等)的管理
NodeManager(NM):管理单个节点服务器资源
Kettle练习
1.从 mysql 数据库获取当前系统时间戳,判断该值是奇数则成功, 否是失败
2.设置 3 个并行任务同时从数据库获取当前系统时间,并写入 mysql 数据库表
3.循环读取题 2 写入的数据,并输出为文件,格式(JSON)