Mysql->Hudi->Hive

news2025/1/10 21:04:49

一  准备

1.启动集群 /hive/mysql

start-all.sh

2.启动spark-shell

spark-shell \
  --master yarn \
//--packages org.apache.hudi:hudi-spark3.1-bundle_2.12:0.12.2 \
  --jars /opt/software/hudi-spark3.1-bundle_2.12-0.12.0.jar \
  --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer' \
  --conf 'spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension'

3.导入依赖包

import org.apache.hudi.DataSourceWriteOptions._
import org.apache.hudi.config.HoodieWriteConfig._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.{SaveMode, SparkSession} 
val tableName="demotable"
val hudiBasePath="hdfs://bigdata1:9000//user/hudi/hudi_ods.db/" + tableName

二 查询mysql数据

val DB_URL="jdbc:mysql://bigdata1:3306/ds_db01?allowPublicKeyRetrieval=true&serverTimezone=UTC&useSSL=false"
连接mysql
val df21 = spark.read.format("jdbc")
    .option("driver", "com.mysql.jdbc.Driver")  // mysql驱动程序类名
    .option("url", DB_URL)		  // 连接url
    .option("dbtable", "customer_inf")	  // 要读取的表
    .option("user", "root")		  // 连接账户,需修改为自己的
    .option("password","123456")		  // 连接密码,需修改为自己的
    .option("fetchsize","50")                  // 每轮读取多少行
    .load()
	

 --------------------  转换Transform-增加静态分区列 -------------
import spark.implicits._

查询
println(df21.count())   
df21.show(10) 

三 追加写入Hudi

val df22 = df21.withColumn("etl_date",lit("20220816"))

// val df22 = df21.withColumn("etl_date",date_format(date_sub(current_date(),1),"yyyyMMdd"))
val dfWithTs = df22.withColumn("ts", current_timestamp())

dfWithTs.write.format("hudi")
.mode(SaveMode.Overwrite)
.option("hoodie.insert.shuffle.parallelism","2")//操作并行度为2
.option("hoodie.upsert.shuffle.parallelism","2")
.option(RECORDKEY_FIELD.key(), "customer_inf_id")//记录键的字段名,作为hudi的主键
.option(PARTITIONPATH_FIELD.key(), "etl_date") 
.option(TBL_NAME.key(), tableName)
.save(hudiBasePath)

.option(PRECOMBINE_FIELD.key(), "InPutTime")//预聚合字段名
.option("hoodie.timestamp.field","modified_time")
.option("hoodie.timestamp.field","birthday")
.option("hoodie.timestamp.field","etl_date")
.option("hoodie.timestamp.field","register_time")
查询

val  env_data_df=spark.read.format("org.apache.hudi").load(hudiBasePath)

println(env_data_df.count())

env_data_df.show()

四 外接Hive

val sql_create_table =
      s"""
	     |create table hudi_demo.demotable(
         |customer_inf_id int,
         |  customer_id int,
         |  customer_name string ,
         |  identity_card_type tinyint ,
         |  identity_card_no string,
         |  mobile_phone string,
         |  customer_email string ,
         |  gender string ,
         |  customer_point int,
         |  register_time timestamp ,
         |  birthday date ,
         |  customer_level tinyint  ,
         |  customer_money decimal,
         |  modified_time string,
         |  ts timestamp,
         |  etl_date string
         |)
         |using hudi
         |tblproperties(
         |    primaryKey = 'customer_inf_id',
         |    type = 'cow'
         |)
         | options (
         |    hoodie.metadata.enable = 'true'
         | )
         |partitioned by (etl_date)
         |location '$hudiBasePath'
         |""".stripMargin

spark.sql(sql_create_table)

查询分区

hive查询

