1. 程式人生 > >hive之----建立udf自定義函式或刪除函式異常: Failed to read external resource

hive之----建立udf自定義函式或刪除函式異常: Failed to read external resource

1. 建立永久函式: 

首先將打好的jar包上傳好hdfs

執行命令 : 

create function 函式名 as 'udf類的全路徑(包名+類名)' using jar "自己的jar包存放在hdfs的路徑";

原因:

由於hdfs後面的ip加上埠號導致

解決辦法 :

hdfs的路徑中: 按理說ip加上埠號是沒問題的, 可是要保證埠號是正確的, 首先在C:\Windows\System32\drivers\etc\hosts裡對映主機名和ip, 在hosts最後追加,如:

155.155.155.155 superman     (就是"ip 主機名"的形式進行對映)

 只加上主機名或者ip或者什麼也不寫(如: hdfs:///udfjars/math.jar)後面不跟埠號也會找到對應的hdfs叢集, 所以這裡建議hdfs的路徑後面不跟埠號, 即可解決上述問題

或者 

上面兩種方法直接去掉埠號或者乾脆連主機名或ip都不要都可解決該問題

2. 刪除建立的函式時異常

和上面的報錯一樣, 不能讀取外部的資源. 不過這種情況一般很少遇到,  是因為在刪除之前匯入了一個外部的jar包 . 如:

在成功建立函式後再次建立函式(這一次加上上面那個報錯的埠, 即使報錯也會將jar包新增), 這時刪除時就會報錯

解決辦法:

很簡單, 將埠號去掉

或者直接連主機名或者ip都不要, 然後再次建立函式, 如果函式已經存在就會報錯:該函式已經存在; 不過沒關係, 我們要的只是將正確路徑下的jar包新增進來而已, 如果提示added ....to class path 說明成功了, 這是再刪除函式即可

思考: 

在刪除函式過程中, 要重新建立函式來新增正確的jar包, 能不能使用其他命令直接將jar包新增進去,而不用再次執行建立函式的命令,這種方法感覺有點多餘 , add jar hdfs://qfnode02/self/udfjars/GP1706LogAnalystic-1.0.jar; 用這個方法雖然可以新增進去,但是對於永久函式仍然不能操作!!  這個問題就留給大家思考吧 ! 想到方法的大神記得在評論區賜教一下!