大数据面试题
Hive 和 HSQL 掌握情况总结
Hive
- 定义:Hive 是基于 Hadoop 构建的一套数据仓库分析系统。
- 特点:
- 支持 SQL 查询方式来分析存储在 Hadoop 分布式文件系统中的数据。
- 可将结构化的数据文件映射为一张数据库表,并提供完整的 SQL 查询功能。
- 将 SQL 语句转换为 MapReduce 任务进行运行,通过自己的 SQL 去查询分析需要的内容。
- 支持的 SQL 语句包括 DDL、DML 以及常见的聚合函数、连接查询、条件查询。
- 适用场景:
- 不适合用于联机事务处理(OLTP)。
- 不提供实时查询功能。
- 最适合应用在基于大量不可变数据的批处理作业。
HSQL
- 定义:HSQLDB 是一个嵌入式的关系型数据库管理系统,完全纯 Java 编写的。
- 特点:
- 嵌入式特性:不需要外部数据库服务器。
- 支持 SQL 标准(如 SQL92)。
- 支持事务处理、视图、存储过程等。
- 可以与 Java 应用程序集成方便地进行数据管理。
- 适用场景:
- 需要嵌入式数据库的场景,如小型应用程序、移动应用等。
- 对数据库性能要求不高,但需要 SQL 标准支持的场景。
MapReduce 掌握情况总结
基本概念
- MapReduce:一种编程模型和计算框架,用于处理大规模数据集。它通过将任务分解为多个小任务(Map 和 Reduce)来并行处理。
- Mapper:负责读取输入数据,并将其转换为键值对(key-value pairs),然后输出这些键值对。
- Reducer:负责接收 Mapper 输出的键值对,根据键进行分组和聚合操作,最终生成输出结果。
工作流程
- Map 阶段:
- 读取输入数据,并将其转换为键值对(key-value pairs)。
- 每个 Map 任务处理一部分数据,并将中间结果(key-value pairs)输出到本地文件系统。
- Shuffle 和 Sort:
- Hadoop 自动进行 Shuffle 过程,将所有具有相同键的 key-value 对分发到同一台机器上的 Reducer。
- 在 Shuffle 阶段,还会对键值对进行排序(Sort)。
- Reduce 阶段:
- 每个 Reducer 读取从 Mapper 输出的键值对,并根据键进行分组和聚合操作。
- 输出最终的结果。
关键组件
- InputFormat:定义如何读取输入数据并将其转换为键值对。
- OutputFormat:定义如何将结果写入输出文件。
- Partitioner:负责决定哪些键值对发送到哪个 Reducer。
- Combiner:在 Map 阶段进行局部聚合,减少 Shuffle 和 Sort 的数据量。
示例代码
// Mapper 类
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable> {
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
}
// Reducer 类
public class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
}
通过以上总结,可以清楚地了解 Hive 和 HSQL 的基本概念和特点,以及 MapReduce 的工作流程和关键组件。