美文网首页
hive 开启 python udf

hive 开启 python udf

作者: 后知不觉1 | 来源:发表于2022-06-08 14:13 被阅读0次

    背景

    hive需要开启python udf功能,线上代码分支丢失,只能其他分支的一个类进行替换

    在不开启时执行transfrom语句报错

       org.apache.hadoop.hive.ql.security.authorization.plugin.HiveAccessControlException: Query with transform clause is disallowed in current configuration.
                at org.apache.hadoop.hive.ql.security.authorization.plugin.DisallowTransformHook.run(DisallowTransformHook.java:34)
                at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1681)
                at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1453)
                at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1171)
                at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1166)
                at org.apache.hive.service.cli.operation.SQLOperation.runQuery(SQLOperation.java:242)
                at org.apache.hive.service.cli.operation.SQLOperation.access$800(SQLOperation.java:91)
                at org.apache.hive.service.cli.operation.SQLOperation$BackgroundWork$1.run(SQLOperation.java:334)
                at java.security.AccessController.doPrivileged(Native Method)
                at javax.security.auth.Subject.doAs(Subject.java:422)
                at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)
                at org.apache.hive.service.cli.operation.SQLOperation$BackgroundWork.run(SQLOperation.java:347)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:748)
    

    操作

    1、修改代码

    源代码

    public class DisallowTransformHook implements ExecuteWithHookContext {
    
          @Override
          public void run(HookContext hookContext) throws Exception {
            QueryProperties qProps = hookContext.getQueryPlan().getQueryProperties();
            if (null == qProps) {
              return; // its a ddl query.
            } 
            if (qProps.usesScript()) {
               throw new HiveAccessControlException("Query with transform clause is disallowed in"
                   + " current configuration.");
            }
          }
        }
    

    修改

    public class DisallowTransformHook implements ExecuteWithHookContext {
          @Override
          public void run(HookContext hookContext) throws Exception {
            QueryProperties qProps = hookContext.getQueryPlan().getQueryProperties();
            if (null == qProps) {
              return; // its a ddl query.
            } 
        //    if (qProps.usesScript()) {
        //       throw new HiveAccessControlException("Query with transform clause is disallowed in"
        //           + " current configuration.");
        //    }
          }
        }
    

    2、编译打包

     mvn clean install -Dmaven.test.skip=true
    

    3、替换包class文件

    3.1、将线上包复制
    cp $HIVE_HOME/lib/hive-exec-2.1.1.jar   /work/hive-exec-2.1.1.zip
    
    3.2、解压包
    unzip /work/hive-exec-2.1.1.zip -d /work
    
    3.3、替换文件

    将编译后的包在其他目录执行上述步骤,并将文件替换到线上包中

    3.4、重新打包
     cd /work
     zip -r hive-exec.zip *
     mv hive-exec.zip hive-exec-2.1.1.jar
    
    3.5、替换原有hive-exec-2.1.1.jar并重启hive

    成功demo


    image.png

    相关文章

      网友评论

          本文标题:hive 开启 python udf

          本文链接:https://www.haomeiwen.com/subject/axqumrtx.html