120.Spark大型电商项目-广告点击流量实时统计-实现实时计算程序的HA高可用性

本文介绍如何通过三个步骤设置Spark Streaming的高可用性:配置checkpoint目录以支持容错操作如updateStateByKey;确保Driver程序的高可用性,即使节点故障也能自动重启并继续执行任务;启用WAL预写日志机制,提高数据持久性和可用性。

目录

HA高可用性

1、设置checkpoint目录

2、Driver高可用性

3、实现RDD高可用性:启动WAL预写日志机制


本篇文章记录广告点击流量实时统计-实现实时计算程序的HA高可用性。

HA高可用性

High Availability,如果有些数据丢失,或者节点挂掉,那么不能让你的实时计算程序挂了,必须做一些数据上的冗余副本,保证你的实时计算程序可以7 * 24小时的运转。

通过一整套方案(3个步骤),开启和实现实时计算程序的HA高可用性,保证一些关键数据都有其冗余副本,不至于因为节点挂掉或者其他原因导致数据丢失。

1、设置checkpoint目录

updateStateByKey、window等有状态的操作,自动进行checkpoint,必须设置checkpoint目录。

checkpoint目录:容错的文件系统的目录,比如说,常用的是HDFS

SparkStreaming.checkpoint("hdfs://Master:9090/checkpoint")

jssc.checkpoint("hdfs://Master:9000/streaming_checkpoint");

设置完这个基本的checkpoint目录之后,有些会自动进行checkpoint操作的DStream,就实现了HA高可用性;checkpoint,相当于是会把数据保留一份在容错的文件系统中,一旦内存中的数据丢失掉;那么就可以直接从文件系统中读取数据;不需要重新进行计算

2、Driver高可用性

第一次在创建和启动StreamingContext的时候,那么将持续不断地将实时计算程序的元数据(比如说,有些dstream或者job执行到了哪个步骤),如果后面,不幸,因为某些原因导致driver节点挂掉了,那么可以让spark集群自动重启driver,然后继续运行时候计算程序,并且是接着之前的作业继续执行,没有中断,没有数据丢失

第一次在创建和启动StreamingContext的时候,将元数据写入容错的文件系统(比如hdfs);spark-submit脚本中加一些参数;保证在driver挂掉之后,spark集群可以自己将driver重新启动起来;而且driver在启动的时候,不会重新创建一个streaming context,而是从容错文件系统(比如hdfs)中读取之前的元数据信息,包括job的执行进度,继续接着之前的进度,继续执行。

使用这种机制,就必须使用cluster模式提交,确保driver运行在某个worker上面;但是这种模式不方便我们调试程序,一会儿还要最终测试整个程序的运行,打印不出log;我们这里仅仅是用我们的代码给大家示范一下:

JavaStreamingContextFactory contextFactory = new JavaStreamingContextFactory() {
  @Override 
  public JavaStreamingContext create() {
    JavaStreamingContext jssc = new JavaStreamingContext(...);  
    JavaDStream<String> lines = jssc.socketTextStream(...);     
    jssc.checkpoint(checkpointDirectory);                       
    return jssc;
  }
};

JavaStreamingContext context = JavaStreamingContext.getOrCreate(checkpointDirectory, contextFactory);
context.start();
context.awaitTermination();

spark-submit
--deploy-mode cluster
--supervise

3、实现RDD高可用性:启动WAL预写日志机制

spark streaming,从原理上来说,是通过receiver来进行数据接收的;接收到的数据,会被划分成一个一个的block;block会被组合成一个batch;针对一个batch,会创建一个rdd;启动一个job来执行我们定义的算子操作。

receiver主要接收到数据,那么就会立即将数据写入一份到容错文件系统(比如hdfs)上的checkpoint目录中的,一份写到磁盘文件中去;作为数据的冗余副本。

无论你的程序怎么挂掉,或者是数据丢失,那么数据都不肯能会永久性的丢失;因为肯定有副本。

WAL(Write-Ahead Log)预写日志机制

spark.streaming.receiver.writeAheadLog.enable true

  SparkConf conf = new SparkConf()
              .set("spark.streaming.receiver.writeAheadLog.enable", "true");
