1. 一小时快速迁移法-兼容Hive
- 参考文档:https://help.aliyun.com/zh/maxcompute/user-guide/write-a-hive-udf-in-java#task-2105893
- 特点:不需要改动代码,继承自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. 使用注意事项
- 运行时需设置MaxCompute项目的模式为Hive兼容模式。
set odps.sql.hive.compatible=true;select your_udf();
- 由于设置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来访问文件资源,具体实现:
- 下载文件:hdfs:///path/of/file.file。并通过dataworks或者odpscmd的方式上传archive资源。
# odpscmdaddarchive<local_file>[as<alias>][comment'<comment>'][-f];
- 继承ODPS提供的UDF基类,重写UDF,从ExecutionContext读取文件资源并进行业务逻辑的开发
packagecom.hive_udf; importcom.aliyun.odps.udf.UDF; importcom.aliyun.odps.udf.ExecutionContext; publicclassIp2Location2extendsUDF { InputStreamin; publicvoidsetup(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