ハイブUDF機能

1、UDFの定義

  • UDF(ユーザー定義関数)ユーザー定義関数であるハイブ。ハイブは、機能が付属していますし、完全にビジネスニーズを満たすことができない、そして我々は、カスタム関数が必要

UDFの分類

  1. UDF:一から一は、A、列マッピングを出てきました。上部、SUBSTR関数:のような行レベルの操作であります
  2. UDAF:1の多くは、より多くの、行のマッピングよりも出てきました。そのような和/分として、行レベルの操作です。
  3. UDTF:多くの1つは、複数の出てきました。alteralビューなどと爆発します

これらの3つのカテゴリが、我々は書き換えUDFクラスのみの関数であります

2、書き込みUDF機能

(1)POM設定ファイル

コードをコピー
<?xmlのバージョン= "1.0"エンコード= "UTF-8"> 
<プロジェクトのxmlns = "http://maven.apache.org/POM/4.0.0"のxmlns:XSI = "のhttp://www.w3 .ORG / 2001 / XMLスキーマ・インスタンス」
のxsi:のschemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
<modelVersion> 4.0.0 </ modelVersion> 
<groupIdを> com.wsk.bigdata </ groupIdを> 
<たartifactId> G6-Hadoopの</たartifactId> 
<バージョン> 1.0 </ version>の
<名前> G6-Hadoopの</名前> 
<プロパティ> 
<maven.compiler.source> 1.7 </maven.compiler.source> 
<maven.compiler.target> 1.7 </maven.compiler.target> 
<project.build.sourceEncoding> UTF-8 </project.build 。sourceEncoding> 
<hadoop.version> 2.6.0-cdh5.7.0 </hadoop.version> 
<hive.version> 1.1.0-cdh5.7.0 </hive.version>
</プロパティ>  
<! - CDHの倉庫を追加- >
<リポジトリ> 
<リポジトリ> 
<ID>ネクサスaliyun </ ID> 
<URL> http://maven.aliyun.com/nexus/content/groups/public </ URL> 
</リポジトリ> 
<リポジトリ> 
<ID> Clouderaの</ ID> 
<URL> https://repository.cloudera.com/artifactory/cloudera-repos </ URL> 
</リポジトリ> 
</リポジトリ> 
<依存性> 
<! -添加のHadoop的依赖- > 
<依存性> 
<のgroupId> org.apache.hadoop </のgroupId> 
<たartifactId> Hadoopのクライアント</たartifactId> 
<バージョン> $ {hadoop.version} </バージョン> 
</依存> 
<依存性> 
<のgroupId >JUnitの</のgroupId> 
<たartifactId> JUnitの</たartifactId> 
<バージョン> 4.11 </バージョン> 
<スコープ>テスト</スコープ>
</依存> 
<! -添加ハイブ依赖- >
<依存性> 
<のgroupId> org.apache.hive </のgroupId> 
<たartifactId>ハイブ-EXEC </たartifactId> 
<バージョン> $ {hive.version} </バージョン> 
</依存> 
</依存関係> 
<ビルド> 
<プラグイン> 
<プラグイン> 
<groupIdを> org.apache.maven.plugins </ groupIdを> 
<たartifactId>のmaven-コンパイラプラグイン</たartifactId> 
<バージョン> 2.4 </ version>の
<設定> 
<ソース> 1.7 </ソース> 
<対象> 1.7 </ target>を
<エンコーディング> UTF-8 </エンコーディング> 
</ configuration>の
</プラグイン> 
</プラグイン> 
</ビルド> 
</プロジェクト>
コードをコピー

(2)UDF関数が書き込ま

 

(3)ジャー包装

 

 

 

(4)のjarパッケージをアップロード

[Hadoopの@ hadoop001 LIB] $ RZ 

[Hadoopの@ hadoop001 LIB] $ LL G6-Hadoopの-1.0.jar 

-rw-rを- r--の。1つのHadoop Hadoopの11447 2019年4月19日G6-Hadoopの-1.0.jar

 

注:jarファイルのパッケージは$ HIVE_HOME / lib /ディレクトリ以下にアップロードされている場合は、まで追加実行する必要はありません。

ハイブへのjarパッケージを追加します。  

構文:瓶/ジャーパッケージ名の追加ジャー+ディレクトリ

ハイブ>ジャー/home/hadoop/data/hive/g6-hadoop-1.0.jarを追加します。

(5)ハイブにUDF関数を作成します

