hive自定義udf實現md5功能

Hive自定義UDF實現md5算法

Hive發展至今,自身已經很是成熟了,可是爲了靈活性,仍是提供了各類各樣的 插件的方式,只有你想不到的,沒有作不到的,主流的開源框架都有相似的機制,包括Hadoop,Solr,Hbase,ElasticSearch,這也是面向抽象編程的好處,很是容易擴展。java

最近在使用hive1.2.0的版本,由於要給有一列的數據生成md5簽名,便於查重數據使用,看了下hive的官網文檔發現是支持的,後來在Hue裏面試了下,發現不支持,還覺得是Hue的問題因而在後臺hive命令行裏面試了下,發現一樣不支持,官網的文檔應該是Hive2.x的了因此不支持也有可能,但也不必爲了使用個md5函數就把hive升級到最新版本,那樣有點本末倒置,那就寫個UDF解決吧,之前寫過Pig的UDF,很是簡單,Hive的應該也不會太難,看了官網文檔,果真很是easy,下面看下步驟:python

(1) 繼承UDF類,定義evaluate方法

注意,這裏用的是maven項目,只須要引入hive-exec包便可:linux

<dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
            <scope>provided</scope>
        </dependency>

evaluate方法並非重寫的方法,而是一個新的方法,Pig裏面是須要重寫exec方法,來完成自定義邏輯的,代碼以下:面試

package com.easy.md5;
import com.google.common.base.Strings;
import com.google.common.hash.Hashing;
import org.apache.hadoop.hive.ql.exec.UDF;
/**
 * Created by qindongliang on 2016/5/23.
 * Hive自定義UDF,計算md5值
 */
public class MD5 extends UDF {
    /**
     * @param s 傳入參數
     * @return md5值
     */
    public String evaluate(final String s) {
        if(Strings.isNullOrEmpty(s.trim())){
            return null;
        }
        return Hashing.md5().hashString(s.trim()).toString();
    }
}

(2)註冊Hive的UDF的jar包

程序完成後,打包成jar,而後上傳到對應的機器上,開始註冊本身的UDF函數,這裏有兩種方式:算法


A:臨時註冊sql

執行hive命令,進入終端:shell

add jar /home/hive/udfs/hive-md5-guava-1.0.0.jar;
create temporary function md5 as 'com.easy.md5.MD5';
select md5('hadoop');
--結果: 3abb766da6c2c2d7739f3cb7799a4caa

B:永久註冊(hive0.13以後支持)apache

在linux上,上傳jar包至HDFS中編程

hadoop fs -put hive-md5-guava-1.0.0.jar /user/tez/

進入hive終端框架

CREATE FUNCTION md5 AS 'com.easy.md5.MD5' USING JAR 'hdfs:///user/tez/hive-md5-guava-1.0.0.jar' ;
select md5('hadoop');
--結果: 3abb766da6c2c2d7739f3cb7799a4caa
--刪除臨時函數
DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
--刪除永久函數
DROP FUNCTION [IF EXISTS] function_name;
--從新加載函數 hive1.2.0以後支持
RELOAD FUNCTION;

這樣就不用每次打開終端都須要註冊了

(3)如何在Hue中註冊

Hue是一款基於Web可視化提交任務的框架,由python編寫,若是想要在hue中,使用自定義的UDF函數,須要稍做配置,不然使用過程當中可能會報錯,即便你在服務端已經註冊過了。

資源

(4) 公衆號:我是攻城師(woshigcs) 若有問題,可在後臺留言諮詢

相關文章
相關標籤/搜索