UDF函数,hive调用java包简单方法

UDF函数,是hadoop在强大的大数据批量导入导出操作之余,为了满足复杂的数据逻辑操作留下的接口

核心思想:不管是UDF函数还是自定义处理jar包,都是要放置在hadoop服务器上的,相当于hadoop多出了一个自定义的处理数据的方法

1)其中调用的不管是参数还是数据库都是以hadoop本身的服务器环境路径为本地路径,而不是自己操作的java环境

2)

现在记录下2种近期使用过的简单方法,非常简单。

1、函数调用

1)导入UDF架包,保证引用UDF时不会编译报错

2)java中建任意类继承UDF,然后重写其evaluate方法,参数为你想操作的字段的值

-- 建议单一修改字段值时但是hive自带函数不满足条件时使用  不建议处理复杂操作

3)将写好的java类编译为.class文件   可以使用eclipse或者intelij等IDE工具直接获取,或者使用jdk编译方式

-- jdk编译方式,将写好的java类拷贝出来放在1个路径简单的位置, win+R --cmd  打开命令窗口  cd到jdk的bin目录下

javac + java文件位置   回车运行即可,若报错 检查bin目录下是否缺少javac组件或者文件路径是否写错

4)打包  仍然可以使用eclipse或者intelij等IDE工具直接打包  也可以使用jar命令打包方式   保证2种方式打出来的包结构相同即可

-- jar打包方式  新建文件夹,名称英文即可,此处假设为com。将3)步生成好的class文件放入 假设为test.class

cd 到com的同级目录   使用命令  jar -cvf testUdf.jar com    运行后会在com的同级目录中出现名称testUdf.jar的包

5)将包上传到hadoop服务器上你可以找到的位置  假设为  /home/hadoop/soft/file/testUdf.jar

6)将包加入hive    进入hive环境,输入命令:add jar  /home/hadoop/soft/file/testUdf.jar;

1> 临时方式:create temporary function testFunction as ‘com.test‘;  -- 只对当前session起效,即退出hive后,下次要使用需要再次创建

2>永久生效:

《1》 上传到 hdfs,使用命令:hdfs  dfs -put /home/hadoop/soft/file/testUdf.jar /lib

《2》 创建函数  create function functionTest as ‘com.test‘ using jar ‘hdfs:///lib/testUdf.jar‘;

2、 比较实用的 包jar调用,使用sh的脚本调用方式   实现方法更加简单

1)不用实现UDF,直接像写正常的java类那样写一个你要处理数据的类,包含1个main函数即可

2)入参从main函数的 args中取,可以为任意类型,第1个为args[0],第2个为args[1] 以此类推

3)将写好的java程序打包,

这里需要注意的是:除了jdk的架包外,若还需要其他架包一起打包进jar‘。一般若是作数据处理是不需要其他包的,若有

需要特别处理的方法,可以自己写一个工具类然后把整个函数拷贝进去

4)将打好的包上传到hadoop上自己熟悉的位置,使用sh脚本调用jar包,带上自己要使用的参数即可

5)sh调用方式: 暂无

需要引起注意的地方: 1》  hadoop我使用的环境是原先配置的有jdk,若使用者没有需要自己配置

                2》  此方法适用于 使用参数 查询 hive数据进行复杂算法逻辑

原文地址:https://www.cnblogs.com/mzyy/p/9879696.html

时间: 2024-07-31 19:29:36

UDF函数,hive调用java包简单方法的相关文章

世界上最恶心的调用方法:Delphi调用Java的class方法法

世界上最恶心的调用方法是,:用Delphi调用Java的class方法: 如果写了一个java方法: package com.api; public class DelphiCallJava { public static String dTest(String args,int args2,String args3){ if(args==null){ return "您沒有輸入參數."; }else { return "您輸入的參數是:"+args; } } }

Discuz! X2.5 添加自定义数据调用模块(简单方法)

转:http://521-wf.com/archives/46.html Discuz! X2.5 添加自定义数据调用模块(简单方法) Discuz!X系列的diy功能还是相当不错的,在对其进行二次开发的过程中,或许需要加入新的数据调用模块,这样可以使你开发的功能模块也像原来的模块一样,只需要点点鼠标,填写一些简单的信息,就可以在各个页面的各个位置显示你想显示的数据啦. 以下就目前最新版X2.5做一个简答的介绍:大致可以分为以下三个步骤:一.添加数据调用程序二.后台更新diy模块分类缓存三.添加

.Net调用Java的实现方法

一. IKVM 1.1下载配置IKVM 1.1.1. 下载路径 http://www.ikvm.net/index.html 1.1.2. 设置路径 解压ikvm-0.42.0.3.zip,并将%IKVM_HOME%/bin添加到path中.此处的%IKVM_HOME%是指解压后ikvm的主目录. 1.2第一种方式:直接将.class文件转化成.dll 网站介绍 http://www.codeproject.com/Articles/13549/Using-Java-Classes-in-you

.NET调用JAVA的WebService方法

原文:https://www.cnblogs.com/fengyao/archive/2010/06/14/1749383.html 调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,在网上也有相关资料,但是都整理的不够清晰明了.根据网上的资料,个人也对各种方法进行了尝试,费了不少精力,为此特将自己的解决方法进行总结一下,以备以后需要以及相关朋友参考. 先说说的思路:

C# 调用Jar包的方法

在C#中调用Java生成的jar库文件的方法 一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . 其中test.jar为要生成的jar包:com/ . 为指定的当前目录下的文件夹,该文件夹包括子文件夹及class文件: 二.到IKVM官方网站下载IKVM需要的组件  http://www.ikvm.net/ ikvm-0.42.0.3.zip ikvmbin-

C#实现调用Java类中方法

基本思路: 用C#实现调用Java编写的类中的方法:重点是将Java编写的程序打包成Jar,然后使用开源工具IKVM将其转化成DLL控件,在.NET环境下调用. 分为以下步骤: 1.下载JDK6(注:JDK7下可能不支持,建议使用JDK6和Eclipse),进行安装,然后配置环境变量Path,将JDK安装的路径(例如:D:\Program Files\Java\jdk1.6.0_10\bin)添加到Path变量后面,如图所示: 用cmd打开DOS框,输入javac就可以查看是否配置成功,配置成功

delphi xe6 调用java GPS的方法

如果用xe6自带的LocationSensor控件,默认优先使用网络位置,网络位置定位精度不准确,不能满足高精度定位的要求.但xe6自带的LocationSensor控件不能指定网络定位优先还是GPS定位优先,如果调用java API是可以指定优先使用GPS定位,以下代码经实测证实是可以直接指定GPS定位的. uses Androidapi.JNI.Location, Androidapi.JNIBridge, Androidapi.JNI.JavaTypes, Androidapi.JNI.O

X2.5 添加自定义数据调用模块(简单方法)

Discuz!X系列的diy功能还是相当不错的,在对其进行二次开发的过程中,或许需要加入新的数据调用模块,这样可以使你开发的功能模块也像原来的模块一样,只需要点点鼠标,填写一些简单的信息,就可以在各个页面的各个位置显示你想显示的数据啦. 以下就目前最新版X2.5做一个简答的介绍:大致可以分为以下三个步骤:一.添加数据调用程序二.后台更新diy模块分类缓存三.添加相应的数据模板 具体操作如下:一.添加数据调用程序1> 在  source/class/block/ 目录下新建文件夹如 :news2>

调用WebService的简单方法

package com.dovepay.webservice.internal.test; import java.net.MalformedURLException; import java.net.URL; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Servic