10.18 荣耀、知乎、猫眼面试题总结!!!
先把题目贴出来,答案贴一部分。。。题太多了,后面陆续更新。。
荣耀大数据
Hive 一般有什么调优方式?
Hive 的调优方式包括以下几个方面:
- 数据分区:通过在表中定义分区,可以将数据按照指定的列进行分割,提高查询效率。
- 数据压缩:对于存储在 Hive 中的大数据集,可以使用压缩算法对数据进行压缩,减少存储空间,提高查询性能。
- 合理设置表的存储格式:Hive 支持多种存储格式,如ORC、Parquet等。选择合适的存储格式可以提高查询性能。
- 使用索引:对于经常需要进行查询的列,可以创建索引,加快查询速度。
- 调整查询引擎的参数:可以通过设置 Hive 的相关参数,如内存分配、并行度等来优化查询。
- 数据倾斜处理:当数据在某些列上倾斜时,可以使用一些技术手段,如改变数据分布、使用随机前缀等方式来解决数据倾斜问题。
- 数据预处理:在数据加载到 Hive 前,对数据进行预处理,如清洗、过滤、聚合等,可以减少后续查询时的计算量。
- 使用合适的硬件资源:合理使用硬件资源,如增加内存、调整磁盘读写速度等,可以提高 Hive 的性能。
以上是一些常见的 Hive 调优方式,根据实际情况可以选择适合的方法进行优化。
HDFS 读写流程?
HDFS(Hadoop分布式文件系统)的读写流程如下:
- 写入流程:a. 客户端将要写入的数据切分成固定大小的数据块(默认大小为128MB),并与NameNode通信以获取一个可用的DataNode列表。b. 客户端选择一个DataNode作为主节点,并将数据块写入该主节点。c. 主节点将数据块复制到其他DataNode节点,以提供数据冗余和容错性。d. 所有副本写入成功后,主节点将确认写入操作,并向客户端发送成功的响应。
- 读取流程:a. 客户端向NameNode请求读取文件,并获取包含文件块信息的元数据。b. 客户端根据文件块信息选择一个DataNode作为主节点,并向其发送读取请求。c. 主节点返回所请求数据块的副本位置列表给客户端,客户端按照距离和可用性选择一个DataNode进行读取。d. 客户端与所选择的DataNode建立连接,并从该节点读取数据块。e. 如果所选择的DataNode无法提供数据块,则客户端将尝试连接其他副本位置的DataNode。
以上就是HDFS的基本读写流程。通过数据切块和复制,HDFS实现了高可用性和容错性,同时通过数据本地性和并行读取,提供了高效的读取性能。
Spark 有什么算子?
- 转换算子(Transformation):用于对RDD数据集进行转换操作,生成新的RDD。常用的转换算子有map、filter、flatMap、groupByKey、reduceByKey等。
- 行动算子(Action):用于对RDD数据集进行触发计算操作,返回结果或将结果输出到外部存储系统。常用的行动算子有collect、count、reduce、take、foreach等。
- 键值对算子(Key-Value):用于对键值对类型的RDD数据集进行操作。常用的键值对算子有groupByKey、reduceByKey、sortByKey、join等。
- 排序算子(Sorting):用于对RDD数据集进行排序操作。常用的排序算子有sortBy、sortByKey等。
- 连接算子(Joining):用于将两个RDD数据集按照特定的规则进行连接操作。常用的连接算子有join、leftOuterJoin、rightOuterJoin等。
- 文件操作算子(File Operations):用于读取和写入文件数据。常用的文件操作算子有textFile、saveAsTextFile等。
- 广播变量算子(Broadcast Variables):用于在集群中共享变量,以提高性能和减少网络传输。常用的广播变量算子有broadcast等。
Spark 一般有什么调优方式?
Spark 一般有以下几种调优方式:
- 增加硬件资源:增加集群中的节点数量、增加每个节点的CPU、内存和磁盘容量等,以提高整体的计算和存储能力。
- 数据分区和缓存:合理划分数据分区,使每个分区的大小适中,以提高并行处理能力。同时,将频繁访问的数据进行缓存,减少磁盘IO开销。
- 并行度设置:根据集群资源的情况,合理设置并行度参数,以充分利用集群资源,提高计算效率。
- 内存管理:通过调整Spark的内存分配策略,如调整executor内存大小、调整内存分配比例等,以避免内存溢出或频繁的GC操作。
- 数据压缩和序列化:对于大规模的数据集,可以考虑使用压缩算法进行数据压缩,减少网络传输和存储开销。同时,选择合适的序列化方式,如Kryo序列化,以提高性能。
- 并行算法选择:根据具体的计算场景,选择适合的并行算法,如广播变量、累加器等,以提高计算效率。
- 数据倾斜处理:针对数据倾斜的情况,采用合适的处理方式,如使用Spark提供的一些解决方案,如随机前缀、分桶等。
- 调整任务数量和分配:根据集群资源的情况,调整并行任务的数量和分配,以充分利用集群资源,避免资源浪费。
- 数据预处理:在数据处理之前,进行合适的数据预处理,如数据过滤、数据采样等,以减少数据量和提高计算效率。
- 监控和调优:使用Spark提供的监控工具和日志,及时监控集群的运行情况,发现潜在的性能瓶颈,并进行相应的调优。
Spark 数据倾斜如何解决?
Spark数据倾斜是指在数据处理过程中,某些分区的数据量明显偏大,导致计算过程中负载不均衡的情况。
解决Spark数据倾斜可以采取以下几种方法:
- Shuffle操作优化:Shuffle操作是Spark中常见的导致数据倾斜的原因之一。通过使用合适的分区策略,如使用HashPartitioner,可以将数据更均匀地分布在不同分区中,从而减少数据倾斜的可能性。
- 增加并行度:通过增加并行度,即增加Spark作业的并发执行量,可以分摊负载,减轻数据倾斜的影响。可以通过增加Executor数量、调整Executor内存等方式来提高并行度。
- 数据预处理:对于可能导致数据倾斜的操作,可以进行数据预处理来平衡数据分布。比如,可以对数据进行采样,根据采样结果进行数据重分布,使数据更均匀地分布在各个分区中。
- 增加随机性:在一些可能导致数据倾斜的操作中,引入随机因素可以减少数据倾斜的概率。比如,在进行ReduceByKey等聚合操作时,可以在Key上增加随机前缀或后缀,使相同Key的数据随机分布到不同分区中。
- 使用自定义分区器:通过自定义分区器,可以根据业务逻辑将数据更均匀地分布到不同分区中,从而减少数据倾斜的发生。自定义分区器可以根据数据的特点和业务需求进行定制。
- 数据重分区:当数据倾斜发生时,可以通过对倾斜分区进行数据重分区来解决。可以将倾斜分区的数据划分为更小的子分区,然后将这些子分区与其他正常分区进行合并,从而使数据更均匀地分布。
知乎大数据
Flink 的 Checkpoint 是什么?
Flink的反压的机制是什么?
Flink的状态后端有哪些?
Kafka一定不会丢数据嘛?
Spark的内存模型?
数据仓库的意义?
如何衡量一个好的数仓?
Hive的执行计划是什么样子?
猫眼大数据
Java String builder和String buffer区别?
Java String为什么是不可变的?为什么要设计成不可变?
Java 泛型了解吗?
Java反射了解吗?常用的反射方法?
Java集合类型?
Java数组和链表的区别?
Java讲讲HashMap原理?转换成红黑树条件?为什么这么设计?
Java线程安全的HashMap?ConcurrentHashMap和HashTable的区别?ConcurrentHashMap原理?
Java进程切换如何保证能够回到之前的执行位置?
JVM里面的内存结构?
Java线程池作用?线程池参数?
Hive内部表和外部表区别?
Hive UDF类别?实现步骤?
Hive存储文件格式?
行存储和列存储区别?
举几个开窗函数例子?什么要有开窗函数,和聚集函数区别?
MySQL聚簇索引和非聚簇索引区别?回表操作?
HBase读写原理?
HBase存储结构?
LSM树原理?
#大数据##大数据面试##晒一晒我的offer#大数据欧老师 - 面试真题分享 文章被收录于专栏
解决职场真实面试问题,分享同学真实成功案例,欢迎订阅关注!