FAILED: RuntimeException java.lang.ClassNotFoundException: org.apache.hudi.hadoop.HoodieParquetInputFormat
87308 [a3eed69d-1888-48fb-82f7-7254909d770f main] ERROR org.apache.hadoop.hive.ql.Driver  - FAILED: RuntimeException java.lang.ClassNotFoundException: org.apache.hudi.hadoop.HoodieParquetInputFormat
 

报错Hudi集成Hive时的异常解决方法 java.lang.ClassNotFoundException: org.apache.hudi.hadoop.HoodieParquetInputFormat_田昕峣 Richard的博客-CSDN博客
原因

缺少相应的jar包org.apache.hudi.hadoop.HoodieParquetInputFormat

查看hudi的pom文件发现hive版本为2.3.1

重新编译构建

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/999485.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

二维码智慧门牌管理系统:强化地址管理,推动政府业务协同

文章目录 前言一、二维码智慧门牌管理系统的特点二、优势与效果 前言 随着科技的迅猛发展,我们的生活正在经历着前所未有的变革。在这个过程中,地址门牌的管理显得尤为重要。为了更好地管理地址资源,政府各部门需要实现标准地址资源共享交换…

uniapp 小程序 父组件调用子组件方法

答案:配合小程序API > this.selectComponent(""),来选择组件,再使用$vm选择组件实例,再调用方法,或者data 1 设置组件的id,如果你的多端,请跟据情况设置ref,class,id,以便通过小…

Python 变量的定义和数据类型的转换

变量 变量的定义 基本语法:变量名 值 变量名是给对象贴一个用于访问的标签,给对象绑定名字的过程也称为赋值,赋值符号 “” 变量名自定义,要满足标识符命名规则。 Python中,不需要事先声明变量名及其类型&#xff…

100个Python常见问题.pdf

大家好,我是涛哥。 最近,收到大家的反馈,能不能整理一些在python的开发中比较常见的问题,所以这段时间为大家梳理了100个Python常见问题,看看这里面有没有你需要的? 包括Python爬虫,PythonGUI编…

海外媒体发稿:Kol出文营销推广10方法解析

根据遵照下列10个秘笈,你将能够变成行业的领先者,增加自己的知名度并获得更多的可能性。展现个人ip,给予优质的内容,提升技术专业互联网,利用社交媒体和数据统计分析,和粉丝取得联系,参加行业主…

Java开发之框架(spring、springmvc、springboot、mybatis)【面试篇 完结版】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、框架知识分布二、Spring1. spring-单例bean① 问题引入② 单例bean是线程安全的吗③ 问题总结④ 实战面试 2. spring-AOP① 问题引入② AOP记录操作日志③ …

9.11黄金今日会爆涨吗?黄金原油最新投资行情走势咨询

黄金走势分析及策略      黄金上周五冲高回落,日线以长上影线阴线收尾,说明上方10日线1930附近阻力较强,这也是上周五的高点,也有可能是未来决定黄金能否打开新回升趋势的关键,下方目前受到中轨线1915一线支撑&…

无涯教程-JavaScript - FVSCHEDULE函数

描述 FVSCHEDULE函数在应用一系列复合利率后返回初始本金的未来值。使用FVSCHEDULE以可变或可调汇率计算投资的未来价值。 语法 FVSCHEDULE (principal, schedule)争论 Argument描述Required/OptionalPrincipalThe present value.RequiredScheduleAn array of interest rat…

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍

三维模型3DTile格式轻量化压缩处理工具常用几款软件介绍 三维模型3DTile格式的轻量化处理旨在减少模型的存储空间和提高渲染性能。以下是一些推荐的工具软件,可以用于实现这个目的: MeshLab:MeshLab是一个开源的三维模型处理软件&#xff0c…

51单片机智能小车(循迹、跟随、避障、测速、蓝牙、wifie、4g、语音识别)总结

目录 1.电机模块开发 1.1 让小车动起来 1.2 串口控制小车方向 1.3 如何进行小车PWM调速 1.4 PWM方式实现小车转向 2.循迹小车 2.1 循迹模块使用 2.2 循迹小车原理 2.3 循迹小车核心代码 3.跟随/避障小车 3.1 红外壁障模块分析​编辑 3.2 跟随小车的原理 3.3 跟随小…

