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