大数据框架和数仓高频面试题总结

Hadoop

1、HDFS的特性

master/slave 架构(主从架构)

HDFS 采⽤ master/slave 架构。⼀般⼀个 HDFS 集群是有⼀个 Namenode 和⼀定数⽬的Datanode 组成。 

分块存储

HDFS 中的⽂件在物理上是分块存储(block)的,块的⼤⼩可以通过配置参数来规定,默认⼤⼩ 在 hadoop2.x 版本中是 128M。

 名字空间(NameSpace)

HDFS ⽀持传统的层次型⽂件组织结构。⽤户或者应⽤程序可以创建⽬录,然后将⽂件保存在这些 ⽬录⾥。⽂件系统名字空间的层次结构和⼤多数现有的⽂件系统类似:⽤户可以创建、删除、移动 或重命名⽂件。 Namenode 负责维护⽂件系统的名字空间,任何对⽂件系统名字空间或属性的修改都将被 Namenode 记录下来。 HDFS 会给客户端提供⼀个统⼀的抽象⽬录树,客户端通过路径来访问⽂件,形如: hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。 

副本机制

为了容错,⽂件的所有 block

在 Java 中,`Stream` 流提供了一种非常简洁的方式来对集合据进行操作。其中 `distinct()` 是一种常用的中间操作方法,用于去除流中的重复元素。 ### 去重原理 `distinct()` 的工作基于哈希值 (`hashCode`) 和相等性比较 (`equals`) 来判断两个对象是否相同。如果流中有两个对象的 `hashCode` 相同,并且通过 `equals` 判断它们也是相同的,则会保留第一个出现的对象并移除后续重复的对象。 ### 示例代码 ```java import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class DistinctExample { public static void main(String[] args) { List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 1, 2, 6); // 使用 distinct() 去重 List<Integer> uniqueNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueNumbers); // 输出 [1, 2, 3, 4, 5, 6] } } ``` #### 自定义对象去重 对于自定义对象,可以覆写 `hashCode` 和 `equals` 方法来指定如何判定两个对象是否相同。 示例: ```java class Person { private String name; public Person(String name) { this.name = name; } @Override public boolean equals(Object o) { if (this == o) return true; if (!(o instanceof Person)) return false; Person person = (Person) o; return name.equals(person.name); } @Override public int hashCode() { return Objects.hash(name); } @Override public String toString() { return "Person{name='" + name + "'}"; } } List<Person> people = Arrays.asList( new Person("Alice"), new Person("Bob"), new Person("Alice") ); // 对自定义对象使用 distinct 去重 people.stream() .distinct() .forEach(System.out::println); ``` 上述代码将只打印出唯一的 `Person` 实例。 --- ### 注意事项 1. 如果未正确覆写 `hashCode` 或者 `equals`,则可能导致无法正确地识别重复项。 2. `distinct()` 操作可能会导致性能开销增加,特别是在处理大数据集时,因为需要维护内部的据结构(如 `HashSet`)来进行判重。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据与算法架构提升之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值