职场新人向老板汇报工作时,需要注意什哪些事项?

引言: 职场新人在向老板汇报工作时,需要特别注意一些事项,以确保有效传达工作进展和获得老板的认可。本文将重点介绍职场新人在向老板汇报工作时需要留意的事项和技巧。 一、准备充分: 在向老板汇报工作之前,职场新人应…

使用Enterprise Architect(EA)的插件AtScope,解析代码中函数和变量调用关系

Enterprise Architect简称EA,是用来设计程序流程图和结构图的软件 AtScope是EA的插件,可以用来分析代码结构,查看工程中的文件之间的变量和函数调用关系 安装EA和AtScope都需要lisence,自行解决 这里以EA10版本为例 EA和AtScop…

【SpringBoot应用篇】SpringBoot集成Caffeine本地缓存

【SpringBoot应用篇】SpringBoot集成Caffeine本地缓存 本地缓存介绍本地缓存方案选型CaffeineSpringBoot 集成 Caffeine 两种方式SpringBoot 集成 Caffeine 方式一pomapplication.yml缓存配置类User实体UserMapperUserServiceUserController SpringBoot 集成 Caffeine 方式二po…

开源抖音小程序系统源码分享+完整版安装教程

给大家分享一个抖音小程序系统源码,系统是开源运营版,源码包含完整搭建部署教程,内含多套模板、模块化自由DIY功能,支持除抖音小程序制作外,还支持一键同步微信、支付宝、百度、今日头条端小程序等等,功能是…

使用Python操作CSV文件,方便又快捷

概念 CSV是逗号分隔值或者字符分割值,其文件以纯文本形式存储表格数据。 CSV文件可以用文本文件或者转换成EXCEL(直接用EXCEL也可以,但是可能会有一些问题)打开。因此更适合通过CSV文件进行程序之间转移表格数据。 应用场景 需…

uniapp 实现多音频同时播放 解决sessionCategory = “ambient“不生效问题

1.1完整代码 <template><view></view> </template><script>export default {data() {return {BGInnerAudioContext1: null, //背景1BGInnerAudioContext2: null, //背景2}},onLoad() {this.play1()this.play2()},methods: {//音频1play1() {//背…

淘女郎买家秀API接口

淘女郎买家秀API接口是一款便捷、安全、高效的接口服务&#xff0c;旨在帮助各类电商平台实现在线评价、商品推荐和用户洞察等功能。接口提供了一系列API功能&#xff0c;包括用户认证、淘宝订单查询、评价抓取、订单分析、商品推荐、场景洞察等。接口同时支持多种语言&#xf…

数据分析必知的统计知识——方差分析共八篇(其六)

6. 方差分析 单因素多水平方差分析 例6.1 不同装配方式对生产的过滤系统数量的差异性检验 某城市过滤水系统生产公司&#xff0c;有A、B、C3种方式进行过滤水系统的装配&#xff0c;该公司为了研究三种装配方式生产的过滤系统数量是否有差异&#xff0c;从全体装配工人中抽取…

第17章 站点构建

mini商城第17章 站点构建 一、课题 站点构建 二、回顾 1、Gateway限流 2、Nginx限流 3、Redis集群应用 4、缓存灾难处理 三、目标 1、Sentinel Sentinel介绍 Sentinel核心功能 Sentinel集成Gateway Sentinel控制台 2、Lvs+Nginx集群 Lvs负载均衡模式 NAT模式 TUN模式 …

——二叉树

二叉树种类 二叉树有两种主要的形式&#xff1a;满二叉树和完全二叉树。 满二叉树 如果一棵二叉树只有度为0的结点和度为2的结点&#xff0c;并且度为0的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 完全二叉树 在完全二叉树中&#xff0c;除了最底层节点可能没…