天天看點

hive 中繼資料 自定義_如何在Hive中建立自定義函數UDF及如何直接通過Impala的同步中繼資料重用UDF的jar檔案,建立自定義函數...

如何在Hive中建立自定義函數UDF及如何直接通過Impala的同步中繼資料重用UDF的jar檔案,建立自定義函數

如何在Hive中建立自定義函數UDF及使用

如何在Impala中使用Hive的自定義函數

UDF函數開發

使用Intellij工具開發Hive的UDF函數,進行編譯;

1.使用Intellij工具通過Maven建立一個Java工程,并添加pom.xml依賴

org.apache.hive

hive-exec

${hive.version}

2.Java示例代碼如下

import org.apache.hadoop.hive.ql.exec.UDF;

public class SubStrUdf extends UDF {

public static String evaluate(String str) {

if(null == str || str.length()==0){

return "";

}else{

return str.substring(0,5);

}

}

}

此處使用一個簡單的日期截取來做示例,注意此處需要內建UDF類,重寫evaluate方法,來實作自己定義函數。

3.編譯jar包

前提條件是已配置Maven的環境變量,指令行進入工程目錄,執行如下指令:

mvn clean package

或者

直接在IDE maven 的插件裡面進行打包

clean

package

install

3.Hive使用自定義函數(UDF)

将章節2中編譯好的sql-udf-demo-1.0.jar上傳到叢集伺服器;

3.1建立臨時UDF

1.進入Hive的shell指令行,執行如下指令,建立臨時函數

hive> add jar /var/lib/hadoop-hdfs/sql-udf-demo-1.0.jar;

hive> create temporary function SubStrUdf as 'com.demo.hive.SubStrUdf';

2.在指令行測試該UDF函數

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;

hive會進行分布式的運算

3.2建立永久UDF

1.在HDFS中建立相應目錄,将sql-udf-demo-1.0.jar包上傳至該目錄

[[email protected] ~]$ hadoop fs -mkdir /udf

[[email protected] ~]$ hadoop fs -put sql-udf-demo-1.0.jar /udf

2.進入Hive的shell指令行,執行如下指令建立永久的UDF

hive> create function SubStrUdf as 'com.demo.hive.SubStrUdf' using jar 'hdfs://cdh21:8020/udf/sql-udf-demo-1.0.jar';

注意:在建立的時候如果帶有資料庫名,則該UDF函數隻對該庫生效,其它庫無法使用該UDF函數。

在指令行測試該函數是否可用,測試與上面一樣

3.驗證永久UDF函數是否生效

重新打開Hive CLI能正常使用建立的UDF函數。

hive> select SubStrUdf (send_erp_time), send_erp_time from erp_goods.order_goods limit 10 ;

4.Impala使用Hive的UDF(直接使用hive中的java的jar檔案中函數,同步中繼資料即可,可以直接複用哦)

1.在Impala shell指令行執行中繼資料同步指令

impala> invalidate metadata;

測試:

重新同步中繼資料之後再次進行測試:

注意,如果這邊在第一個impala-shell進去的時候,同步中繼資料之後還是不能使用hive建立的UDF函數的話,關閉用戶端連接配接,重新進入就可以使用了

删除UDF函數指令:

impala> drop function SubStrUdf;

且重新開機也生效

本站文章為3672js教程網友分享投稿,版權歸原作者,歡迎任何形式的轉載,但請務必注明出處。同時文章内容如有侵犯了您的權益,請聯系我們處理。