Spark 写 Hive table 非常慢【解决】
代码如下:
dataFrame.createOrReplaceTempView("view_page_utm")
val sql =
s"""
|insert overwrite table data_lake_v1.urchin_tracking_module PARTITION(cd='$date', tag ='ads')
| select p_id, platform, utm_campaign, utm_source, utm_term, utm_medium, ext_timestamp
| from view_page_utm
""".stripMargin
logger.info(s"sql -> $sql")
spark.sql(sql)
logger.info("sql done.")
执行代码 spark.sql 执行了 15分钟,看到 spark job 也结束了,但是 sql done 的日志,过了 40 分钟才出来。观察了 spark driver 上的日志,感觉时间花在 Hive 在拷贝文件上。 解决方案
1. 默认情况下, dataFrame 有 200 个分区,往hive中也写入了 200 的文件。这儿做了
dataFrame.reparition(1)
速度就有了巨大提升
2. 具体原理没有特别理解,查到一个相关的问题:
https://issues.apache.org/jira/browse/HIVE-13382
https://issues.apache.org/jira/browse/HIVE-11940
其中第二的链接说,hive为每一个分区创建一个 distcp 任务,所以分区越多越慢。
设置 "exec.stagingdir=/tmp/hive" 应该也能加速,但是我没有尝试
Spark 写 Hive table 非常慢【解决】的更多相关文章
- 【原创】大叔问题定位分享(21)spark执行insert overwrite非常慢,比hive还要慢
最近把一些sql执行从hive改到spark,发现执行更慢,sql主要是一些insert overwrite操作,从执行计划看到,用到InsertIntoHiveTable spark-sql> ...
- 【原创】大叔问题定位分享(16)spark写数据到hive外部表报错ClassCastException: org.apache.hadoop.hive.hbase.HiveHBaseTableOutputFormat cannot be cast to org.apache.hadoop.hive.ql.io.HiveOutputFormat
spark 2.1.1 spark在写数据到hive外部表(底层数据在hbase中)时会报错 Caused by: java.lang.ClassCastException: org.apache.h ...
- Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题
转: Oracle中使用Table()函数解决For循环中不写成 in (l_idlist)形式的问题 在实际PL/SQL编程中,我们要对动态取出来的一组数据,进行For循环处理,其基本程序逻辑为: ...
- Spark&Hive:如何使用scala开发spark访问hive作业,如何使用yarn resourcemanager。
背景: 接到任务,需要在一个一天数据量在460亿条记录的hive表中,筛选出某些host为特定的值时才解析该条记录的http_content中的经纬度: 解析规则譬如: 需要解析host: api.m ...
- 使用spark对hive表中的多列数据判重
本文处理的场景如下,hive表中的数据,对其中的多列进行判重deduplicate. 1.先解决依赖,spark相关的所有包,pom.xml spark-hive是我们进行hive表spark处理的关 ...
- Spark 读写hive 表
spark 读写hive表主要是通过sparkssSession 读表的时候,很简单,直接像写sql一样sparkSession.sql("select * from xx") 就 ...
- Spark访问Hive表
知识点1:Spark访问HIVE上面的数据 配置注意点:. 1.拷贝mysql-connector-java-5.1.38-bin.jar等相关的jar包到你${spark_home}/lib中(sp ...
- spark 读取hive 计算后写入hive
package com.grady import org.apache.spark.SparkConf import org.apache.spark.sql.{DataFrame, Row, Spa ...
- spark集成hive遭遇mysql check失败的问题
问题: spark集成hive,启动spark-shell或者spark-sql的时候,报错: INFO MetaStoreDirectSql: MySQL check failed, assumin ...
随机推荐
- 安装搭建appium运行环境
整体步骤: 1.安装appium依赖的Python包(Appium-Python-Client): 2.安装Appium Desktop(集成了appium server和node.js,所以不需要额 ...
- linux创建用户组、用户
创建用户组 groupadd -g 1024 nameinfo 创建用户 首先创建目录 mkdir -p /home 创建用户 useradd -g nameinfo -u 1024 -d /home ...
- Java面向对象内存图
1. java虚拟机的内存划分 2. 苹果手机类 package cn.itcast.day06.demo02; /* 定义一个类,用来模拟“手机”事物. 属性:品牌.价格.颜色 行为:打电话.发短信 ...
- 以 CheatEngine 为例的六个质量属性
日期:2020.02.23 博客期:158 星期日 这个软件是什么? 首先你可能不认识 CE 修改器,那我就简单一句话说明一下,Cheat Engine 是一款能够编辑进程内存的.能够编译分析汇编语言 ...
- BeanUtils学习笔记
一. 简介 BeanUtils提供对Java反射和自省API的包装.其主要目的是利用反射机制对JavaBean的属性进行简化操作处理.一个JavaBean通常包含了大量的属性,很多情况下,对JavaB ...
- python opencv:使用鼠标当做画笔
鼠标事件 import cv2 events=[i for i in dir(cv2) if 'EVENT'in i] print events 双击画圆圈 import cv2 import num ...
- Many Formulas
You are given a string S consisting of digits between 1 and 9, inclusive. You can insert the letter ...
- P2774 方格取数(网络流)
https://www.luogu.com.cn/problem/P2774 在一个有 m×n 个方格的棋盘中,每个方格中有一个正整数. 现要从方格中取数,使任意2个数所在方格没有公共边,且取出的数的 ...
- tkinter学习(1)
1.hit_me的一个简单tk窗口学习1.1 代码: import tkinter as tk win = tk.Tk() win.title('my first window') #定义标题,如果未 ...
- Hibernate学习(二)
持久化对象的声明周期 1.Hibernate管理的持久化对象(PO persistence object )的生命周期有四种状态,分别是transient.persistent.detached和re ...