完美氪大数据开发 面经实操分享
关系型数据库与非关系型数据库的区别,并举例
关系型数据库(RDBMS)
关系型数据库基于关系模型,数据以表格的形式存储,每个表有其唯一的键(key)来标识每一行数据。具有一系列的操作符来操纵这些表格,可以在多个表之间进行联接操作以获取数据。
特点:
- 数据之间存在预定义的关系,例如一对一,一对多,多对多等。
- 数据以表格形式存储,每个表有多个列,每个列对应一个属性。
- 支持复杂的查询语句,如SQL。
- 强调数据的一致性和完整性,支持ACID(原子性、一致性、隔离性、持久性)事务。
例子:
- MySQL
- PostgreSQL
- Oracle Database
- MS SQL Server
非关系型数据库(NoSQL)
非关系型数据库不依赖于传统的行列式结构,而是使用更灵活的数据模型,如键值对、文档、列存储、图形数据库等。这些数据库设计用于处理大规模数据分布在多个服务器上。
特点:
- 没有预定义的数据模式,对数据的组织和格式更加灵活。
- 横向可扩展,适合大数据和实时应用程序。
- 不保证ACID,但一般会提供最终一致性。
- 支持简单查询,对复杂查询支持不如RDBMS。
例子:
- 键值存储:Redis, DynamoDB
- 文档存储:MongoDB, CouchDB
- 列存储:Cassandra, HBase
- 图形数据库:Neo4j, Amazon Neptune
介绍hadoop,hadoop与hdfs的关系
Hadoop和HDFS的关系可以看作是整体与部分的关系,HDFS是Hadoop的一个重要组成部分。
Hadoop是一个开源的大数据处理框架,其主要目标是处理和存储大规模数据。Hadoop的核心是由两个主要组件构成的:
- Hadoop Distributed File System (HDFS):HDFS是Hadoop的分布式文件系统,它负责数据的存储。HDFS提供了一个高度容错的方式来存储大量数据,并能够在成千上万的服务器之间进行分布式处理。HDFS也设计用于在廉价的(相对于企业级硬件)硬件上运行,这使得Hadoop能够有效地存储和处理PB级别的数据。
- Hadoop MapReduce:MapReduce是Hadoop的数据处理模块。它是一个编程模型,用于处理和生成大数据集。用户可以编写MapReduce程序来处理在HDFS中存储的数据。
spark的RDD的几个特点
- 弹性(Resilience):RDD能够通过所谓的线性转换(lineage,即数据的生命周期)信息在节点故障后自动恢复。如果RDD的某个分区数据丢失,Spark可以通过原始数据和转换操作的日志来重新计算丢失的分区数据。
- 分布式(Distributed):RDD的数据自动分布在集群的所有节点上,每个节点处理数据集的一部分。这使得Spark可以进行并行处理,大大提高了处理大数据的速度。
- 不可变性(Immutability):一旦创建,RDD就不能被修改。这种不可变性使得系统更容易维护,并且可以在多个节点上安全地并行处理数据。
- 转换和行动操作(Transformations and Actions):RDD支持两种类型的操作:转换(transformation)和行动(action)。转换操作如map、filter和reduce会生成新的RDD,而行动操作如count、collect和save会触发实际的计算并返回一个结果到驱动程序,或者将数据存储到外部系统。
RDD相对于mapreduce的优点缺点
优点:
1. 易用性: Spark的API设计得更加简洁,提供了更高级的操作,比如map、filter、join等,这使得用户能更容易地编写并行计算代码。
2. 性能: Spark能够在内存中存储中间结果(而不是像MapReduce那样写入磁盘),这使得Spark在迭代和交互式查询操作上比MapReduce要快很多。对于机器学习和数据挖掘等需要重复操作数据的任务,Spark的这个优点尤其突出。
3. 灵活性: RDD支持多种数据源,并且可以进行更复杂的操作。例如,它不仅仅支持map和reduce操作,还支持SQL查询、流处理和机器学习等。
4. 容错性: RDD通过lineage(血统)信息实现容错。当某个分区的数据丢失时,Spark可以通过lineage信息自动、有效地重新生成丢失的数据。
缺点:
内存使用: Spark使用内存来存储中间计算结果,这意味着它可能会用尽内存,尤其是在处理大规模数据时。虽然Spark有溢写到磁盘的机制,但这会影响性能。
hive join的几个方式,说明其原理
1. Hive的Map-side JOIN:
- Map-side join是在Map阶段进行的,并且不需要Reduce过程。这种join方式在一张表(小表)可以装入内存的情况下效果最佳。Hive会将小表分发到各个节点,然后在Map过程中与大表的数据进行比对和连接。这种方式避免了数据在网络中的大规模传输,因此效率较高。
2. Hive的Reduce-side JOIN:
- Reduce-side join是在Reduce阶段进行的。在Map阶段,Hive会按照join key将数据发送到同一个reducer。然后在Reduce阶段,数据被聚合并进行实际的join操作。这种方式的优点是不受内存限制,可以处理大型数据集,但缺点是会产生大量的网络数据传输,因此性能较低。
3. Hive的Bucketed Map Join:
- Bucketed map join是针对bucketed table(已经进行过预分桶的表)的优化。如果两张表都是按照相同的列进行了预分桶,并且分桶的数量相同,那么Hive可以在Map阶段直接进行join操作,大大提高了效率。
4. Hive的Skew Join:
- Skew join是针对数据倾斜(某些key的数据量远远大于其他key)的情况进行优化的。Hive会将数据量大的key单独处理,避免了由于数据倾斜造成的资源浪费。
排序有哪些算法,具体一个说明
- 冒泡排序
- 插入排序
- 选择排序
- 快速排序
- 归并排序
- 堆排序
- 希尔排序
- 计数排序
- 桶排序
- 基数排序
下面我们来详细介绍一下快速排序(Quick Sort)算法:
快速排序是一种高效的排序算法,它的基本思想是使用分治法。快速排序的步骤如下:
- 选定一个基准值(Pivot):从数组中选取一个元素作为基准值。
- 分区(Partition):将数组分为两个子数组,一个包含所有比基准值小的元素,另一个包含所有比基准值大的元素。这个步骤完成后,基准值就位于数组的中间位置。
- 递归排序子数组:对两个子数组递归执行上述两步。
kafka简单介绍
Apache Kafka基于发布订阅模型,核心组件包括:
- Producer:生产者,向Kafka发送数据流的实体。
- Consumer:消费者,从Kafka读取数据流的实体。
- Broker:Kafka集群中的服务器,负责数据的存储和传输。
- Topic:Kafka中数据流的类别或者分区,Producer向其发布数据,Consumer从其订阅数据。
- Partition:Topic的分片,用于提高数据处理能力。
解决职场真实面试问题,分享同学真实成功案例,欢迎订阅关注!