第十章 期中大作业

发表于 2023-03-07更新于 2023-03-07字数统计 2k阅读时长 11m阅读次数

10. 1 面试题

10.1.1 hive外部表和内部表的区别

  • 内部表:未被external修饰的是内部表,默认创建的表就是内部表。
  • 外部表:被external修饰的为外部表。

区别:

Hive中的内部表和外部表是不同的类型的表,主要区别在于它们管理数据的方式以及数据存储的位置。

内部表(Internal Table)是在Hive的数据仓库中具有完全控制权的表,数据文件存储在Hive自己的文件系统中。当您创建内部表时,Hive将数据自动存储在其自己的目录结构中,并在表的定义中指定路径。当您删除一个内部表时,Hive会自动删除表的所有数据。

外部表(External Table)则是在Hive之外管理的表。这意味着,外部表中的数据可以实际上存储在您的本地文件系统或Hadoop集群之外的其他文件系统中。当您创建一个外部表时,您需要指定数据文件的位置,如果您删除外部表,数据文件将不会被自动删除,这是外部表和内部表的主要区别。

总的来说,如果您使用Hive来管理数据,并希望控制数据的完整性和管理,那么您应该使用内部表。如果您希望在Hive中访问未受Hive控制的数据,或者有其他程序需要访问数据文件,那么您应该使用外部表。

10.1.2 简述对Hive桶的理解?

Hive桶(Bucket)是指将Hive表的数据分成固定大小的几个部分,用于提高数据查询的效率和性能。桶在Hive中被用作一个数据分区技术,类似于分区思想,但是每个Hive桶都只包含一个分区。当我们将数据桶存储到HDFS的时候,Hive会将每个数据桶作为文件存储到文件系统中,并为每个数据桶分配一个唯一的编号。使用Hive桶可以提高数据查询的速度,因为它们允许Hive仅查找包含所需数据的文件,而不是整个文件或表。这样,Hive可以跳过许多不必要的数据扫描和过滤操作,从而提高了查询的效率和性能。

10.1.3 HBase和Hive的区别?

Hive是运行在Hadoop上的一个工具,准确地讲是一个搜索工具。当对海量数据进行搜索时,Hadoop的计算引擎是MapReduce。但是对MapReduce的操作和编程是非常复杂的。于是Hive的存在就让复杂的编程过程简化成了用SQL语言对海量数据的操作。这大大减轻了程序员的工作量。Hive支持多种查询语句和函数,同时也支持自定义函数和嵌套查询等特性。Hive适用于处理离线批量数据,主要用于数据分析和挖掘。

Hive支持多种查询语句和函数,同时也支持自定义函数和嵌套查询等特性。Hive适用于处理离线批量数据,主要用于数据分析和挖掘。它是Hadoop的子项目,当然也可以理解为一个工具。Hadoop的数据运算是由MapReduce完成的,而数据存储是由HDFS完成的。HDFS是分布式存储,这是Hadoop存储数据的特点,但由此带来的问题就是数据的无序和散乱。HBase在复杂的数据处理和实时应用方面表现良好,适用于实时应用、缓存、日志处理等场景。

因此,两者的应用场景和数据处理方式有所不同,需要根据具体的需求来选择。

10.1.4 简述Spark宽窄依赖

Spark中的宽依赖(Wide Dependency)指的是一个父RDD分区被多个子RDD分区依赖的情况,而窄依赖(Narrow Dependency)指的是一个父RDD分区只被一个子RDD分区依赖的情况。

宽依赖的产生可能会涉及到数据的洗牌(Shuffle)操作,这会导致性能的下降。因此在Spark中尽量使用窄依赖,可以提高Spark的性能。但是,当父RDD的分区数和子RDD的分区数不一致时,则可能需要进行数据洗牌,因此会生成宽依赖。

10.1.5 Hadoop和Spark的相同点和不同点

Hadoop和Spark都是大数据处理的开源框架,具有以下相同点和不同点:

相同点:

  • 都可以进行大规模数据处理,并可处理大量数据的存储和处理。
  • 都支持各种数据源和格式。
  • 都具有失败恢复和节点管理的功能。

不同点:

  • Spark比Hadoop更适合处理迭代式应用程序和流处理任务。
  • Spark的速度比Hadoop更快,因为它使用了内存计算。
  • Hadoop更适合处理批量离线处理任务。
  • Hadoop是基于MapReduce方法的,而Spark提供了更为灵活的API和计算模型。

    10.1.6 Spark为什么比MapReduce块?

    Spark相对于MapReduce的执行速度更快,原因如下:

1.** 内存计算:**与MapReduce不同,Spark在内存中计算大型数据集,而不必在HDFS上频繁读写数据。这减少了磁盘IO的负担,也节省了宝贵的时间。

2. 基于DAG的调度:Spark使用基于DAG的任务调度来执行数据处理任务。这意味着它可以在多个任务之间共享数据,减少不必要的计算。MapReduce则必须按固定顺序执行简单的Map和Reduce任务。

3. 更快的通信机制:Spark使用基于内存的轻量级通信机制,而MapReduce使用基于磁盘的通信机制。这使Spark能够更快地完成通信任务,提高了执行速度。

综上所述,Spark使用一系列优化技术,使其更快地处理大型数据集。

10.1.7 说说你对Hadoop生态的认识

Hadoop生态是一个开源的大数据处理框架,包括了Hadoop核心组件(HDFS、YARN和MapReduce),以及各种相关工具和库,如HBase、Hive、Pig、Spark、ZooKeeper等。Hadoop生态凭借着其高可靠性、高可扩展性、高吞吐量等优势,在大数据处理领域得到了广泛应用。

Hadoop生态的核心组件HDFS是一个分布式文件系统,它可以将大量数据分布存储在集群中的多个节点上,提高了存储系统的可靠性和容错能力。YARN是资源调度平台,它可以将集群中的计算资源合理地分配给不同的应用程序,确保集群的高效利用。MapReduce是一种分布式计算框架,可以将大规模的数据集分解成多个小块进行并行处理,从而加快计算速度。除此之外,Hadoop生态中还有大量的相关工具和库,如HBase用于实时读写大规模数据、Hive用于数据仓库查询和分析、Pig用于数据分析、Spark用于内存计算等。

总之,Hadoop生态是大数据处理领域的重要工具,它的优秀设计和强大功能正在为各种类型的企业和组织带来极大的商业价值。

10.2 实战

从新闻文章中发现热门话题和趋势话题是舆论监督的一项重要任务。在这个项目中,你的任务是使用新闻数据集进行文本数据分析,使用 Python 中 pySpark 的 RDD 和 DataFrame 的 API。问题是计算新闻文章数据集中每年各词的权重,然后选择每年 top-k个最重要的词。

PS:解决方案源码填空示例与结果验证数据在\juicy-bigdata\experiments\10 期末大作业目录下

同时提前安装pyspark