【Hadoop生产调优】之NameNode内存配置
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了【Hadoop生产调优】之NameNode内存配置相关的知识,希望对你有一定的参考价值。
参考技术A Hadoop中的Namenode所在的服务器,根据配置不同,内存一般为128G,Namenode记录一个文件块大致需要150B,通过下面的计算可知,Namenode为128G内存的Hadoop集群最多可以保存9.1亿个文件。刨除Linux系统、应用、任务等,实际上namenode不可能独占所有的内存资源,所以我们在生产环境,需要设置namenode的内存值。
在 hadoop-env.sh 文件中,通过 HADOOP_NAMENODE_OTPS=-Xmx3072m ,我们可以配置namenode所占的内存资源。
经上面配置后,我们来验证一下配置是否生效,执行 jps 命令,查看当前java进程。
在执行 jmap -heap [进程ID] 命令,分别查看datanode和namenode的内存值。
[Hadoop]万字长文Hadoop相关优化和问题排查总结
目录
- 写文章的背景
- namenode频繁切换的原因
- namenode HA 如何实现,关键技术难题是什么?
- namenode优化
- namenode内存生产配置
- NameNode心跳并发配置
- 开启回收站配置
- datanode的优化
- hdfs调优
- hadoop的优化
- YARN 的优化
- HDFS调优的基本原则
- HDFS调优的常用参数
- 排查哪个任务的cpu占用高
- hdfs查询慢的原因
- 怎样判断是否是数据倾斜
- 集群重启任务自动重启
- hadoop宕机
- Hadoop解决数据倾斜方法
- hdfs多目录
- HDFS 的源码主要包括
- 大数据组件的异常定位方法
- HDFS的二次开发
- 面试官问我的问题:hdfs同步几个副本算写入成功
写文章的背景
最近面试了一家公司,大数据平台研发的。面试的内容主要是运维和运维开发工作,排查项目中的问题点,目的是提高hadoop集群的性能,我把面试题总结了一下。虽然开发工程不会全面的遇到下面的问题,就做个总结,分享一下,供个人的知识部分吧。
namenode频繁切换的原因
原因可能如下:
1.负载过重:在集群中的任务过多,可能会导致任务的负载过重,并导致频繁切换。
2。内存不足:当集群中处理的数据量多大,可能会导致内存不足,并导致namenode频繁切换。
3.垃圾回收:如果jvm的回收频率过高,也可能导致namenode频繁切换。
4.网络问题:如果namenode和datanode之间的网络连接出现问题,可能会导致namenode的频繁切换。
解决办法
1.增加集群资源:通过增加节点或调整配置来增加集群资源,从而降低负载;
2.调整jvm参数:可以尝试减少垃圾回收的频率,提高namenode性能;
3.检查网络连接:检查是否稳定,如ping操作
案例:在短时间内创建或删除了大量文件,引发了active NN节点频繁更新本地内存的数据结构,这会导致RPC的处理时长增加,CallQueue中的rpcCall堆积(严重的情况下会撑满CallQueue),从而导致active状态的NN长时间不响应ZKFC的HealthMonitor子进程,于是ActiveStandbyElector就会断开与ZooKeeper的连接,从而释放锁,于是master2节点上的ActiveStandbyElector就会从zookeeper争抢锁,抢到锁之后的NN就会从standby转换成active状态。
案例解决办法:先调高NameNode的参数ha.health-monitor.rpc-timeout.ms值,该参数位于core-site.xml文件中,此参数是指ZKFC的健康检查超时的时长,默认值45000ms,现已修改为120000ms(2分钟)。改完NN参数后,需要重启相关的NameNode。另外,如果内存足够,可以顺便把两个NameNode的heap size适当调大一些。
参考:案例参考地址
namenode HA 如何实现,关键技术难题是什么?
-
如何保持主和备NameNode的状态同步,并让Standby在Active挂掉后迅速提供服务,namenode启动比较耗时,包括加载fsimage和editlog(获取file to block信息),处理所有datanode第一次blockreport(获取block to datanode信息),保持NN的状态同步,需要这两部分信息同步。
-
脑裂(split-brain),指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏。
ZKFC的设计
1. FailoverController实现下述几个功能
(a) 监控NN的健康状态
(b) 向ZK定期发送心跳,使自己可以被选举。
(c) 当自己被ZK选为主时,active FailoverController通过RPC调用使相应的NN转换为active。
2. 为什么要作为一个deamon进程从NN分离出来
(1) 防止因为NN的GC失败导致心跳受影响。
(2) FailoverController功能的代码应该和应用的分离,提高的容错性。
(3) 使得主备选举成为可插拔式的插件。
3. FailoverController主要包括三个组件,
(1) HealthMonitor 监控NameNode是否处于unavailable或unhealthy状态。当前通过RPC调用NN相应的方法完成。
(2) ActiveStandbyElector 管理和监控自己在ZK中的状态。
(3) ZKFailoverController 它订阅HealthMonitor 和ActiveStandbyElector 的事件,并管理NameNode的状态。
- NameNode切换对外透明,主Namenode切换到另外一台机器时,不应该导致正在连接的客户端失败,主要包括Client,Datanode与NameNode的链接。
namenode优化
- 定期检查namenode日志并了解日志中可能出现的问题。
- 对namenode进行内存优化,将资源分配给namenode节点,提高namenode的性能。
- 合理调整namenode的计算资源,以减少系统的延迟。
- 合理调整namenode的数据块大小,使数据块的大小能够满足存储的要求。
- 合理调整namenode的缓存大小,以改善系统的性能。
- 合理调整namenode的同步设置,以减少系统的延迟。
- 将namenode的安全设置更新为最新版本,以确保namenode的安全性。
- 定期备份namenode以防止意外数据丢失。
namenode内存生产配置
1)NameNode内存计算
每个文件块大概占用150byte,一台服务器128G内存为例,能存储多少文件块呢?
128 * 1024 * 1024 * 1024 / 150Byte ≈ 9.1亿
G MB KB Byte
2)Hadoop2.x系列,配置NameNode内存
NameNode内存默认2000m,如果服务器内存4G,NameNode内存可以配置3g。在hadoop-env.sh文件中配置如下。
HADOOP_NAMENODE_OPTS=-Xmx3072m
3)Hadoop3.x系列,配置NameNode内存
(1)hadoop-env.sh中描述Hadoop的内存是动态分配的
# The maximum amount of heap to use (Java -Xmx). If no unit
# is provided, it will be converted to MB. Daemons will
# prefer any Xmx setting in their respective _OPT variable.
# There is no default; the JVM will autoscale based upon machine
# memory size.
# export HADOOP_HEAPSIZE_MAX=
# The minimum amount of heap to use (Java -Xms). If no unit
# is provided, it will be converted to MB. Daemons will
# prefer any Xms setting in their respective _OPT variable.
# There is no default; the JVM will autoscale based upon machine
# memory size.
# export HADOOP_HEAPSIZE_MIN=
HADOOP_NAMENODE_OPTS=-Xmx102400m
(2)查看NameNode占用内存
[hadoop102 ~]$ jps
3088 NodeManager
2611 NameNode
3271 JobHistoryServer
2744 DataNode
3579 Jps
[hadoop102 ~]$ jmap -heap 2611
Heap Configuration:
MaxHeapSize = 1031798784 (984.0MB)
(3)查看DataNode占用内存
jmap -heap 2744
查看发现hadoop102上的NameNode和DataNode占用内存都是自动分配的,且相等。不是很合理。
具体修改:
hadoop-env.sh
export HDFS_NAMENODE_OPTS="-Dhadoop.security.logger=INFO,RFAS -Xmx1024m"
export HDFS_DATANODE_OPTS="-Dhadoop.security.logger=ERROR,RFAS -Xmx1024m"
NameNode心跳并发配置
1)hdfs-site.xml
The number of Namenode RPC server threads that listen to requests from clients. If dfs.namenode.servicerpc-address is not configured then Namenode RPC server threads listen to requests from all nodes.
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。
对于大集群或者有大量客户端的集群来说,通常需要增大该参数。默认值是10。
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>
企业经验:dfs.namenode.handler.count=20×〖log〗_e^(Cluster Size),比如集群规模(DataNode台数)为3台时,此参数设置为21。可通过简单的python代码计算该值,代码如下。
[hadoop102 ~]$ sudo yum install -y python
[hadoop102 ~]$ python
Python 2.7.5 (default, Apr 11 2018, 07:36:10)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import math
>>> print int(20*math.log(3))
21
>>> quit()
开启回收站配置
开启回收站功能,可以将删除的文件在不超时的情况下,恢复原数据,起到防止误删除、备份等作用。
1)回收站工作机制
2)开启回收站功能参数说明
(1)默认值fs.trash.interval = 0,0表示禁用回收站;其他值表示设置文件的存活时间。
(2)默认值fs.trash.checkpoint.interval = 0,检查回收站的间隔时间。如果该值为0,则该值设置和fs.trash.interval的参数值相等。
(3)要求fs.trash.checkpoint.interval <= fs.trash.interval。
3)启用回收站
修改core-site.xml,配置垃圾回收时间为1分钟。
<property>
<name>fs.trash.interval</name>
<value>1</value>
</property>
4)查看回收站
回收站目录在HDFS集群中的路径:/user/root/.Trash/….
5)注意:通过网页上直接删除的文件也不会走回收站。
6)通过程序删除的文件不会经过回收站,需要调用moveToTrash()才进入回收站
Trash trash = New Trash(conf);
trash.moveToTrash(path);
7)只有在命令行利用hadoop fs -rm命令删除的文件才会走回收站。
[hadoop102 hadoop-3.1.3]$ hadoop fs -rm -r /user/root/input
2021-07-14 16:13:42,643 INFO fs.TrashPolicyDefault: Moved: 'hdfs://hadoop102:9820/user/atguigu/input' to trash at: hdfs://hadoop102:9820/user/atguigu/.Trash/Current/user/atguigu/input
8)恢复回收站数据
[hadoop102 hadoop-3.1.3]$ hadoop fs -mv
/user/atguigu/.Trash/Current/user/atguigu/input /user/atguigu/input
datanode的优化
1、提高内存配置:提高内存可以降低磁盘的访问次数,缩短IO等待的时间,提高系统的IO处理能力,提高数据节点的性能。
2、增加磁盘数量或更换更快的存储设备:增加磁盘数量可以将数据分散到不同的磁盘上,减少I/O竞争,提高磁盘的吞吐量;更换更快的存储设备可以提高数据节点的性能。
3、修改配置文件:针对datanode空间不足的情况,可以调整dfs.datanode.du.reserved和dfs.datanode.max.xcievers配置,以保证文件系统的稳定性,提高数据节点的性能。
4、调整block size:调整block size可以提高磁盘I/O的效率,提高数据节点的性能。
5、禁用磁盘预读:禁用磁盘预读可以减少磁盘I/O的次数,提高数据节点的性能。
hdfs调优
1、优化NameNode
(1)增大NameNode的内存
由于大量的文件操作,NameNode的内存压力会变得很大,要提高NameNode的性能,首先要考虑的是增大NameNode的内存。可以通过更改hadoop-env.sh文件中的HADOOP_NAMENODE_OPTS参数来增大NameNode的内存。
(2)增大NameNode的存储空间
为了支持更多的文件操作,可以考虑增加NameNode的存储空间,这样可以提高hdfs的性能。可以通过更改hdfs-site.xml文件中的dfs.name.dir参数来增加NameNode的存储空间。
2、优化DataNode
(1)增大DataNode的内存
DataNode的内存压力也会很大,可以通过更改hadoop-env.sh文件中的HADOOP_DATANODE_OPTS参数来增大DataNode的内存。
(2)增大DataNode的存储空间
为了支持更多的数据存储,可以考虑增加DataNode的存储空间,这样可以提高hdfs的性能。可以通过更改hdfs-site.xml文件中的dfs.data.dir参数来增加DataNode的存储空间。
(3)增加DataNode的数量
为了提高hdfs的性能,可以考虑增加DataNode的数量,这样可以提高文件存储和访问的性能。可以通过更改hdfs-site.xml文件中的dfs.datanode.data.dir参数来增加DataNode的数量。
3、优化文件系统
(1)增大文件系统的块大小
为了提高文件的访问性能,可以考虑增大文件系统的块大小,这样可以减少文件存储和访问的次数,提高hdfs的性能。可以通过更改hdfs-site.xml文件中的dfs.block.size参数来增大文件系统的块大小。
(2)减少文件系统
hadoop的优化
1.块大小调整:hdfs默认块大小是128mb,根据不同应用的数据访问模式和节点硬件特性等因素,可能需要调整块大小。如果文件的访问模式以顺序读取为主,那么增大块大小可以提高I/O吞吐量;如果文件的访问模式以读取为主,那么缩小块大小可以减少数据的读取延迟。
2.副本数的设置:副本数指的是每个数据块在hdfs中存储的备份数,默认为3.可以根据数据的重要性,节点的可靠性等因素来设置副本数。
3.数据压缩:对于一些数据类型可以使用压缩技术,如snappy,lzo等。在保证数据可读性的前提下,通过压缩可以减少磁盘空间占用和网络传输带宽。
4.预热机制:通过预先将热点数据放置到内存中,可以避免冷启动时数据加载导致的性能问题。这可以通过使用Hadoop cache 或者memcached等工具实现。
5. 节点管理优化:包括优化节点的磁盘和内存配置,以及定期进行节点健康度检查和数据块均衡等。
6. 使用SSD:如果条件允许,可以将部分数据或元数据存储在 SSD上,以提高 HDFS的访问速度。
YARN 的优化
对于 YARN 的优化,可以从以下几个方面入手:
- 资源管理器配置调整:通过调整资源管理器参数来优化 YARN 的性能。例如,可以设置最大内存、最大 CPU使用率等。
2.容器预启动:YARN 支持在应用程序提交之前预先启动一定数量的容器,以加速应用程序的启动时间。 - 使用本地化和数据本地性:通过优化数据本地性,可以减少网络传输的开销。例如,可以将作业分配到与数据源相同机架上的节点上运行,或者使用 HDFS 缓存来提高数据访问效率。
- 任务并发度调整:可以根据集群资源和任务类型等因素来适当调整任务并发度,以充分利用集群资源,并避免过度抢占资源导致的性能下降。
- 使用预留内存:为子避免由于JM垃圾回收等造成的应用程序暂停,可以设置 YARN预留一定量的内存,使应用程序可用内存更加稳定。
6.节点监控和故障转移:使用节点监控工具(如Nagios)和故障转移机制,可以及时检测节点故障并快速转移任务。
HDFS调优的基本原则
(1)根据HDFS的应用场景调整HDFS配置参数,使其可以满足应用场景的要求;
(2)调优时要注意参数之间的依赖性关系,避免出现调优参数之间的冲突;
(3)调优时需要考虑硬件环境,例如网络带宽、服务器内存、CPU等;
(4)尽可能少的调整HDFS配置参数,相同参数可以使用相同的值;
(5)不要过度调优,调优以后应该全面检查系统的稳定性和性能,确认是否达到调优的目标。
HDFS调优的常用参数
(1)dfs.namenode.handler.count:HDFS的NameNode处理请求的线程数,默认是10;
(2)dfs.namenode.max.objects:HDFS的NameNode在内存中存储的文件最多数量,默认是10 000;
(3)dfs.namenode.replication.min:HDFS的NameNode最小副本数,默认是1;
(4)dfs.datanode.max.transfer.threads:HDFS的DataNode的最大传输线程数,默认是40;
(5)dfs.datanode.socket.write.timeout:HDFS的DataNode写Socket超时时间,单位为毫秒,默认是180000;
(6)dfs.blocksize:HDFS的块大小,单位为字节,默认是67108864;
(7)dfs.namenode.safemode.threshold-pct:HDFS的NameNode安全模式的阈值,单位为百分比,默认是0.999;
(8)dfs.namenode.safemode.extension:HDFS的NameNode安全模式的延长时间,单位为秒,默认是30000;
(9)dfs.namenode.accesstime.precision
排查哪个任务的cpu占用高
在Linux 系统中,可以通过 top 命令查看当前系统的进程情况,并按照 CPU 占用率进行排序。
具体操作如下:
- 打开终端窗口,输入top命令后回车,即可显示当前系统的进程情況。
2.按下键盘上的P键,可以按照 CPU 占用率降序排列进程列表,这样就可以快速找到占用CPU较高的进程。 - 如果需要查看某个特定进程的 CPU 占用情况,可以根据进程的 PID 进行过滤。按下键盘上的F键,然后选择“PID”,输入要查看的进程的 PID 后,即可只显示该进程的CPU 占用情況。
- 在top界面下,可以使用h、?或者H键查看帮助信息,了解更多可用的命令和选项。
注意:top 命令默认是实时刷新的,如果需要指定刷新周期,可以使用-d选项来设置。例如,top-d 5 表示每隔5 秒钟刷新一次。
hdfs查询慢的原因
HDFS 查询慢的原因可能有很多,以下是一些常见的原因:
- 数据规模过大:如果查询的数据量非常大,可能会导致查询时需要大量时间来扫描数据块和进行网络传输,从而导致查询变慢。
2.块大小设置不合理:如果块大小设置过小,可能会导致数据块数量过多,增加了查询的开销;而如果块大小设置过大,则可能会导致数据块间的网络传输时间过长。 - 访问热点数据节点较远:如果访问的热点数据所在的节点距离查询节点较远,可能会导致查询的网络传输延迟较大,从而导致查询变慢。
- 集群资源不足:如果集群中的资源不足,可能会导致任务之间相互竞争资源,从而导致查询性能下降。
- 硬件故障:如果节点硬件出现故障,例如磁盘损坏、网络断连等,可能会影响查询的执行效率。
解决这些问题的方法可能包括:
- 优化查询语句:根据查询的需求和数据特征,优化查询语句,减少数据扫描范围。
- 调整块大小:根据实际情況调整 HDFS 的块大小,以达到最佳的查询性能。
- 数据本地性优化:使用 HDFS 缓存或将作业分配到与数据源相同机架上的节点上运行,以提高数据访问效率。
- 增加集群资源:通过增加节点或者调整配置来增加集群资源,从而提高查询性能。
- 定期维护硬件:对于经常出现硬件故障的节点,可以考虑及时维护或更换,以保证节点的正常运行。
总之,要解决 HDFS 查询慢的问题,需要仔细分析并找到根本原因,然后采取相应的措施来解决问题。
怎样判断是否是数据倾斜
在大数据处理中,数据倾斜是指某个或某些任务所处理的数据量远远大于其他任务的情況。判断数据倾斜可以从以下几个方面入手:
- 任务执行时间不均衡:如果同一批作业中有部分任务运行时间明显高于其他任务,则可能存在数据倾斜的情況。
2.任务进度不均衡:如果同一批作业中有部分任务完成进度远远落后于其他任务,则也可能存在数据倾斜的情况。 - 记录数不均衡:如果同一批数据集中某些记录被访问的频率明显高于其他记录,则可能存在数据倾斜的情況。
- 数据分布不均衡:如果同一分区内的数据量远远大于其他分区,则可能存在数据倾斜的情况。
- 运行日志异常:如果作业的运行日志中出现了大量的错误、超时、重试等异常信息,则可能存在数据倾斜的情况。
如果出现以上情况,就需要进一步排查是否存在数据倾斜问题。常用的排查方法包括: - 查看作业日志:根据作业的日志信息,找到运行时间长的任务,并检查它们处理的数据是否异常。
- 统计数据分布:通过Hive 或 Spark 等计算框架提供的统计功能,查看数据分布是否均衡。
- 分析执行计划:通过分析作业的执行计划找到处理数据的热点任务,并考虑采取合适的优化措施来解决数据倾斜问题。
- 增加分区:对于数据分布不均衡的情况,可以尝试增加分区,以达到更好的负载均衡效果.
总之,要判断数据倾斜,需要综合考虑多种因素,并根据实际情况采取相应的优化措施,以提高作业的性能和稳定性。
集群重启任务自动重启
集群重启任务自动重启的实现方式可以通过在集群管理系统中设置自动重启策略,具体包括以下几个步骤:
1.在集群管理系统中创建一个自动重启策略。
2. 将需要自动重启的任务添加到该重启策略中。
3. 配置任务自动重启的规则,如自动重启次数、时间间隔等。
4. 启用自动重启策略,使其生效。
这样配置后,当集群重启时,自动重启策略会自动将任务重新启动,确保任务的连续性和稳定性。
hadoop宕机
- 硬件故障:Hadoop集群的硬件是由许多节点组成的,它们之间的网络连接也非常重要。如果某一台节点的硬件出现故障,那么整个Hadoop集群将会宕机。
- 软件故障:Hadoop的软件也可能出现故障,这可能会导致整个集群宕机。例如,如果NameNode或DataNode出现故障,那么整个集群就会宕机。
- 网络故障:Hadoop集群上的所有节点都需要连接到网络,如果网络出现故障,那么整个集群也会宕机。
- 用户错误:用户可能会误操作Hadoop集群,比如删除重要的配置文件,这样就会导致集群宕机。
- 如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)
- 如果写入文件过快造成NameNode宕机。那么调高Kafka的存储大小,控制从Kafka到HDFS的写入速度。例如,可以调整Flume每批次拉取数据量的大小参数batchsize。
Hadoop解决数据倾斜方法
1)提前在map进行combine,减少传输的数据量
在Mapper加上combiner相当于提前进行reduce,即把一个Mapper中的相同key进行了聚合,减少shuffle过程中传输的数据量,以及Reducer端的计算量。
如果导致数据倾斜的key大量分布在不同的mapper的时候,这种方法就不是很有效了。
2)导致数据倾斜的key 大量分布在不同的mapper
(1)局部聚合加全局聚合。
第一次在map阶段对那些导致了数据倾斜的key 加上1到n的随机前缀,这样本来相同的key 也会被分到多个Reducer中进行局部聚合,数量就会大大降低。
第二次mapreduce,去掉key的随机前缀,进行全局聚合。
思想:二次mr,第一次将key随机散列到不同reducer进行处理达到负载均衡目的。第二次再根据去掉key的随机前缀,按原key进行reduce处理。
这个方法进行两次mapreduce,性能稍差。
(2)增加Reducer,提升并行度
JobConf.setNumReduceTasks(int)
(3)实现自定义分区
根据数据分布情况,自定义散列函数,将key均匀分配到不同Reducer
hdfs多目录
NameNode多目录配置
1)NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性
2)具体配置如下
(1)在hdfs-site.xml文件中添加如下内容
<property>
<name>dfs.namenode.name.dir</name>
<value>file://$hadoop.tmp.dir/dfs/name1,file://$hadoop.tmp.dir/dfs/name2</value>
</property>
注意:因为每台服务器节点的磁盘情况不同,所以这个配置配完之后,可以选择不分发
(2)停止集群,删除三台节点的data和logs中所有数据。
[hadoop102 hadoop-3.1.3]$ rm -rf data/ logs/
[hadoop103 hadoop-3.1.3]$ rm -rf data/ logs/
[hadoop104 hadoop-3.1.3]$ rm -rf data/ logs/
(3)格式化集群并启动。
[hadoop102 hadoop-3.1.3]$ bin/hdfs namenode -format
[hadoop102 hadoop-3.1.3]$ sbin/start-dfs.sh
3)查看结果
[hadoop102 dfs]$ ll
总用量 12
drwx------. 3 root root4096 12月 11 08:03 data
drwxrwxr-x. 3 root root 4096 12月 11 08:03 name1
drwxrwxr-x. 3 root root 4096 12月 11 08:03 name2
检查name1和name2里面的内容,发现一模一样。
DataNode多目录配置
1)DataNode可以配置成多个目录,每个目录存储的数据不一样(数据不是副本)
2)具体配置如下
在hdfs-site.xml文件中添加如下内容
<property>
<name>dfs.datanode.data.dir</name>
<value>file://$hadoop.tmp.dir/dfs/data1,file://$hadoop.tmp.dir/dfs/data2</value>
</property>
3)查看结果
[root @hadoop102 dfs]$ ll
总用量 12
drwx------. 3 root root 4096 4月 4 14:22 data1
drwx------. 3 root root 4096 4月 4 14:22 data2
drwxrwxr-x. 3 root root 4096 12月 11 08:03 name1
drwxrwxr-x. 3 root root 4096 12月 11 08:03 name2
4)向集群上传一个文件,再次观察两个文件夹里面的内容发现不一致(一个有数一个没有)
[root @hadoop102 hadoop-3.1.3]$ hadoop fs -put wcinput/word.txt /
HDFS 的源码主要包括
HDFS 的源码主要包括以下几个部分:
- Hadoop Common:这是Hadoop 的基础核心库,提供了文件系统、网络通信、安全性等基本组件的实现。Hadoop Common 中包括了一些公共的模块和工具,如io、ipc、security、util 等。
- HDFS: Hadoop 分布式文件系统 (HDFS)是Hadoop 的存储组件,负责文件的存储和管理。HDFS 的源代码包括了NameNode, DataNode, BlockScanner,Client、Server、Metrics 等模块。
- YARN: YARN (Yet Another ResourceNegotiator)是Hadoop 的资源管理器,负责调度集群中的任务,并向应用程序提供所需的资源。YARN 的源代码包括ResourceManager, NodeManager,ApplicationMaster, Containers, Metrics等模块。
- MapReduce : MapReduce 是Hadoop的
计算引擎,用于处理大规模数据集。MapReduce 的源代码包括了 JobTracker、TaskTracker、Task、 JobConf、JobSubmitter 等模块。 - Tools: Hadoop 还提供了一些命令行工具。
大数据组件的异常定位方法
大数据组件异常定位可以通过以下几个步骤来实现:
- 查看日志文件:在出现异常后,首先要查看该组件的日志文件,了解异常情況的具体信息。通常情况下,日志文件中会记录异常信息、错误代码等相关信息。
- 分析异常原因:根据日志文件中的信息来分析异常原因,确定是组件内部逻辑问题还是外部环境问题导致的异常。
3.验证输入和输出:如果异常是由于输入或输出数据不正确导致的,需要验证输入和输出数据是否合法。可以通过打印关键数据、调试代码等方式来进行验证。 - 进一步调试:如果以上方法无法解决问题,需要进一步调试代码。可以使用集成开发环境(IDE)或者调试工具来进行调试,并设置断点来观察代码执行情況。
- 参考文档和社区:如果以上方法仍然无法解決问题,可以参考相关组件的官方文档或者社区,寻求其他开发者的帮助。
总之,对于大数据组件的昇常,需要结合日志文件和代码进行综合分析,找到异常的根本原因,并采取相应的措施来解決问题。
HDFS的二次开发
可以通过以下几个步骤来实现:
- 确定需求和目标:在进行HDFS的二次开发前,需要明确自己的需求和目标。例如,需要扩展HDFS的功能、优化性能等。
- 熟悉Hadoop生态圈:HDFS是Hadoop生态圈中的一个组件,需要熟悉其基本架构、API接口等内容,以便于进行二次开发。
- 编写代码逻辑:根据需求和目标,编写相应的代码逻辑。可以使用Java语言编写代码,建议参考官方文档和API接口进行开发。
- 测试和调试:完成代码编写后,需要进行测试和调试。可以使用本地模式或者集群模式进行测试,并检查代码逻辑是否正确。
- 部署和运行:完成测试和调试后,将代码部署到实际环境中并运行。可以使用Hadoop的CLI命令行工具或者IDE插件来进行部署和运行。
常见的HDFS二次开发内容包括:
- 自定义输入输出格式
- 扩展HDFS的数据访问方式
- 实现自定义块分配策略
- 压缩/解压缩数据
- 实现文件访问权限控制等
总之,HDFS二次开发需要熟悉Hadoop生态圈和API接口,并根据需求和目标编写相应的代码逻辑,最终进行测试、调试、部署和运行。
面试官问我的问题:hdfs同步几个副本算写入成功
我当时回答的是写入3个(默认副本数为3的情况下)
他笑了笑说一个(当时感觉被嫌弃了哈哈)。。。emmm 我记得也是达到副本个数才算成功
以上是关于【Hadoop生产调优】之NameNode内存配置的主要内容,如果未能解决你的问题,请参考以下文章