Hadoop大数据开发实战(慕课版)》核心考点及解释 一、Hadoop基础核心考点 1. 大数据“5V”特征 - 考点:掌握大数据的5个核心特征及含义。 - 解释:大量(Volume,数据规模达PB/EB/ZB级)、高速性(Velocity,数据增长和处理速度快,低延迟响应)、多样性(Variety,含结构化、半结构化、非结构化数据)、价值(Value,价值密度低但商业价值高)、真实性(Veracity,数据质量和准确性是决策基础)。 2. Hadoop核心组件与版本差异 - 考点:Hadoop 1.0与2.0的核心组件区别,Hadoop生态圈关键组件功能。 - 解释:Hadoop 1.0核心为HDFS(分布式存储)+MapReduce(分布式计算);2.0新增YARN(资源度框架),解决1.0中NameNode和JobTracker单点故障问题。生态圈组件中,ZooKeeper负责分布式协,Hive是数据仓库工具,HBase是分布式数据库,Flume用于日志采集,Sqoop实现数据传输。 3. HDFS架构与原理 - 考点:HDFS的主从架构、数据读写流程、核心角色功能。 - 解释:HDFS采用主从模式,NameNode(主节点)管理命名空间和元数据,DataNode(从节点)存储数据块,SecondaryNameNode定期合并元数据镜像和编辑日志。数据块默认128MB,副本数默认3个;读取流程先从NameNode获取数据块位置,再从DataNode读取;写入流程通过DataNode复制数据块并确认。 二、Hadoop集群搭建考点 1. 集群部署模式 - 考点:单机模式、伪分布式模式、全分布式模式的区别与适用场景。 - 解释:单机模式默认,用于试;伪分布式模式所有守护进程运行在单个节点,用于验证程序;全分布式模式守护进程分布在多台节点,是生产环境,主节点(Master)和从节点(Slave)分工明确。 2. 集群搭建关键步骤 - 考点:虚拟机配置、SSH免密登录、JDK与Hadoop环境配置、核心配置文件(core-site.xml、hdfs-site.xml等)。 - 解释:需配置主机名与IP映射、关闭防火墙;SSH免密登录通过公私钥实现集群节点间无密码访问;core-site.xml指定文件系统入口,hdfs-site.xml配置副本数和元数据存储目录,mapred-site.xml指定MapReduce运行框架为YARN。 三、MapReduce核心考点 1. MapReduce核心思想与流程 - 考点:“分而治之”思想,Map阶段与Reduce阶段的核心任务,Shuffle阶段作用。 - 解释:Map阶段将输入数据切分并转换为键值对(K2,V2),Reduce阶段对相同键的价值聚合计算;Shuffle阶段连接Map和Reduce,负责数据的分区、排序、合并,化数据传输效率。 2. MapReduce编程模型与案例 - 考点:Mapper与Reducer类的实现,WordCount案例原理,常见组件(InputFormat、OutputFormat、Partitioner)。 - 解释:Mapper重写map()方法实现数据转换,Reducer重写reduce()方法实现聚合;WordCount通过Map统计单词为<单词,1>,Reduce累加相同单词计数;InputFormat定义输入数据格式(默认TextInputFormat按行读取),Partitioner决定数据流向哪个Reduce任务。 3. 数据倾斜解决方案 - 考点:数据倾斜的原因与常用化方法。 - 解释:数据倾斜指大量数据集中到单个分区,导致节点负载不均;解决方案包括自定义分区、重新设计Key、使用Combiner预聚合、增加Reduce任务数等。 四、Hadoop生态圈组件考点 1. ZooKeeper - 考点:ZooKeeper的角色(Leader/Follower/Observer)、核心功能(分布式协、命名服务、分布式锁)、HA模式原理。 - 解释:Leader负责事务度和选举,Follower处理非事务请求并参与投票,Observer不参与投票仅转发请求;通过ZAB算法实现数据一致性,为Hadoop HA模式提供故障转移支持。 2. Hive - 考点:Hive数据类型(基本/复杂类型)、内部表与外部表区别、HQL查询与函数使用。 - 解释:内部表删除时同时删除元数据和真实数据,外部表仅删除元数据;复杂类型包括ARRAY(数组)、MAP(键值对)、STRUCT(结构体);HQL支持类SQL查询,可通过自定义UDF扩展功能。 3. HBase - 考点:HBase数据模型(行键、列簇、单元格)、架构(HMaster/HRegionServer)、Shell操作与Java API。 - 解释:行键是唯一标识且有序,列簇是列的集合(创建表时必须指定);HMaster管理表结构和负载均衡,HRegionServer处理数据读写;常用Shell操作包括创建表(create)、插入数据(put)、查询数据(scan/get)。 4. Flume与Sqoop - 考点:Flume的Agent组件(Source/Channel/Sink)、数据流模型;Sqoop的import/export命令用法。 - 解释:Flume通过Source采集数据,Channel缓存数据,Sink输出数据(支持HDFS、HBase等目的地);Sqoop import将关系型数据库数据导入Hadoop,export反之,底层通过MapReduce实现高效传输。 五、Hadoop 2.0新特性考点 1. YARN架构与工作流程 - 考点:YARN核心组件(ResourceManager/NodeManager/ApplicationMaster/Container)、资源度流程。 - 解释:ResourceManager负责集群资源管理,NodeManager管理节点资源,ApplicationMaster为单个作业申请资源并监控任务;工作流程包括作业提交、资源申请、任务启动与监控、结果反馈。 2. Hadoop HA模式 - 考点:HDFS HA与YARN HA实现原理,故障转移机制。 - 解释:HDFS HA通过两个NameNode(Active/Standby)实现高可用,借助ZooKeeper和JournalNode同步元数据;YARN HA通过多个ResourceManager实现故障自动切换,确保集群持续服务。 六、综合项目考点 1. 电商精准营销项目流程 - 考点:数据采集(Flume)、数据清洗(MapReduce)、数据分析(Hive)、数据可视化(ECharts)的全流程整合。 - 解释:通过Flume采集用户行为日志,MapReduce清洗脏数据,Hive构建数据仓库进行多维度分析(用户、地域、浏览器维度),最终通过ECharts展示分析结果。 2. 组件整合应用 - 考点:Hadoop、Hive、HBase、Sqoop等组件的协同使用场景。 - 解释:例如通过Sqoop将MySQL业务数据导入Hive进行离线分析,分析结果写入HBase支持实时查询,Flume实时采集日志补充数据来源。 补充核心考点及解释 七、高级编程与化考点 1. Hadoop序列化 - 考点:Writable接口作用,常用实现类(Text、IntWritable),自定义Writable类的实现- 解释:序列化是对象与字节流的转换,Hadoop通过Writable接口实现高效序列化(于Java序列化);Text对应String,IntWritable对应int,自定义类需实现write()(序列化)和readFields()(反序列化)方法。 2. HDFS小文件处理 - 考点:小文件的危害(占用NameNode内存)与解决方案。 - 解释:小文件指小于HDFS块大小的文件,解决方案包括:①压缩小文件(使用Gzip/Bzip2等格式);②创建SequenceFile/MapFile,将多个小文件合并为大文件存储。 3. Hive性能- 考点:Hive查询化的常用策略。 - 解释:包括启用本地模式、并行执行、Map Join(小表加载到内存)、合理分区分桶、避免全表扫描、处理数据倾斜等,核心是减少MapReduce任务数和数据传输量。 4. HBase性能- 考点:HBase表设计(行键、列簇)、API化、配置化。 - 解释:行键设计需遵循短长度、散列化、唯一性原则;列簇应尽量减少(相关性强的列放入同一列簇);API化包括关闭自动刷新、批量读写、使用过滤器减少数据返回量。 八、实操类核心考点 1. 集群运维命令 - 考点:Hadoop、ZooKeeper、Hive、HBase的启停命令、状态查看命令。 - 解释:①Hadoop:start-dfs.sh/stop-dfs.sh(启停HDFS)、start-yarn.sh/stop-yarn.sh(启停YARN);②ZooKeeper:zkServer.sh start/stop/status(集群启停与状态);③Hive:hive(启动CLI)、hiveserver2(启动服务);④HBase:start-hbase.sh/stop-hbase.sh(集群启停)、hbase shell(启动Shell)。 2. 数据操作实操 - 考点:HDFS Shell命令(put/get/mkdir/ls)、Hive表操作(创建/加载数据/查询)、HBase数据读写(put/scan/get)。 - 解释:HDFS put上传本地文件到HDFS,get下载HDFS文件到本地;Hive通过load data加载数据,insert into插入数据;HBase put插入<行键,列簇:列,值>数据,scan扫描表数据。 3. MapReduce作业提交与运行 - 考点:将Java程序打包为Jar包,通过hadoop jar命令提交作业,查看运行结果。 - 解释:提交命令格式: hadoop jar Jar包路径 主类全路径 输入路径 输出路径 ;输出路径需不存在,运行结果默认存储在输出路径的part-r-00000文件中。 九、理论理解类考点 1. 分布式系统核心概念 - 考点:分布式系统的特点(高可用、高扩展、容错性)、一致性模型。 - 解释:Hadoop生态圈组件均为分布式系统,通过多节点部署实现高可用(避免单点故障)和高扩展(动态增减节点);通过数据副本、故障转移等机制实现容错。 2. Hadoop与传统技术的区别 - 考点:Hadoop与传统关系型数据库(MySQL/Oracle)的差异。 - 解释:Hadoop适用于海量数据离线处理,支持非结构化数据,可水平扩展;传统数据库适用于结构化数据实时查询,垂直扩展为主,事务一致性强。 3. 关键技术原理辨析 - 考点:MapReduce与Spark的区别、HDFS与HBase的区别。 - 解释:MapReduce基于磁盘运算,适用于离线批处理;Spark基于内存运算,速度更快,支持实时流处理;HDFS是分布式文件系统,适用于批量存储与读取;HBase是分布式数据库,支持随机读写和实时访问。 十、习题高频考点 1. 填空题核心考点 - 大数据技术核心需求:数据存储、数据运算。 - Hadoop 2.0三大核心组件:HDFS、MapReduce、YARN。 - HDFS默认块大小:128MB,默认副本数:3。 - Flume Agent核心组件:Source、Channel、Sink。 - Sqoop核心功能:数据导入(import)、数据导出(export)。 2. 简答题核心考点 - 简述HDFS的读写流程。 - 简述MapReduce的工作原理。 - 说明Hive内部表与外部表的区别。 - 简述ZooKeeper在Hadoop HA中的作用。 - 如何解决MapReduce中的数据倾斜问题? 进阶拓展考点及解释 十一、Hadoop 2.0深度考点 1. YARN资源度机制 - 考点:YARN的度器类型(FIFO/容量度器/公平度器)、Container资源描述。 - 解释:FIFO度器按提交顺序度,适用于单用户;容量度器划分队列,支持多用户资源隔离;公平度器动态分配资源,确保各应用公平获得资源。Container是资源抽象,包含内存、CPU等资源描述及任务启动命令。 2. HDFS Federation(联邦) - 考点:HDFS Federation的核心作用与架构。 - 解释:解决HDFS 1.0中NameNode内存受限问题,允许部署多个NameNode,每个NameNode分管一部分目录,共享所有DataNode存储资源,实现命名空间的水平扩展。 3. 高可用HA)核心组件 - 考点:HDFS HA中的JournalNode与DFSZKFailoverController(ZKFC)功能。 - 解释:JournalNode用于同步Active NameNode的编辑日志,确保Standby NameNode数据一致;ZKFC监控NameNode状态,通过ZooKeeper实现故障自动转移,切换Active/Standby角色。 十二、生态圈组件进阶考点 1. Flume高级特性 - 考点:Flume拦截器(Timestamp/Host/Static)、通道选择器(Replicating/Multiplexing)、故障转移与负载均衡。 - 解释:拦截器用于修改或添加Event的Header信息;Replicating将Event复制到所有Channel,Multiplexing根据Header值路由到指定Channel;故障转移通过Sink组先级实现失败重试,负载均衡分散数据到多个Sink。 2. Hive数据仓库设计 - 考点:Hive分区表与分桶表的设计与使用场景,数据倾斜化。 - 解释:分区表按指定列(如日期、地域)拆分数据,减少查询扫描范围;分桶表按列哈希分区,化Join查询效率。数据倾斜化可通过分桶、Map Join、倾斜键单独处理实现。 3. HBase过滤器与比较器 - 考点:HBase常用过滤器(RowFilter/ValueFilter/SingleColumnValueFilter)、比较器类型(BinaryComparator/RegexStringComparator)。 - 解释:过滤器用于服务端筛选数据,减少网络传输;RowFilter按行键筛选,ValueFilter按值筛选;BinaryComparator按字节顺序比较,RegexStringComparator支持正则匹配。 4. Sqoop进阶用法 - 考点:Sqoop增量导入(append/incremental lastmodified)、Job定时任务、数据格式转换。 - 解释:增量导入仅导入新增数据,append追加记录,lastmodified基于时间戳更新;Sqoop Job可保存导入/导出配置,支持定时执行;支持将数据导入HDFS(文本/SequenceFile)、Hive表、HBase表。 十三、实战项目深度考点 1. 数据采集与预处理流程 - 考点:日志采集(Flume+Log4j)、数据清洗(MapReduce/Spark)、数据集成(Sqoop)的完整链路。 - 解释:通过Log4j生成应用日志,Flume监控日志目录并采集到HDFS;MapReduce程序清洗脏数据(缺失值、异常值处理);Sqoop同步关系型数据库数据到Hive,实现多源数据集成。 2. 电商精准营销项目核心模块 - 考点:用户画像构建(基于Hive分析用户行为)、地域/浏览器维度分析、数据可视化实现(ECharts)。 - 解释:通过Hive分析用户浏览、下单数据,提取用户偏好特征;按地域、浏览器维度统计访问量和转化率;ECharts读取分析结果,生成柱状图、饼图等可视化报表。 3. 组件整合故障排查 - 考点:集群启动失败、数据传输异常、作业运行报错的常见原因与解决方案。 - 解释:如Hadoop启动失败可能是配置文件错误或端口占用;Sqoop导入失败可能是数据库连接参数错误或权限不足;MapReduce作业报错可能是数据格式不匹配或资源不足,需通过日志定位问题。 十四、职业应用考点 1. Hadoop就业技能要求 - 考点:大数据开发工程师必备技能(Java基础、Hadoop集群搭建、生态圈组件使用、项目实战经验)。 - 解释:需熟练掌握Java编程、Linux命令、Hadoop核心组件配置与开发,熟悉Hive/HBase/Flume/Sqoop的实操,具备离线数据处理项目经验(如日志分析、报表统计)。 2. 生产环境化策略 - 考点:Hadoop集群在生产环境中的性能化(资源配置、存储化、作业度)。 - 解释:资源配置需根据服务器硬件整JVM内存、Map/Reduce任务数;存储化包括合并小文件、数据压缩;作业度通过YARN配置队列先级,避免资源抢占。 十五、高频易错考点辨析 1. 概念混淆点 - HDFS块与传统文件系统块:HDFS块更大(默认128MB),目的是减少寻址时间;传统文件系统块较小(如4KB),目的是提高存储利用率。 - MapReduce的Map与Reduce任务数:Map任务数由输入文件分片数决定,Reduce任务数可手动配置(默认1),并非越多越好。 - Hive与HBase的适用场景:Hive适用于离线数据分析(如报表生成),HBase适用于实时数据查询(如用户画像查询)。 2. 实操易错点 - Hadoop集群格式化:仅初次启动前执行 hdfs namenode -format ,重复执行会导致数据丢失。 - Hive外部表数据加载: load data inpath 命令对外部表仅移动元数据,不移动真实数据;内部表会移动真实数据。 - HBase表操作:删除表前需先禁用表( disable '表名' ),否则报错;行键不可修改,只能通过覆盖实现更新。 终极拓展考点及解释(含冷门高频考点) 十六、底层原理深挖考点 1. MapReduce Shuffle阶段深度解析 - 考点:Shuffle阶段的Map端与Reduce端流程、排序与合并机制。 - 解释:Map端将输出数据写入环形缓冲区(默认100MB,80%阈值时溢写),溢写前按分区和Key排序,多个溢写文件合并为一个;Reduce端通过HTTP拉取Map端数据,合并后按Key分组,为Reduce任务提供输入。Shuffle是MapReduce性能瓶颈,化重点包括整缓冲区大小、压缩溢写文件、合理设置合并阈值。 2. HDFS元数据管理 - 考点:NameNode的fsimage与edits文件作用,SecondaryNameNode的合并机制。 - 解释:fsimage是元数据快照(文件系统目录树),edits记录元数据变更日志;SecondaryNameNode定期(默认1小时)合并fsimage和edits,生成新fsimage,减少NameNode重启时的加载时间。HA模式下,通过JournalNode同步edits文件,确保Active与Standby NameNode数据一致。 3. ZooKeeper数据模型与Watcher机制 - 考点:ZooKeeper的Znode节点类型(永久/临时/顺序节点)、Watcher监听机制。 - 解释:永久节点创建后持续存在,临时节点随客户端会话结束删除,顺序节点自动附加序列号;Watcher机制支持客户端监听Znode变更(创建/删除/数据修改),触发后通知客户端,常用于分布式锁、服务发现等场景。 十七、冷门但高频考点 1. Hadoop序列化与Java序列化的区别 - 考点:Hadoop自定义序列化(Writable)的势。 - 解释:Java序列化开销大、序列化后数据体积大、支持引用机制(无法分割大文件);Hadoop Writable序列化更简洁、高效,数据体积小,无引用机制,适配分布式计算场景,如IntWritable仅存储int值,无额外开销。 2. Flume的可靠性保证 - 考点:Flume的事务机制(Source与Sink事务)、File Channel与Memory Channel的可靠性差异。 - 解释:Source事务确保数据从外部来源读取后写入Channel,Sink事务确保数据从Channel读取后写入目的地;File Channel将数据持久化到磁盘,故障后数据不丢失;Memory Channel数据存储在内存,速度快但故障后数据丢失,适用于对可靠性要求不高的场景。 3. Hive的SerDe序列化/反序列化 - 考点:SerDe的作用,常见SerDe类型(LazySimpleSerDe、JsonSerDe)。 - 解释:SerDe负责Hive数据的序列化(写入时将数据转为存储格式)与反序列化(读取时将存储格式转为查询格式);默认LazySimpleSerDe处理文本格式数据,JsonSerDe支持JSON格式数据的解析。 4. HBase的预写日志(WAL) - 考点:HBase WAL的作用与原理。 - 解释:WAL(Write-Ahead-Log)是HRegionServer的日志文件,数据写入MemStore前先写入WAL,防止MemStore数据因节点故障丢失;节点恢复时,通过WAL回放未持久化的数据到HFile。 十八、跨组件交互考点 1. Hive与HBase的集成 - 考点:Hive关联HBase表的配置与使用场景。 - 解释:通过创建Hive外部表,指定 STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' ,映射HBase的行键、列簇和列;适用于需通过HQL查询HBase中实时数据的场景,底层通过HBase API读取数据。 2. SparkHadoop的协同 - 考点:SparkHadoop的适配(依赖HDFS存储、YARN资源度)、Spark相比MapReduce的势。 - 解释:Spark可读取HDFS中的数据,提交作业到YARN集群运行;相比MapReduce,Spark基于内存计算,避免磁盘I/O开销,支持迭代计算和流处理,速度提升10~100倍。 3. Flume与Kafka的整合 - 考点:Flume作为Kafka生产者的配置,数据传输流程。 - 解释:将Flume的Sink类型配置为Kafka Sink,指定Kafka集群地址、主题;Flume采集日志数据后,发送到Kafka主题,实现数据的缓冲与解耦,供下游Spark Streaming、Flink等组件消费。 十九、生产环境问题排查考点 1. Hadoop集群常见故障 - 考点:NameNode单点故障、DataNode数据块损坏、YARN资源不足的解决方案。 - 解释:NameNode故障通过HA模式的Standby节点切换恢复;DataNode数据块损坏通过副本自动修复(NameNode检测到损坏后复制其他副本);YARN资源不足需整 yarn-site.xml 中的内存、CPU配置,或化作业资源请求。 2. Hive查询性能低下排查 - 考点:Hive查询慢的常见原因(全表扫描、数据倾斜、小文件过多)。 - 解释:全表扫描需添加分区过滤或索引;数据倾斜可通过 set hive.optimize.skewjoin=true 化;小文件过多需通过 set hive.merge.mapfiles=true 合并小文件。 3. HBase读写延迟高 - 考点:HBase延迟高的化方向(行键设计、MemStore大小、Region拆分)。 - 解释:行键设计不合理导致热点访问,需重构行键(如加盐、哈希);MemStore过小导致频繁溢写,需整 hbase.hregion.memstore.flush.size ;Region过大导致拆分耗时,需合理设置 hbase.hregion.max.filesize 。 二十、终极综合考点(面试高频) 1. 大数据处理完整链路设计 - 考点:从数据采集到数据输出的全流程设计(含组件选型、架构设计)。 - 示例:日志数据→Flume采集→Kafka缓冲→Spark Streaming实时处理→HBase存储(实时查询);业务数据→Sqoop导入→Hive数据仓库→MapReduce离线分析→MySQL导出(业务辅助)。 2. 技术选型对比分析 - 考点:根据业务场景选择合适的组件(如实时vs离线、结构化vs非结构化数据)。 - 示例:实时日志处理选Flume+Kafka+Spark Streaming;离线报表分析选Sqoop+Hive+MapReduce;实时查询选HBase;全文检索选ElasticSearch。 3. 大数据安全考点 - 考点:Hadoop集群安全(Kerberos认证)、数据权限控制(HDFS ACL、Hive权限)。 - 解释:Kerberos为集群节点和用户提供身份认证,防止未授权访问;HDFS ACL控制文件读写权限,Hive通过角色(Role)和权限(Select/Insert)控制数据表访问。 二十一、必背核心命令汇总(实操必考) 1. HDFS核心命令 - 上传文件: hdfs dfs -put 本地文件 HDFS路径  - 下载文件: hdfs dfs -get HDFS文件 本地路径  - 查看文件: hdfs dfs -cat HDFS文件  - 创建目录: hdfs dfs -mkdir -p HDFS目录  - 删除文件/目录: hdfs dfs -rm -r HDFS路径  2. MapReduce作业命令 - 提交作业: hadoop jar Jar包路径 主类全路径 输入路径 输出路径  - 查看作业状态: yarn application -list  - 杀死作业: yarn application -kill 作业ID  3. Hive核心命令 - 创建数据库: create database 数据库名;  - 创建表: create table 表名(列名 类型,...) row format delimited fields terminated by '\t';  - 加载数据: load data local inpath '本地路径' into table 表名;  - 查询数据: select * from 表名 where 条件;  4. HBase核心命令 - 创建表: create '表名','列簇1','列簇2';  - 插入数据: put '表名','行键','列簇:列','值';  - 扫描表: scan '表名';  - 删除表: disable '表名'; drop '表名';  5. Sqoop核心命令 - 导入MySQL数据到HDFS: sqoop import --connect jdbc:mysql://IP:3306/数据库名 --username 用户名 --password 密码 --table 表名 --target-dir HDFS路径 --m 1  - 导出HDFS数据到MySQL: sqoop export --connect jdbc:mysql://IP:3306/数据库名 --username 用户名 --password 密码 --table 表名 --export-dir HDFS路径 --input-fields-terminated-by '\t' 终极补充考点及实战易错点(含面试深度问答) 二十二、底层协议与通信考点 1. Hadoop RPC通信机制 - 考点:RPC的概念、Hadoop RPC架构(Client/Server/Interface)、核心作用。 - 解释:RPC(远程过程用)是Hadoop节点间通信的核心协议,屏蔽底层网络细节;Hadoop RPC架构包含客户端(发起请求)、服务器端(提供服务)、接口(定义服务方法);用于NameNode与DataNode、ResourceManager与NodeManager等组件间的通信。 2. HDFS WebHDFS协议 - 考点:WebHDFS的作用、核心操作(文件读写、目录管理)。 - 解释:WebHDFS提供HTTP接口,支持通过浏览器或REST API操作HDFS,无需部署Hadoop客户端;核心操作包括创建文件(PUT)、读取文件(GET)、创建目录(MKCOL)等,适用于跨平台数据访问。 二十三、数据格式与压缩考点 1. Hadoop支持的数据压缩格式 - 考点:常用压缩格式(Gzip/Bzip2/Snappy/LZO)的特点、适用场景。 - 解释:Gzip压缩比高,不支持切分;Bzip2支持切分,压缩比最高但速度慢;Snappy速度快,压缩比适中,不支持切分;LZO支持切分(需加索引),速度快,适用于大数据实时处理场景。 2. 序列化数据格式(SequenceFile/MapFile/ORC/Parquet) - 考点:各序列化格式的势与适用场景。 - 解释:SequenceFile存储键值对,适用于合并小文件;MapFile是排序的SequenceFile,支持随机查询;ORC和Parquet是列存储格式,压缩比高,查询时仅读取需要的列,适用于Hive数据仓库场景。 二十四、实战面试高频问答考点 1. 如何设计一个高可用Hadoop集群? - 考点:HA模式配置、组件冗余、故障转移机制。 - 标准答案:①HDFS HA:部署两个NameNode(Active/Standby),通过JournalNode同步元数据,ZKFC实现故障转移;②YARN HA:部署多个ResourceManager,通过ZooKeeper实现Active切换;③组件冗余:DataNode、NodeManager多节点部署,ZooKeeper集群(奇数节点)确保高可用;④数据备份:HDFS副本数设为3,关键数据定期备份到异地。 2. 大数据项目中如何处理实时与离线数据? - 考点:实时与离线数据处理的组件选型、流程设计。 - 标准答案:①实时数据:Flume采集日志→Kafka缓冲→Spark Streaming/Flink处理→HBase/Redis存储,支持低延迟查询;②离线数据:Sqoop导入关系型数据库数据→Hive数据仓库→MapReduce/Spark批处理→MySQL导出报表;③数据融合:实时处理结果定期同步到离线仓库,离线分析结果为实时处理提供规则支持。 3. 如何解决Hive数据倾斜问题? - 考点:数据倾斜的根源、分层解决方案。 - 标准答案:①根源:某类Key的数据量远超其他Key,导致单个Reduce任务负载过高;②解决方案:a. 预处理:通过Map Join将小表加载到内存,避免Reduce阶段倾斜;b. 键值化:对倾斜Key加盐(添加随机前缀),分散到多个Reduce;c. 参数: set hive.optimize.skewjoin=true (自动识别倾斜Key)、 set hive.skewjoin.key=100000 (定义倾斜阈值);d. 数据拆分:将倾斜Key单独处理,再与其他数据合并。 4. HBase的Region拆分与合并机制 - 考点:Region拆分触发条件、合并类型(Minor/Major)。 - 标准答案:①拆分触发条件:Region大小达到阈值(默认256MB)、Region中StoreFile数量达到阈值;②拆分方式:按行键范围均等拆分,拆分后的数据分布到不同RegionServer;③合并类型:Minor合并(合并小StoreFile,不删除过期数据)、Major合并(合并所有StoreFile,删除过期数据和删除标记),Major合并耗资源,需避开业务高峰期。 二十五、生产环境化深度考点 1. Hadoop集群资源配置- 考点:YARN内存配置、Map/Reduce任务资源分配、磁盘规划。 - 解释:①YARN内存配置: yarn.nodemanager.resource.memory-mb 设置节点可用内存, yarn.scheduler.minimum-allocation-mb 设置容器最小内存;②Map/Reduce资源: mapreduce.map.memory.mb (Map任务内存)、 mapreduce.reduce.memory.mb (Reduce任务内存),根据服务器硬件(如32GB内存节点,可分配24GB给YARN);③磁盘规划:DataNode使用多块磁盘存储数据,避免单块磁盘IO瓶颈。 2. Hive SQL化实战技巧 - 考点:查询语句化、索引使用、分区剪裁。 - 解释:①避免 select * ,仅查询需要的列;②使用分区剪裁( where dt='2024-01-01' ),减少扫描数据量;③对频繁查询的列创建索引(Hive 3.0+支持BTREE索引);④用 union all 替代 union (避免去重开销);⑤子查询化,将子查询转换为JOIN操作。 3. HBase写入性能- 考点:批量写入、预分区、MemStore配置- 解释:①批量写入:使用 putList 批量提交数据,减少RPC用次数;②预分区:创建表时指定分区范围(如按行键前缀分区),避免Region热点和频繁拆分;③MemStore配置:增大 hbase.hregion.memstore.flush.size (如256MB),减少溢写次数;④关闭WAL( setWriteToWAL(false) ),适用于非核心数据(牺牲可靠性换速度)。 二十六、实战易错点与避坑指南 1. 集群搭建易错点 - 坑点1:克隆虚拟机后未修改MAC地址和IP,导致网络冲突。 - 解决方案:修改 /etc/udev/rules.d/70-persistent-net.rules 删除多余网卡,修改 /etc/sysconfig/network-scripts/ifcfg-eth0 中的IP和MAC地址。 - 坑点2:Hadoop配置文件中主机名写错,导致组件无法通信。 - 解决方案:确保 core-site.xml 、 hdfs-site.xml 等文件中的主机名与 /etc/hosts 中的映射一致,通过 ping 主机名 验证连通性。 2. 作业运行易错点 - 坑点1:MapReduce作业输出路径已存在,导致作业失败。 - 解决方案:运行前删除输出路径( hdfs dfs -rm -r 输出路径 ),或在代码中添加路径判断逻辑。 - 坑点2:Hive加载数据时,文件分隔符与表定义不一致,导致数据错乱。 - 解决方案:创建表时明确指定分隔符( fields terminated by '\t' 、 collection items terminated by ',' ),确保数据文件分隔符匹配。 3. 数据迁移易错点 - 坑点1:Sqoop导入MySQL数据时,字段类型不匹配(如MySQL datetime vs Hive string)。 - 解决方案:在Sqoop命令中使用 --map-column-java 或 --map-column-hive 指定字段类型映射。 - 坑点2:Flume采集日志时,中文乱码。 - 解决方案:在Flume配置文件中设置编码( agent.sources.r1.charset=UTF-8 ),确保日志文件编码与配置一致。 二十七、终极总结:大数据开发核心能力模型 1. 技术栈核心能力 - 基础能力:Java编程、Linux命令、SQL语法、分布式系统概念。 - 核心组件:Hadoop(HDFS/MapReduce/YARN)、ZooKeeper、Hive、HBase、Flume、Sqoop。 - 进阶能力:Spark/Flink实时处理、数据仓库设计、性能化、故障排查。 2. 项目实战能力 - 数据链路设计:从采集→预处理→存储→分析→可视化的全流程设计。 - 组件整合能力:Flume+Kafka+Spark、Hive+HBase、Sqoop+MySQL等跨组件协同。 - 问题解决能力:集群故障排查、数据倾斜处理、性能瓶颈化。 二十八、必背核心配置参数(实操必考) 1. HDFS核心配置 -  dfs.replication :数据块副本数(默认3)。 -  dfs.namenode.name.dir :NameNode元数据存储目录。 -  dfs.datanode.data.dir :DataNode数据块存储目录。 -  dfs.blocksize :HDFS数据块大小(默认128MB)。 2. YARN核心配置 -  yarn.resourcemanager.hostname :ResourceManager主机名。 -  yarn.nodemanager.aux-services :NodeManager附属服务(默认 mapreduce_shuffle )。 -  yarn.scheduler.minimum-allocation-mb :容器最小内存(默认1024MB)。 -  yarn.scheduler.maximum-allocation-mb :容器最大内存(默认8192MB)。 3. Hive核心配置 -  hive.metastore.uris :Metastore服务地址(远程模式配置)。 -  hive.exec.mode.local.auto :自动启用本地模式(默认false)。 -  hive.optimize.skewjoin :启用数据倾斜化(默认false)。 -  hive.exec.dynamic.partition.mode :动态分区模式(默认strict,非严格模式设为nonstrict)。 4. HBase核心配置 -  hbase.rootdir :HBase数据存储目录(默认HDFS路径)。 -  hbase.zookeeper.quorum :ZooKeeper集群地址。 -  hbase.hregion.memstore.flush.size :MemStore刷新阈值(默认128MB)。 -  hbase.hregion.max.filesize :Region拆分阈值(默认256MB)。帮我根据知识点出一张期末试卷选择10分10个填空20分10个判断10分10个综合分析20分程序题20分应用题20分。
最新发布
01-04
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值