1.2 Hadoop
1.2.1 Hadoop常用端口号
hadoop2.x | hadoop3.x | |
访问HDFS端口 | 50070 | 9870 |
访问MR执行情况端口 | 8088 | 8088 |
历史服务器 | 19888 | 19888 |
客户端访问集群端口 | 9000 | 8020 |
1.2.2 Hadoop配置文件
配置文件:
hadoop2.x core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml slaves
hadoop3.x core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml workers
1.2.3 HDFS读流程和写流程
注意:HDFS写入流程时候,某台dataNode挂掉如何运行?
当DataNode突然挂掉了,客户端接收不到这个DataNode发送的ack确认,客户端会通知NameNode,NameNode检查并确认该块的副本与规定的不符,NameNode会通知闲置的DataNode去复制副本,并将挂掉的DataNode作下线处理。等挂掉的DataNode节点恢复后, 删除该节点中曾经拷贝的不完整副本数据。
1.2.4 HDFS小文件处理
1)会有什么影响
(1)存储层面
1个文件块,占用namenode多大内存150字节
128G能存储多少文件块? 128 g* 1024m*1024kb*1024byte/150字节 = 9.1亿文件块
(2)计算层面
每个小文件都会起到一个MapTask,1个MapTask默认内存1G。浪费资源。
2)怎么解决
(1)采用har归档方式,将小文件归档
(2)采用CombineTextInputFormat
(3)自己写一个MR程序将产生的小文件合并成一个大文件。如果是Hive或者Spark有merge功能自动帮助我们合并。
(4)有小文件场景开启JVM重用;如果没有小文件,不要开启JVM重用,因为会一直占用使用到的Task卡槽,直到任务完成才释放。
JVM重用可以使得JVM实例在同一个job中重新使用N次,N的值可以在Hadoop的mapred-site.xml文件中进行配置。通常在10-20之间。
<property>
<name>mapreduce.job.jvm.numtasks</name>
<value>10</value>
<description>How many tasks to run per jvm,if set to -1 ,there is no limit</description>
</property>
1.2.5 HDFS的NameNode内存
1)Hadoop2.x系列,配置NameNode默认2000m
2)Hadoop3.x系列,配置NameNode内存是动态分配的
NameNode内存最小值1G,每增加100万个文件block,增加1G内存。
1.2.6 纠删码原理
CPU资源换取存储空间。
HDFS默认情况下,一个文件有3个副本,这样提高了数据的可靠性,但也带来了2倍的冗余开销。Hadoop3.x引入了纠删码,采用计算的方式,可以节省约50%左右的存储空间。
1.2.7 异构存储(冷热数据分离)
期望经常使用的数据存储在固态硬盘或者内存镜像硬盘;不经常使用的历史数据存储在老旧的破旧硬盘。
1.2.8 Shuffle及优化
1.2.9 Yarn工作机制
1.2.10 Yarn调度器
1)Hadoop调度器重要分为三类
FIFO 、Capacity Scheduler(容量调度器)和Fair Sceduler(公平调度器)。
Apache默认的资源调度器是容量调度器。
CDH默认的资源调度器是公平调度器。
2)区别
FIFO调度器:支持单队列 、先进先出 生产环境不会用。
容量调度器:支持多队列。队列资源分配,优先选择资源占用率最低的队列分配资源;作业资源分配,按照作业的优先级和提交时间顺序分配资源;容器资源分配,本地原则(同一节点/同一机架/不同节点不同机架)。
公平调度器:支持多队列,保证每个任务公平享有队列资源。资源不够时可以按照缺额分配。
大厂:如果对并发度要求比较高,选择公平,要求服务器性能必须OK。
中小公司,集群服务器资源不太充裕选择容量。
4)在生产环境怎么创建队列?
(1)调度器默认就1个default队列,不能满足生产要求。
(2)按照部门:业务部门1、业务部门2。
(3)按照业务模块:登录注册、购物车、下单。
5)创建多队列的好处?
(1)因为担心员工不小心,写递归死循环代码,把所有资源全部耗尽。
(2)实现任务的降级使用,特殊时期保证重要的任务队列资源充足。
业务部门1(重要)=》业务部门2(比较重要)=》下单(一般)=》购物车(一般)=》登录注册(次要)
1.2.11 HDFS块大小
1)块大小
1.x 64m
2.x 3.x 128m
本地 32m
企业 128m 256m 512m
2)块大小决定因素
磁盘读写速度
普通的机械硬盘 100m/s => 128m
固态硬盘普通的 300m/s => 256m
内存镜像 500-600m/s => 512m
1.2.12 Hadoop脑裂原因及解决办法?
1)出现脑裂的原因
Leader出现故障,系统开始改朝换代,当Follower完成全部工作并且成为Leader后,原Leader又复活了(它的故障可能是暂时断开或系统暂时变慢,不能及时响应,但其NameNode进程还在),并且由于某种原因它对应的ZKFC并没有把它设置为Standby,所以原Leader还认为自己是Leader,客户端向它发出的请求仍会响应,于是脑裂就发生了。
2)Hadoop通常不会出现脑裂。
如果出现脑裂,意味着多个Namenode数据不一致,此时只能选择保留其中一个的数据。例如:现在有三台Namenode,分别为nn1、nn2、nn3,出现脑裂,想要保留nn1的数据,步骤为:
(1)关闭nn2和nn3
(2)在nn2和nn3节点重新执行数据同步命令:hdfs namenode -bootstrapStandby
(3)重新启动nn2和nn3