当前位置: 首页 > 知识库问答 >
问题:

Spark Hive表连接策略

梁盛
2023-03-14

我有一个140亿记录的Hive表(大约1TB大小)和另一个8亿记录的Hive表(2GB大)。我想加入它们,我的策略应该是什么?我有一个36节点集群。我使用50个执行器,每个执行器30 GB。

据我所知,我的选择是:

  1. 广播2 GB表
  2. 只是盲目地连接2个表(我已经这样做了,需要将近4个小时才能完成)

如果我将两个表重新分区并连接起来,会提高性能吗?我观察到在第二种方法中,最后20个任务非常慢,我希望它们处理的分区有更多的数据(倾斜的数据)。

共有1个答案

宋岳
2023-03-14

如果给每个工人足够的RAM,较小的表可以放入内存。在这种情况下,地图端连接/端数据方法可能非常有用。

查看使用<code>MapJoin</code>提示:

SELECT /*+ MAPJOIN(b) */ a.key, a.value
FROM a JOIN b ON a.key = b.key

要点:

如果除一个表外,所有要连接的表都很小,则可以将连接作为仅映射作业执行。

有关其用法的更多详细信息,请参见:https://cwiki.apache.org/confluence/display/Hive/LanguageManualJoins#LanguageManualJoins MapJoins限制

 类似资料:
  • 主要内容:连接策略示例在连接策略中,为每个实体类生成一个单独的表。 每个表的属性都与主键连接。 它消除了字段字重复的可能性。 以下语法表示连接的策略: - 连接策略示例 在这个例子中,我们将员工分为活跃员工和退休员工。 因此,子类和继承父类的和字段。 现在,按照以下步骤创建JPA项目 - 第1步: 在包下创建一个根实体类并指定所有必需的属性和注释。 文件:Employee.java - 第2步: 在包下创建实体类(它是

  • 上下文 我编写了几个小的Kafka Connect连接器。一个每秒只生成随机数据,另一个将其记录在控制台中。它们与模式注册表集成,因此数据使用Avro序列化。 我使用Landoop提供的fast data dev Docker映像将它们部署到本地Kafka环境中 基本设置工作,并每秒生成一条记录的消息 但是,我想更改主题名称策略。默认设置生成两个主题:

  • T-SQL 组合来自两个或多个表的记录。它用于将两个或多个表中的记录连接到数据库中。JOIN 用于通过使用彼此相等的值连接许多表中的字段。 假设有下面两张表,(a) CUSTOMERS表,记录如下—— (b) 另一个表 ORDERS,记录如下 - 在 SELECT 语句中连接这两个表,如下所示 - 执行上面查询语句,得到以下结果 - 连接在 WHERE 子句中执行。许多运算符将用于连接表,例如:

  • 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带来很大的灵活性,它们可以在任何时候增加新的数据类型。为不同实体创建新的表,之后通过连接进行查询。 连接可以在语句的子句或子句中建立,似是而非在FROM子句中指出连接时有助于将连接操作与WHERE子句中的搜索条件区分开来。所以

  • 前面小节介绍了表的设计三范式和单表的查询,本小节介绍如何将通过多个表进行关联查询数据,其中连表查询包括 LEFT JOIN、INNER JOIN、RIGHT JOIN。前面小节介绍过表的设计,其中有学生信息表 student、教师信息表 teacher、课程表 course、学生选课关联表 student_course。 1.插入表测试数据 为了演示方便,分别清空学生信息表 student、教师信