Hive UDFHive UDF 函數1 POM 文件2.UDF 函數3 利用idea打包4 添加hive udf函數4.1 上傳jar包到集群4.2 修改集群hdfs文件權限4.3 註冊UDF4.4 使用UDF
Hive UDF 函數
1 POM 文件
4.0.0填寫自己的組織名稱udf1.0-SNAPSHOTUTF82.6.0-cdh5.13.31.1.0-cdh5.13.3Apache HadoopApache Hadoophttps://repo1.maven.org/maven2/clouderaclouderahttps://repository.cloudera.com/artifactory/cloudera-repos/org.apache.hadoophadoop-common${hadoop.version}org.apache.hivehive-exec${hive.version}org.apache.maven.pluginsmaven-compiler-plugin1.81.8maven-assembly-plugin --> --> 填寫自己的組織名稱.PhoneUnlookUdf--> --> -->jar-with-dependenciesmake-assemblypackagesingle
2.UDF 函數
package 填寫自己的組織名稱; import org.apache.hadoop.hive.ql.exec.Description; import org.apache.hadoop.hive.ql.exec.UDF; // 上傳udf jar到集群 hdfs dfs -put udf-1.0-SNAPSHOT-jar-with-dependencies.jar /data/data_coe/data_asset/prod/db/tmp/udf/ // 修改文件權限 hdfs dfs -chmod -R 777 hdfs://idc-nn/data/data_coe/data_asset/prod/db/tmp/udf/ //註冊udf函數 create function tmp.pul as '填寫自己的組織名稱.PhoneUnlookUdf' using jar 'hdfs://idc-nn/data/data_coe/data_asset/prod/db/tmp/udf/udf-1.0-SNAPSHOT-jar-with-dependencies.jar public class PhoneUnlookUdf extends UDF { //重寫evaluate方法 public String evaluate(String phone){ if (phone.length() == 11){ String res = phone.substring(0, 3) + "****" + phone.substring(7, phone.length()); System.out.println(res); return res; } else { return phone; } } }
3 利用idea打包
先點clean,在點package
4 添加hive udf函數
集群的某些問題,不能直接通過添加服務器上本地文件到hive增加udf;需要將文件上傳到hdfs,然後定義udf函數。
4.1 上傳jar包到集群
// 上傳udf jar到集群 hdfs dfs -put udf-1.0-SNAPSHOT-jar-with-dependencies.jar /data/data_coe/data_asset/prod/db/tmp/udf/
4.2 修改集群hdfs文件權限
// 修改文件權限 hdfs dfs -chmod -R 777 hdfs://idc-nn/data/data_coe/data_asset/prod/db/tmp/udf/
4.3 註冊UDF
//註冊udf函數 create function tmp.pul as 'cn.mcd.com.PhoneUnlookUdf' using jar 'hdfs://idc-nn/data/data_coe/data_asset/prod/db/tmp/udf/udf-1.0-SNAPSHOT-jar-with-dependencies.jar
4.4 使用UDF
・・・
打開集群hive客戶端:
select tmp.pul(phone) from tmp.tmp_order limit 3;
・・・
[hongdian2012 ] 大數據 java hive udf函數的示例代碼(手機號碼脫敏)已經有258次圍觀