唯一の現在の黒のウィンドウに-----一時的な機能を作成します

コードをコピー
CLASS_NAME AS TEMPORARY FUNCTION function_nameがCREATE;    

FUNCTION_NAME関数名を                         

******* CLASS_NAMEクラスパス、パッケージ名+クラス名の後ろのパッケージ*********ここでは、UDFを書く関数の最初の行があります何かの名前と、その後は、クラスを追加ポイントを追加します
コードをコピー

 例:

コードをコピー
ハイブ> TEMPORARY FUNCTION HelloUDF AS 'org.apache.hadoop.hive.ql.udf.HelloUDF'を作成します。

 OKの時間が取ら:0.485秒

ハイブ> 

ハイブ>ショーの機能を、【查看可以看到HelloUDF】
コードをコピー

 

テスト

コードをコピー
ハイブ> SELECT HelloUDF('17「); 

OK 

こんにちは:. 17 

メタデータ#mysqlの一時的な機能としてチェックインし、それが関連するメタデータ情報ではありません

mysqlの>のfuncsからSELECT *; 

空のSET(0.11秒)
コードをコピー

 

一時的な機能を削除します。

  • 语法:DROP TEMPORARY機能FUNCTION_NAME [IFはEXISTS]を、 

テスト

コードをコピー
ハイブ> DROP TEMPORARY FUNCTION IFはHelloUDFをEXISTS; 

OK 

要した時間:0.003秒

ハイブ> SELECT HelloUDF('17 ')が、

失敗しました:SemanticException [10011エラー]:1行目:無効な機能7。' HelloUDF」が

##実際に削除されていない問題ではありません、ウィンドウを再オープン
コードをコピー

永久的な機能を作成します。

コードをコピー
FUNCTION_NAME AS TEMPORARY JARのパスを使用して、CREATE FUNCTIONのCLASS_NAME; 

FUNCTION_NAME関数名                         

CLASS_NAMEクラスパス、

パッケージ名、クラス名+ 

パスのjarパッケージのパスHDFS
コードをコピー

指定されたディレクトリにアップロードjarファイル

コードをコピー
[Hadoopの@ Hadoopのハイブ-1.1.0-cdh5.7.0] $ HadoopのFS -mkdir / libに

[Hadoopの@ Hadoopのハイブ-1.1.0-cdh5.7.0] $ HadoopのFS -put /ホーム/ Hadoopの/データ/ハイブ/ hive_UDF .jar / libに/ 

[Hadoopの@ hadoop001〜] $ HadoopのFS -mkdir / libに
[Hadoopの@ hadoop001〜] $ HadoopのFS -ls / libに
[Hadoopの@ hadoop001〜] $ HadoopのFS -put〜/ libに/ G6-hadoop- 1.0.jar / libに/把本地的瓶上传到HDFS的/ libに/目录下
[Hadoopの@ hadoop001〜] $ HadoopのFS -ls / libに
コードをコピー

UDFの永久的な機能を作成します。

コードをコピー
FUNCTION HelloUDF AS 'org.apache.hadoop.hive.ql.udf.HelloUDF' CREATE 

使ってJAR 'HDFSを:// hadoop001:9000 / libに/ G6-Hadoopの-1.0.jarを'; 

#测试ハイブ> HelloUDF( "17")を選択します。

OKこんにちは:17
コードをコピー

メタデータは、メタデータに登録されている、チェックイン情報の機能をテストするのMySQL

コードをコピー
MySQLの>のfuncsから選択*; 
+ --------- + ------------------------------ + -------- ----- + ------- + ------------ + ----------- + ----------- - + ------------ + 
| !func_idを| CLASS_NAME | CREATE_TIME | DB_ID | FUNC_NAME | FUNC_TYPE | OWNER_NAME | OWNER_TYPE | 
+ --------- + ------------------------------ + -------- ----- + ------- + ------------ + ----------- + ----------- - + ------------ + 
| 1 | org.apache.hadoop.hive.ql.udf.HelloUDF | 1555263915 | 6 | HelloUDF | 1 | NULL | USER | 
+ --------- + ------------------------------ + -------- ----- + ------- + ------------ + ----------- + ----------- - + ------------ +
コードをコピー
  • ウィンドウを作成するための恒久的な機能はまだ使用することができるだろう任意のリスタート機能で使用することができます

:公式サイトのアドレスを参照してくださいLanguageManual UDF

おすすめ

転載: www.cnblogs.com/guoyu1/p/12505506.html