Hadoop小练习
Hadoop和HDFS内容:
1.什么是HDFS文件系统?
HDFS是大数据开源框架hadoop的组件之一,全称(Hadoop Distributed File System),它是一个分布式文件系统,由多台服务器联合起来实现文件存储功能,通过目录树来定位文件,集群中的服务器都有有各自的角色.
2.hdfs的文件上传的流程
1.首先客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
2.NameNode返回是否可以上传。
3.如果文件大于128M则分块存储,客户端请求第一个 Block上传到哪几个DataNode服务器上。
4.NameNode根据副本储存策略返回3个DataNode节点,假如为dn1、dn2、dn3。
5.客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求调用dn2,dn2调用dn3,建立通信管道完成,dn1、dn2、dn3逐级应答客户端。
6.客户端以Packet为单位往dn1上传第一个Block数据,dn1收到Packet就会传给dn2,dn2传给dn3;dn1,dn2,dn3每接收packet会放入一个待写队列等待写入数据,落盘。
7.当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器,重复执行3-6步。
3.HDFS文件系统的特点:
1.数据通过副本存储,提高容错性
2.能够处理PB级及以上数据,可处理百万级文件数量
3.节约成本,可分布在“廉价”机器上
4.不适合低延时数据访问
5.不适合对大量文件的存储和访问
6.单线程操作文件不能多用户执行写操作,并且不支持文件随机修改
4.HDFS中namenode和datanode的作用:
namenode:
1.负责接受客户端读写数据请求
2.负责数据块副本的存储策略
3.负责管理快数据的映射关系
4.储存元数据信息
datanode:
1.存储实际的数据块
2.真实处理数据块的读/写操作
5.为什么HSDFS不支持存储小文件:
1)存储大量小文件会占用NameNode大量的内存和磁盘来存储文件目录和块信息。是不可取的,因为NameNode的内存是有限的;
2)读取小文件时寻址时间会超过读取时间,不合理,违反了HDFS的设计目标.
6.HDFS默认数据块得大小是多少?为什么:
HDFS目前默认块大小在Hadoop2.x版本中是128M,老版本中是64M,
因为目前磁盘的传输率约为100M/s,而HDFS读取文件时最佳的寻址
时间为10ms,寻址时间为传输时间的百分之1时最佳,所以定义块
大小为128M,1秒左右可以快速读取完毕;本质上HDFS的块大小取决于
磁盘的传输速率。
7.Hadoop是一个开源软件框架,用于存储大量数据,并发计算/查询节点的集群上的数据。Hadoop包括以下内容:
HDFS:Hadoop分布式文件存储系统。
MapReduce:分布式计算框架。它以分布式和并行的方式处理大量的数据。
YARN(资源定位器):用于管理和调度集群资源的框架。
8. 列出正常工作的Hadoop 集群中Hadoop 都分别需要启动哪些进程,它们的作用分别是什么? 请尽量列的详细一些?
namenode:
负责接受客户端读写数据请求
负责数据块副本的存储策略
负责管理快数据的映射关系
储存元数据信息
datanode:
存储实际的数据块
真实处理数据块的读/写操作
Secondary NameNode:
辅助后台程序,与NameNode进行通信,定期合并FSimage和Edits编辑日志,合并为最新的镜像文件。保存HDFS元数据的快照。
resourcemanager:
统一资源调度和管理器
处理客户端请求
监控NodeManager
启动或监控ApplicationMaster
资源的分配与调度
nodemanager:
提供计算资源
管理单个节点上的资源
处理来自RM的命令
处理来自ApplicationMaster命令
9.Hadoop 端口及其含义:
dfs.namenode.http-address:50070
SecondaryNameNode辅助名称节点端口号:50090
fs.defaultFS:9000
yarn.resourcemanager.webapp.address:8088
historyserver:19888
10. hadoop集群可以运行的3个模式是什么?
本地运行模式、伪分布式运行模式、完全分布式运行模式
11.搭集群是要配置那些文件:
修改配置文件hadoop-env.sh、yarn-env.sh、mapred-env.sh、 core-site.xml hdfs-site.xml mapred-site.xml
12.Hadoop的发行版:
hadoop三大发行版本:Apache、Cloudera、Hortonworks。
Apache版本最原始(最基础)的版本。
Cloudera在大型互联网企业中用的较多。
Hortonworks文档较好。
13.搭建完全分布式集群有哪些注意点?
完全分布式集群通常被用于生产环境,这里我们使用N台主机组成一个Hadoop集群,
Hadoop守护进程运行在每台主机之上。这里会存在Namenode运行的主机,Datanode
运行的主机,secondarynamenode运行的主机,resourcemanager运行的主机等。在
完全分布式环境下,主节点和从节点会分开。
14.简要描述如何安装配置apache 的一个开源Hadoop,只描述即可,无需列出具体步骤,列出具体步骤更好?
1、准备服务器修改ip和主机名(虚拟机需要)、创建用户和软件安装目录
2、安装JDK并配置环境变量(/etc/profile);
3、关闭防火墙;
4、配置hosts文件,方便hadoop通过主机名访问(/etc/hosts);
5、设置ssh免密码登录;
6、解压缩hadoop安装包,并配置环境变量;
7、修改配置文件hadoop-env.sh、yarn-env.sh、mapred-env.sh、 core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml;
8、格式化hdfs文件系统(hadoop namenode -format);
9、启动hadoop:start-def.sh、start-yarn.sh
10、使用jps查看进程。
15.HDFS与HDFS之间
-ls 查看hdfs文件目录
-mkdir 在HDFS上创建目录
-rm 删除文件或者文件夹
-rmr | -rm -r 递归删除
-cp 从一个目录拷贝文件至另一目录
-mv 在HDFS目录中移动文件
-chown 修改文件所属用户权限
-chmod 修改文件所属读写权限
-du -h 文件夹暂用的空间大小
-df -h 查看系统分区情况
-cat 查看文件
二:
yarn部分的内容:
1.、yarn的组成架构
1.ResourceManager:处理客户端请求,监控nodeManager,
启动或监控ApplicationMaster,资源调度分配和调度
2.nm:管理单个节点上的资源,处理来自rm和app的命令
3.App:数据切分,为应用程序申请资源并分配给内部的任务,任务的监控和容错
2.yarn是什么?
Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序。
3.yarn的作业提交全过程:
(1)作业提交
第1步:Client调用job.waitForCompletion方法,向整个集群提交MapReduce作业。
第2步:Client向RM申请一个作业id。
第3步:RM给Client返回该job资源的提交路径和作业id。
第4步:Client提交jar包、切片信息和配置文件到指定的资源提交路径。
第5步:Client提交完资源后,向RM申请运行MrAppMaster。
(2)作业初始化
第6步:当RM收到Client的请求后,将该job添加到容量调度器中。
第7步:某一个空闲的NM领取到该Job。
第8步:该NM创建Container,并产生MRAppmaster。
第9步:下载Client提交的资源到本地。
(3)任务分配
第10步:MrAppMaster向RM申请运行多个MapTask任务资源。
第11步:RM将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
(4)任务运行
第12步:MR向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
第13步:MrAppMaster等待所有MapTask运行完毕后,向RM申请容器,运行ReduceTask。
第14步:ReduceTask向MapTask获取相应分区的数据。
第15步:程序运行完毕后,MR会向RM申请注销自己。
(5)进度和状态更新
YARN中的任务将其进度和状态(包括counter)返回给应用管理器, 客户端每秒(通过mapreduce.client.progressmonitor.pollinterval设置)向应用管理器请求进度更新, 展示给用户。
(6)作业完成
除了向应用管理器请求作业进度外, 客户端每5秒都会通过调用waitForCompletion()来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval来设置。作业完成之后, 应用管理器和Container会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
3.资源调度器
目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler
三.mapreduce:
1.MapReduce定义:
mapreduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架.
mapreduce的核心功能是将用户编写的业务逻辑代码和自带默认组件合成一个完整的分布式运算程序,并发运行在一个Hadoop集群上.
2.MapReduce优点:
MapReduce易于编程 良好的扩展性 高容错性 适合PB级以上海量数据的离线处理
3.MapReduce缺点:
不擅长实时计算 不擅长流式计算 不擅长DAG计算
3. MapReduce核心思想
1)分布式的运算程序往往需要分成至少2个阶段。
2)第一个阶段的MapTask并发实例,完全并行运行,互不相干。
3)第二个阶段的ReduceTask并发实例互不相干,但是他们的数据依赖于上一个阶段的所有MapTask并发实例的输出。
4)MapReduce编程模型只能包含一个Map阶段和一个Reduce阶段,如果用户的业务逻辑非常复杂,那就只能多个MapReduce程序,串行运行。
总结:分析WordCount数据流走向深入理解MapReduce核心思想。
ZooKeeper的选举机制
1.一个领导者(Leader),多个跟随者(Follower)组成的集群
2.集群中只要有半数以上节点存活,Zookeeper集群就能正常服务
3.全局数据一致性,每个server保存一份相同的副本,client无论链接哪个server,得到的数据都是一致的
4.更新请求顺序执行,来自同一个client的请求按顺序执行
5.数据更新原子性,一次数据更新要么成功要么失败0
6.实时性,在一定时间范围内,client能读到最新数据
ZooKeeper的监听原理是什么?
1)首先有一个main()线程
2)在main线程中创建Zookeeper客户端,会创建两个线程,connect负责网络连接通信,listener负责监听
3)通过connect线程将注册的监听事件发送给Zookeeper
4)在Zookeeper的注册监听器列表中将注册的监听事件添加到列表中
5)Zookeeper监听到有数据或路径变化,就会将这个消息发送给listener线程
6)listener线程内部调用了process()方法
?zookeeper的节点类型有哪些?怎么创建临时节点和有序节点(临时、永久有序节点?
?节点类型有 持久:persistent
? 短暂:ephemeal
?create -s有顺序节点编号 永久节点
?create -e 临时节点
五:hadoop HA高可用搭建流程:
1.集群规划
在hadoop102、hadoop103和hadoop104三个节点上部署Zookeeper。
2.解压安装
(1)将tar包拷贝到hadoop102上并解压Zookeeper安装包到/opt/module/目录下
[ software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/
3.配置服务器编号
(1)在/opt/module/zookeeper-3.4.10/这个目录下创建zkData
[ zookeeper-3.4.10]$ mkdir -p zkData
(2)在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件
[ zkData]$ touch myid
添加myid文件,注意一定要在linux里面创建,在notepad++里面很可能乱码
(3)编辑myid文件
[ zkData]$ vi myid
在文件中添加与server对应的编号:2
4.配置zoo.cfg文件
(1)重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg
[ conf]$ mv zoo_sample.cfg zoo.cfg
(2)打开zoo.cfg文件
[ conf]$ vim zoo.cfg
修改数据存储路径配置
dataDir=/opt/module/zookeeper-3.4.10/zkData
增加如下配置
#######################cluster##########################
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
(3)同步hadoop102集群上的zookeeper-3.4.10到hadoop103,104
[ module]$ rsync -av zookeeper-3.4.10 :/opt/module/
[ module]$ rsync -av zookeeper-3.4.10 :/opt/module/
(4)拷贝配置好的zookeeper到其他机器上后分别在hadoop103、hadoop104上修改/opt/module/zookeeper-3.4.10/zkData/myid文件中内容为3、4
(5)配置参数解读
server.A=B:C:D
例如:server.2=hadoop102:2888:3888
A是一个数字,表示这个是第几号服务器;
集群模式下配置一个文件myid,这个文件在dataDir目录下,这个文件里面有一个数据就是A的值,Zookeeper启动时读取此文件,拿到里面的数据与zoo.cfg里面的配置信息比较从而判断到底是哪个server。
B是这个服务器的地址;
C是这个服务器Follower与集群中的Leader服务器交换信息的端口;
D是万一集群中的Leader服务器挂了,需要一个端口来重新进行选举,选出一个新的Leader,而这个端口就是用来执行选举时服务器相互通信的端口。
5.集群操作
(1)分别启动Zookeeper
[ zookeeper-3.4.10]$ bin/zkServer.sh start
[ zookeeper-3.4.10]$ bin/zkServer.sh start
[ zookeeper-3.4.10]$ bin/zkServer.sh start
(2)查看状态
[ zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower
[ zookeeper-3.4.10]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: leader
[ zookeeper-3.4.5]# bin/zkServer.sh status
JMX enabled by default
Using config: /opt/module/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: follower