hive.optimize.skewjoin
时间: 2024-02-09 08:55:30 浏览: 115
hive.optimize.skewjoin 是 Hive 的一个配置参数,它用于优化 Hive 中的 Skew Join 操作。Skew Join 是一种特殊的 Join 操作,其中一个表中的某些键具有非常大的值,这可能导致任务不平衡和性能下降。启用 hive.optimize.skewjoin 参数可以使 Hive 在执行 Skew Join 时自动将数据重新分布,以使任务更平衡。这个参数默认情况下是关闭的。启用它可以提高 Skew Join 的执行效率。
相关问题
set hive.exec.dynamic.partition.mode=nonstrict; set mapreduce.map.memory.mb=8192; set mapreduce.reduce.memory.mb=8192; set hive.optimize.skewjoin = true; set mapreduce.map.java.opts=-Xmx1536m; set mapreduce.reduce.java.opts=-Xmx3072m; set mapred.reduce.tasks = 200 ; set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nostrick; set hive.exec.max.dynamic.partitions.pernode=100000;--设置动态分区个数 set hive.exec.max.dynamic.partitions=100000; set hive.exec.max.created.files=100000; --插入缺失的历史数据 insert into dw_oneapp.t_oneapp_buried_point partition(parnum) select t.* from dw_oneapp.t_oneapp_buried_point_his_tmp t left join dw_oneapp.t_oneapp_buried_point p on t.equip_id=p.equip_id where p.equip_id is null; insert overwrite table dw_oneapp.t_oneapp_buried_point partition(parnum) select t.* from dw_oneapp.t_oneapp_buried_point_tmp t where parnum like '20%';
这段代码是一个 Hive SQL 脚本,它包含了一系列的配置和两个插入语句。这些配置用于设置 Hive 的运行参数和优化选项,而插入语句用于将数据插入到 `dw_oneapp.t_oneapp_buried_point` 表的动态分区中。
在这个脚本中,首先设置了一些 Hive 的配置参数,如 `hive.exec.dynamic.partition.mode`、`mapreduce.map.memory.mb`、`hive.optimize.skewjoin` 等。这些参数可以根据你的需求进行调整,以优化 Hive 的执行性能和内存使用情况。
接下来,第一个插入语句使用了一个左连接操作,通过 `equip_id` 列将 `dw_oneapp.t_oneapp_buried_point_his_tmp` 表和 `dw_oneapp.t_oneapp_buried_point` 表进行连接,筛选出在 `dw_oneapp.t_oneapp_buried_point` 表中不存在的记录,并将其插入到 `dw_oneapp.t_oneapp_buried_point` 表的动态分区中。
第二个插入语句使用了一个覆写插入操作 (`insert overwrite`),从 `dw_oneapp.t_oneapp_buried_point_tmp` 表中选择符合条件的数据,并将其覆盖写入到 `dw_oneapp.t_oneapp_buried_point` 表的动态分区中。
请注意,这些代码片段可能需要根据你的具体环境和数据模型进行适当的调整和修改。同时,还需要确保表结构和分区定义的一致性,以及分区列的正确设置。
Execution Error, return code -1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
引用\[1\]中的错误信息表明在处理语句时出现了错误,具体是由于GC(垃圾回收)超过了限制。这可能是由于内存不足或者程序中存在内存泄漏导致的。要解决这个问题,可以尝试增加内存限制或者优化程序以减少内存使用。
引用\[2\]中提到了一些可能的解决方法。首先,可以尝试使用大的队列来处理作业,通过设置`mapreduce.job.queuename=hive`来指定队列。其次,可以尝试增加reduce任务的数量,通过设置`mapred.reduce.tasks=300`来增加reduce任务的并行度。最后,可以尝试启用优化选项`hive.optimize.skewjoin`来处理数据倾斜的情况。
综上所述,要解决"Execution Error, return code -1 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask"的问题,可以尝试增加内存限制、优化程序以减少内存使用,并且使用大的队列、增加reduce任务数量以及启用数据倾斜优化选项。
#### 引用[.reference_title]
- *1* *2* [[hive]return code -101 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask. GC overhead limit exceeded](https://blog.csdn.net/qq_35896718/article/details/127783938)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文