[Hadoop]万字长文Hadoop相关优化和问题排查总结

写文章的背景

最近面试了一家公司,大数据平台研发的。面试的内容主要是运维和运维开发工作,排查项目中的问题点,目的是提高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 如何实现,关键技术难题是什么?

  1. 如何保持主和备NameNode的状态同步,并让Standby在Active挂掉后迅速提供服务,namenode启动比较耗时,包括加载fsimage和editlog(获取file to block信息),处理所有datanode第一次blockreport(获取block to datanode信息),保持NN的状态同步,需要这两部分信息同步。

  2. 脑裂(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的状态。
  1. NameNode切换对外透明,主Namenode切换到另外一台机器时,不应该导致正在连接的客户端失败,主要包括Client,Datanode与NameNode的链接。

namenode优化

  1. 定期检查namenode日志并了解日志中可能出现的问题。
  2. 对namenode进行内存优化,将资源分配给namenode节点,提高namenode的性能。
  3. 合理调整namenode的计算资源,以减少系统的延迟。
  4. 合理调整namenode的数据块大小,使数据块的大小能够满足存储的要求。
  5. 合理调整namenode的缓存大小,以改善系统的性能。
  6. 合理调整namenode的同步设置,以减少系统的延迟。
  7. 将namenode的安全设置更新为最新版本,以确保namenode的安全性。
  8. 定期备份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 的优化,可以从以下几个方面入手:

  1. 资源管理器配置调整:通过调整资源管理器参数来优化 YARN 的性能。例如,可以设置最大内存、最大 CPU使用率等。
    2.容器预启动:YARN 支持在应用程序提交之前预先启动一定数量的容器,以加速应用程序的启动时间。
  2. 使用本地化和数据本地性:通过优化数据本地性,可以减少网络传输的开销。例如,可以将作业分配到与数据源相同机架上的节点上运行,或者使用 HDFS 缓存来提高数据访问效率。
  3. 任务并发度调整:可以根据集群资源和任务类型等因素来适当调整任务并发度,以充分利用集群资源,并避免过度抢占资源导致的性能下降。
  4. 使用预留内存:为子避免由于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 占用率进行排序。
具体操作如下:

  1. 打开终端窗口,输入top命令后回车,即可显示当前系统的进程情況。
    2.按下键盘上的P键,可以按照 CPU 占用率降序排列进程列表,这样就可以快速找到占用CPU较高的进程。
  2. 如果需要查看某个特定进程的 CPU 占用情况,可以根据进程的 PID 进行过滤。按下键盘上的F键,然后选择“PID”,输入要查看的进程的 PID 后,即可只显示该进程的CPU 占用情況。
  3. 在top界面下,可以使用h、?或者H键查看帮助信息,了解更多可用的命令和选项。
    注意:top 命令默认是实时刷新的,如果需要指定刷新周期,可以使用-d选项来设置。例如,top-d 5 表示每隔5 秒钟刷新一次。

hdfs查询慢的原因

HDFS 查询慢的原因可能有很多,以下是一些常见的原因:

  1. 数据规模过大:如果查询的数据量非常大,可能会导致查询时需要大量时间来扫描数据块和进行网络传输,从而导致查询变慢。
    2.块大小设置不合理:如果块大小设置过小,可能会导致数据块数量过多,增加了查询的开销;而如果块大小设置过大,则可能会导致数据块间的网络传输时间过长。
  2. 访问热点数据节点较远:如果访问的热点数据所在的节点距离查询节点较远,可能会导致查询的网络传输延迟较大,从而导致查询变慢。
  3. 集群资源不足:如果集群中的资源不足,可能会导致任务之间相互竞争资源,从而导致查询性能下降。
  4. 硬件故障:如果节点硬件出现故障,例如磁盘损坏、网络断连等,可能会影响查询的执行效率。

解决这些问题的方法可能包括:

  1. 优化查询语句:根据查询的需求和数据特征,优化查询语句,减少数据扫描范围。
  2. 调整块大小:根据实际情況调整 HDFS 的块大小,以达到最佳的查询性能。
  3. 数据本地性优化:使用 HDFS 缓存或将作业分配到与数据源相同机架上的节点上运行,以提高数据访问效率。
  4. 增加集群资源:通过增加节点或者调整配置来增加集群资源,从而提高查询性能。
  5. 定期维护硬件:对于经常出现硬件故障的节点,可以考虑及时维护或更换,以保证节点的正常运行。
    总之,要解决 HDFS 查询慢的问题,需要仔细分析并找到根本原因,然后采取相应的措施来解决问题。

怎样判断是否是数据倾斜

在大数据处理中,数据倾斜是指某个或某些任务所处理的数据量远远大于其他任务的情況。判断数据倾斜可以从以下几个方面入手:

  1. 任务执行时间不均衡:如果同一批作业中有部分任务运行时间明显高于其他任务,则可能存在数据倾斜的情況。
    2.任务进度不均衡:如果同一批作业中有部分任务完成进度远远落后于其他任务,则也可能存在数据倾斜的情况。
  2. 记录数不均衡:如果同一批数据集中某些记录被访问的频率明显高于其他记录,则可能存在数据倾斜的情況。
  3. 数据分布不均衡:如果同一分区内的数据量远远大于其他分区,则可能存在数据倾斜的情况。
  4. 运行日志异常:如果作业的运行日志中出现了大量的错误、超时、重试等异常信息,则可能存在数据倾斜的情况。
    如果出现以上情况,就需要进一步排查是否存在数据倾斜问题。常用的排查方法包括:
  5. 查看作业日志:根据作业的日志信息,找到运行时间长的任务,并检查它们处理的数据是否异常。
  6. 统计数据分布:通过Hive 或 Spark 等计算框架提供的统计功能,查看数据分布是否均衡。
  7. 分析执行计划:通过分析作业的执行计划找到处理数据的热点任务,并考虑采取合适的优化措施来解决数据倾斜问题。
  8. 增加分区:对于数据分布不均衡的情况,可以尝试增加分区,以达到更好的负载均衡效果.
    总之,要判断数据倾斜,需要综合考虑多种因素,并根据实际情况采取相应的优化措施,以提高作业的性能和稳定性。

集群重启任务自动重启

集群重启任务自动重启的实现方式可以通过在集群管理系统中设置自动重启策略,具体包括以下几个步骤:
1.在集群管理系统中创建一个自动重启策略。
2. 将需要自动重启的任务添加到该重启策略中。
3. 配置任务自动重启的规则,如自动重启次数、时间间隔等。
4. 启用自动重启策略,使其生效。
这样配置后,当集群重启时,自动重启策略会自动将任务重新启动,确保任务的连续性和稳定性。

hadoop宕机

  1. 硬件故障:Hadoop集群的硬件是由许多节点组成的,它们之间的网络连接也非常重要。如果某一台节点的硬件出现故障,那么整个Hadoop集群将会宕机。
  2. 软件故障:Hadoop的软件也可能出现故障,这可能会导致整个集群宕机。例如,如果NameNode或DataNode出现故障,那么整个集群就会宕机。
  3. 网络故障:Hadoop集群上的所有节点都需要连接到网络,如果网络出现故障,那么整个集群也会宕机。
  4. 用户错误:用户可能会误操作Hadoop集群,比如删除重要的配置文件,这样就会导致集群宕机。
  5. 如果MR造成系统宕机。此时要控制Yarn同时运行的任务数,和每个任务申请的最大内存。调整参数:yarn.scheduler.maximum-allocation-mb(单个任务可申请的最多物理内存量,默认是8192MB)
  6. 如果写入文件过快造成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 的源码主要包括以下几个部分:

  1. Hadoop Common:这是Hadoop 的基础核心库,提供了文件系统、网络通信、安全性等基本组件的实现。Hadoop Common 中包括了一些公共的模块和工具,如io、ipc、security、util 等。
  2. HDFS: Hadoop 分布式文件系统 (HDFS)是Hadoop 的存储组件,负责文件的存储和管理。HDFS 的源代码包括了NameNode, DataNode, BlockScanner,Client、Server、Metrics 等模块。
  3. YARN: YARN (Yet Another ResourceNegotiator)是Hadoop 的资源管理器,负责调度集群中的任务,并向应用程序提供所需的资源。YARN 的源代码包括ResourceManager, NodeManager,ApplicationMaster, Containers, Metrics等模块。
  4. MapReduce : MapReduce 是Hadoop的
    计算引擎,用于处理大规模数据集。MapReduce 的源代码包括了 JobTracker、TaskTracker、Task、 JobConf、JobSubmitter 等模块。
  5. Tools: Hadoop 还提供了一些命令行工具。

大数据组件的异常定位方法

大数据组件异常定位可以通过以下几个步骤来实现:

  1. 查看日志文件:在出现异常后,首先要查看该组件的日志文件,了解异常情況的具体信息。通常情况下,日志文件中会记录异常信息、错误代码等相关信息。
  2. 分析异常原因:根据日志文件中的信息来分析异常原因,确定是组件内部逻辑问题还是外部环境问题导致的异常。
    3.验证输入和输出:如果异常是由于输入或输出数据不正确导致的,需要验证输入和输出数据是否合法。可以通过打印关键数据、调试代码等方式来进行验证。
  3. 进一步调试:如果以上方法无法解决问题,需要进一步调试代码。可以使用集成开发环境(IDE)或者调试工具来进行调试,并设置断点来观察代码执行情況。
  4. 参考文档和社区:如果以上方法仍然无法解決问题,可以参考相关组件的官方文档或者社区,寻求其他开发者的帮助。
    总之,对于大数据组件的昇常,需要结合日志文件和代码进行综合分析,找到异常的根本原因,并采取相应的措施来解決问题。

HDFS的二次开发

可以通过以下几个步骤来实现:

  1. 确定需求和目标:在进行HDFS的二次开发前,需要明确自己的需求和目标。例如,需要扩展HDFS的功能、优化性能等。
  2. 熟悉Hadoop生态圈:HDFS是Hadoop生态圈中的一个组件,需要熟悉其基本架构、API接口等内容,以便于进行二次开发。
  3. 编写代码逻辑:根据需求和目标,编写相应的代码逻辑。可以使用Java语言编写代码,建议参考官方文档和API接口进行开发。
  4. 测试和调试:完成代码编写后,需要进行测试和调试。可以使用本地模式或者集群模式进行测试,并检查代码逻辑是否正确。
  5. 部署和运行:完成测试和调试后,将代码部署到实际环境中并运行。可以使用Hadoop的CLI命令行工具或者IDE插件来进行部署和运行。

常见的HDFS二次开发内容包括:

  • 自定义输入输出格式
  • 扩展HDFS的数据访问方式
  • 实现自定义块分配策略
  • 压缩/解压缩数据
  • 实现文件访问权限控制等

总之,HDFS二次开发需要熟悉Hadoop生态圈和API接口,并根据需求和目标编写相应的代码逻辑,最终进行测试、调试、部署和运行。

面试官问我的问题:hdfs同步几个副本算写入成功

我当时回答的是写入3个(默认副本数为3的情况下)
他笑了笑说一个(当时感觉被嫌弃了哈哈)。。。emmm 我记得也是达到副本个数才算成功
在这里插入图片描述

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spark和Hadoop实验总结报告 一、实验背景 本次实验是为了了解分布式系统中的大数据处理工具,主要学习Apache Spark和Hadoop两个分布式大数据处理工具的使用和比较。 二、实验目的 1. 了解Apache Spark和Hadoop大数据处理框架的基本原理和架构; 2. 学习使用Spark和Hadoop处理大规模数据; 3. 掌握Spark和Hadoop的优缺点比较。 三、实验内容 1. 安装配置Hadoop和Spark; 2. 学习Hadoop和Spark的基本概念和使用方法; 3. 使用Hadoop和Spark进行数据处理; 4. 分析比较Hadoop和Spark的优缺点。 四、实验步骤 1. 安装配置Hadoop和Spark 我采用的是在Ubuntu 18.04系统下使用wget工具下载并解压Hadoop、Spark等软件包进行安装配置。安装配置的过程中主要遇到了如下几个问题: (1) Hadoop配置件修改:Hadoop的配置件许多,操作起来较为繁琐,需要仔细阅读并修改配置件信息。 (2) Spark的环境变量配置:Spark需要在bashrc件做全局环境变量的配置。我遇到过Spark安装完成后,hadoop-daemon.sh start namenode启动失败的问题,其中还涉及到了Java的配置问题。最后通过重启Ubuntu系统和再次配置后解决。 2. 学习Hadoop和Spark基本概念和使用方法 Hadoop和Spark都是分布式大数据处理的工具。Hadoop分为两个子项目:HDFS和MapReduce,其中HDFS是分布式件系统,MapReduce是分布式计算框架;而Spark则是一种快速、通用的集群计算系统,可以支持内存计算,对于迭代计算模型有较好的支持。 3. 使用Hadoop和Spark进行数据处理 我采用了两个较基础的数据处理算法: (1) WordCount算法:统计给定本中每个单词出现的次数。这是大数据处理领域中最常用的算法之一,也是Hadoop的HelloWorld。 (2) 温度计算算法:使用气象站收集的数据计算出每个月的平均气温。 通过这两个算法,我掌握了Hadoop和Spark的数据处理流程、API接口和调试方法。数据处理过程中我的主要工作是对Hadoop和Spark处理结果的正确性和可读性进行验证和评估。 4. 分析比较Hadoop和Spark的优缺点 (1) 简便性方面:Hadoop的安装配置过程较为繁琐,安装配置过程中遇到的问题也比较多,需要仔细阅读档才能进行操作。相比之下,Spark的安装配置过程较为简单,同时也成为了大数据处理工具中的一种主流工具之一。 (2) 易用性方面:Hadoop的编写代码和编译打包需要耗费一定的时间,查错也比较困难,而Spark的交互式编程可以更直观便捷地进行数据操作。 (3) 性能方面:Spark的RDD(弹性分布式数据集)是一个高速缓存,可以将数据缓存到内存中,从而快速响应数据操作请求。而Hadoop的分布式计算则需要中间件,处理较为频繁。因此在对大规模数据进行处理的时候,Spark具有更快的计算速度。 五、实验感想 本次实验,我对大数据处理这一领域有了更深入的了解。Hadoop和Spark都是本领域中非常重要的工具,在学习的过程中,我不仅提升了大数据处理能力,也加深了对分布式计算的理解,对未来的学习和工作都有一定的借鉴意义。 总之,本次实验内容丰富,操作繁琐,不过从中我也收获颇丰,掌握了Spark和Hadoop数据处理的基本操作和API接口,了解了Hadoop和Spark的优缺点。通过实验,我进一步加深了对专业知识的理解,同时也获得了实践经验,对以后的学习和研究具有重要意义。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值