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數據進行復雜算法邏輯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM