免费注册
帮助文档(华北一、二)

  • 4.1 支持自定义UDF函数

    下面提供2种方式用于编写udf函数,第一种是通过Eclipse,第二种是直接在托管Hadoop集群的master节点上利用shell脚本编译

    在Eclipse中编写自定义Hive udf函数

    1 在eclipse中新建java project: hiveudf;

    2 在hiveudf工作中添加一个文件夹lib,lib包需要拷贝相关jar包,添加完毕后如下图所示:

    这四个包在可在uhadoop-******-master1的以下位置找到:

     
    /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.6.0-cdh5.4.9.jar 
    /home/hadoop/share/hadoop/hdfs/hadoop-hdfs-2.6.0-cdh5.4.9.jar 
    /home/hadoop/share/hadoop/common/hadoop-common-2.6.0-cdh5.4.9.jar 
    /home/hadoop/hive/lib/hive-exec-1.2.1.jar

    3 把lib目录下的所有jar包 Add to build Path

    4 创建一个UDFLower 类并且继承hive的UDF类,新建的UDFLower类的package请填空值。

     
    import org.apache.hadoop.hive.ql.exec.UDF;  
    import org.apache.hadoop.io.Text;  
    public class UDFLower extends UDF{       
      public Text evaluate(final Text s){            
        if (null == s){                
          return null;            
        }            
        return new Text(s.toString().toLowerCase());        
      }  
    }

    最终的结构如图所示:

    5 打包UDFLower.jar

    – 执行导出

    – 选择JAR file

    – 修改导出目录名称,并点击Finish,UDFLower.jar便制作完成了。

    – 通过ssh命令上传至hadoop master1节点

    如果master1已绑定外网,可直接通过外网IP上传,如果没有,请通过有外网IP的机器跳转。

    在Linux下编写自定义Hive udf函数

    ● 创建代码

    登录hadoop-******-master1节点,进入/data目录,创建udf代码:

     
    cd /data   
    mkdir hive_udf   
    touch UDFLower.java

    UDFLower.java代码如下:

     
    import org.apache.hadoop.hive.ql.exec.UDF; 
    import org.apache.hadoop.io.Text; 
    public class UDFLower extends UDF{      
      public Text evaluate(final Text s){           
        if (null == s){               
          return null;           
        }           
        return new Text(s.toString().toLowerCase());       
      } 
    }

    ● 同目录下创建编译文件compile.sh

     
    #!/bin/bash 
    rm -f UDFLower.jar 
    rm -f UDFLower*.class 
    export HADOOP_MAPRED_HOME=/home/hadoop 
    CLASSPATH=.:$HIVE_HOME/conf   
    for i in /home/hadoop/share/hadoop/common/*.jar ; do