阿里云MaxCompute-Hive UDF(Java)迁移上云实践

本文涉及的产品
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
简介: 阿里云MaxCompute-Hive UDF(Java)迁移上云实践

1. 一小时快速迁移法-兼容Hive

  1. 参考文档:https://help.aliyun.com/zh/maxcompute/user-guide/write-a-hive-udf-in-java#task-2105893
  2. 特点:不需要改动代码,继承自Hive的udf基类,诸如UDF,GenericUDF

1.1. 打包注意事项

MaxCompute兼容的Hive版本为2.1.0,对应Hadoop版本为2.7.2。如果UDF是在其他版本的Hive或Hadoop上开发的,您需要使用兼容的Hive或Hadoop版本重新编译UDF JAR包,详细的pom文件改动如下。

<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec --><dependency><groupId>org.apache.hive</groupId><artifactId>hive-exec</artifactId><version>2.1.0</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.2</version></dependency>

1.2. 使用注意事项

  1. 运行时需设置MaxCompute项目的模式为Hive兼容模式。
set odps.sql.hive.compatible=true;select your_udf();
  1. 由于设置compatible模式导致的odps与hive的函数行为不同的异常可以参考做重点监控:https://developer.aliyun.com/article/1333665?spm=a2c6h.13148508.setting.14.352b4f0eSOaqDn

2. 不兼容的情况

2.1. 读取HDFS或其他DFS

2.1.1. 样例代码

如下样例代码访问HDFS文件:

// 引入依赖importorg.apache.hadoop.conf.Configuration;
importorg.apache.hadoop.fs.FSDataInputStream;
importorg.apache.hadoop.fs.FileSystem;
importorg.apache.hadoop.fs.Path;
// 相关HDFS的访问、读取文件代码FileSystemfs=FileSystem.get(newConfiguration());
FSDataInputStreamis=fs.open(newPath("hdfs:///path/of/file.file"));

2.1.2. 修改方案

MaxCompte底层依赖分布式文件系统-盘古,如上在DFS中读取文件的方式可以在UDF执行过程中通过ODPS-SDK提供的运行时上下文对象ExecutionContext来访问文件资源,具体实现:

  1. 下载文件:hdfs:///path/of/file.file。并通过dataworks或者odpscmd的方式上传archive资源。

image.png

# odpscmdaddarchive<local_file>[as<alias>][comment'<comment>'][-f];
  1. 继承ODPS提供的UDF基类,重写UDF,从ExecutionContext读取文件资源并进行业务逻辑的开发
packagecom.hive_udf;
importcom.aliyun.odps.udf.UDF;
importcom.aliyun.odps.udf.ExecutionContext;
publicclassIp2Location2extendsUDF {
InputStreamin;
@Overridepublicvoidsetup(ExecutionContextctx) throwsUDFException {
try {
in=ctx.readResourceFileAsStream("file");
        } catch (IOExceptione) {
thrownewUDFException(e);
        }
    }
publicStringevaluate(Stringip) {
// do something with `in`    }
}

2.2. 访问外网或服务

MaxCompte(odps)项目名默认不支持访问外网或VPC,可以参考官网文档进行开通:https://help.aliyun.com/zh/maxcompute/user-guide/network-connection-process?spm=a2c4g.11186623.0.i5#section-pfp-oaa-n0f

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
相关文章
|
10天前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
4月前
|
Arthas 监控 Java
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
本文介绍了阿里云 Java Agent 4.x 版本在基于 OTel Java Agent 二次开发过程中的实践与思考,并重点从功能、性能、稳定性、兼容性四个方面介绍了所做的工作。同时也介绍了阿里云可观测团队积极参与开源建设取得的丰厚成果。
457 9
拥抱 OpenTelemetry:阿里云 Java Agent 演进实践
|
6月前
|
存储 SQL 分布式计算
Java连接阿里云MaxCompute例
要使用Java连接阿里云MaxCompute数据库,首先需在项目中添加MaxCompute JDBC驱动依赖,推荐通过Maven管理。避免在代码中直接写入AccessKey,应使用环境变量或配置文件安全存储。示例代码展示了如何注册驱动、建立连接及执行SQL查询。建议使用RAM用户提升安全性,并根据需要配置时区和公网访问权限。具体步骤和注意事项请参考阿里云官方文档。
559 10
|
7月前
|
Java 开发工具
通过Java SDK调用阿里云模型服务
在阿里云平台上,可以通过创建应用并使用模型服务完成特定任务,如生成文章内容。本示例展示了一段简化的Java代码,演示了如何调用阿里云模型服务生成关于“春秋战国经济与文化”的简短文章。示例代码通过设置系统角色为历史学家,并提出文章生成需求,最终处理并输出生成的文章内容。在实际部署前,请确保正确配置环境变量中的密钥和ID,并根据需要调整SDK导入语句及类名。更多详情和示例,请参考相关链接。
|
7月前
|
机器学习/深度学习 存储 缓存
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
Java本地高性能缓存实践问题之阿里云机器学习团队开源社区的问题如何解决
|
9月前
|
Java 对象存储
java对接阿里云OSS上传
java对接阿里云OSS上传
439 2
|
8月前
|
分布式计算 Java 调度
MaxCompute产品使用合集之使用Tunnel Java SDK上传BINARY数据类型时,应该使用什么作为数据类字节
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
9月前
|
Java 对象存储
阿里云OSS上传下载文件java
阿里云OSS上传下载文件java
500 0
|
9月前
|
存储 分布式计算 大数据
MaxCompute操作报错合集之通过UDF调用异常(其他使用http调用正常)。报错:java.lang.NoSuchMethodError:是什么导致的
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
113 0
|
14天前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
138 60
【Java并发】【线程池】带你从0-1入门线程池

相关产品

  • 云原生大数据计算服务 MaxCompute