在配置单元中添加UDF时出错

时间:2016-07-21 16:44:11

标签: hadoop hive

我必须在配置单元中添加UDF。 我正在尝试的查询是:

create function strip1 as 'com.hadoopbook.hive.Strip' using jar '/home/hduser/Hadoop-tutorial/hadoop-book-master/ch17-hive/src/main/java/com/hadoopbook/hive/Strip.jar'

但我得到一个例外:

  

失败:执行错误,从org.apache.hadoop.hive.ql.exec.FunctionTask返回代码1。 Hive仓库是非本地的,但/home/hduser/Hadoop-tutorial/hadoop-book-master/ch17-hive/src/main/java/com/hadoopbook/hive/Strip.jar指定本地文件系统上的文件。非本地仓库上的资源应指定非本地方案/路径

有人能说出如何解决这个问题吗?

3 个答案:

答案 0 :(得分:0)

三个选项:

  1. 在hdfs上复制jar并使用该路径。
  2. OR

    1. 错误告诉您:在$HIVE_HOME/conf目录中,hive-default.xml和/或hive-site.xml具有hive.metastore.warehouse.dir属性。将hdfs:/添加到此路径,然后重新启动/重新运行hive shell / script:

       <property>
         <name>hive.metastore.warehouse.dir</name>
         <value>hdfs://usr/hive/warehouse </value>
         <description>location of the warehouse directory</description>
       </property>
      
    2. OR

      1. 如果您正在从hive shell运行配置单元查询,那么:

         hive> set hive.metastore.warehouse.dir;
         hive.metastore.warehouse.dir=/user/hive/warehouse
        

        上面的命令打印路径,只需在hdfs:/前面添加前缀,然后重新运行你的hive命令:

        hive> set hive.metastore.warehouse.dir="hdfs://user/hive/warehouse";
        

答案 1 :(得分:0)

您可以将配置hive.aux.jars.path设置为/home/hduser/Hadoop-tutorial/hadoop-book-master/ch17-hive/src/main/java/com/hadoopbook/hive/ 并通过以下命令创建配置单元udf函数:

create function strip1 as 'com.hadoopbook.hive.Strip'

答案 2 :(得分:0)

您可以首先尝试将UDF jar添加到hdfs位置而不是本地目录:

let stockValues:any;
       stockValues= Object.values([2,3,4,5]);
           for(var i=0;i<stockValues.length;i++){

                console.log(stockValues[i] );

          }

,然后创建如下配置单元功能:

  $ add jar "hdfs://user/cloudera/hive/udf/Strip.jar"

希望这会有所帮助:)