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

在配置单元中使用UDF连接两个大表-性能太慢

邵凯定
2023-03-14

我在Hive有两张桌子。其中一个有大约200万张唱片,另一个有14个唱片。我要把这两张桌子连在一起。我也在WHERE子句中应用UDF。执行联接操作花费了太多时间。

我多次尝试运行该查询,但它运行了大约2个小时,而我的reducer仍然保持在70%,在此之后,我得到异常“java.io.ioException:设备上没有空间”,作业被杀死。

set mapreduce.task.io.sort.mb=256;
set mapreduce.task.io.sort.factor=100;
set mapreduce.map.output.compress=true;
set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.GzipCodec;
set mapred.child.java.opts=-Xmx1024m;
insert overwrite table output select col1, col2, name1, name2, col3, col4, 
t.zip, t.state from table1 m join table2 t ON (t.state=m.state and t.zip=m.zip) 
where matchStrings(concat(name1,'|',name2))>=0.9;

有人能建议我该做些什么来提高绩效吗?

共有1个答案

潘兴朝
2023-03-14

该异常可能表明集群中没有足够的空间用于运行的查询创建的临时文件。您应该尝试向集群添加更多的磁盘空间,或者通过使用子查询来首先筛选每个表中的行,从而减少联接的行数量。

 类似资料:
  • 我在Select query where条件下执行了带有自定义配置单元UDF函数的配置单元SQL脚本,它已经运行了两天多。我想知道这里到底有什么问题?调用java需要很多时间,还是查询执行本身需要很多时间? 我的数据集如下,A表有200万条记录,B表有100万条记录,

  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?

  • 您的回应将不胜感激。谢了!

  • 我试图在Hive0.14中执行HiveACID事务属性,比如通过Java插入、删除和更新。我能够设置所需的ACID事务属性。还可以创建具有事务属性的表。但它失败了。下面是示例代码: 尝试插入时获得以下异常: 线程“main”java中出现异常。sql。SQLException:处理语句时出错:失败:执行错误,从组织返回代码1。阿帕奇。hadoop。蜂箱ql.exec。org的MapRedTask先

  • 添加/home/cloudera/date.jar到类路径添加资源:/home/cloudera/date.jar 请有人帮帮我,因为我是新来蜂巢的。有人能告诉我要遵循的步骤吗

  • 我看到这样一个udf: https://github.com/edwardcapriolo/hive-geoip 如何在Hive中利用udf?我可以自己创建函数名吗?