2

を使用して、UDF を作成し、現在のハイブ セッション用に構成できますCREATE TEMPORARY FUNCTION。これを一度実行して、すべてのユーザーの今後のすべてのセッションでこの機能を利用できるようにする方法はありますか?

4

5 に答える 5

3

UDF を使用するには、次の 2 つの手順が必要です。

  1. クラスター内のすべてのノードで UDF jar を使用できるようにします。これは通常、次のようなコマンドでクラスターの分散キャッシュに追加することによって行われます。ADD JAR my_jar.jar
  2. UDF を登録して、Hive で認識できるようにします。これは基本的に、UDF の名前 (例: from_unixtime) を UDF のクラス (org.apache.hadoop.hive.ql.udf.FromUnixTime) にリンクします。これは通常、次のようなコマンドによって行われますCREATE TEMPORARY FUNCTION from_unixtime AS 'org.apache.hadoop.hive.ql.udf.FromUnixTime';

したがって、すべてのユーザーが UDF を使用できるようにするには、上記の 2 つの手順を実行する必要があります。#1 についてはexport HIVE_AUX_JARS_PATH = <path to the folder>、hive-env.sh で jar を利用可能にするようなことを行うことができます。

#2 を取得するのは難しいです。最善の方法は、Hive メタストアで UDF 名とクラス名の間のリンクをサポートすることです。ただし、現在はそうではありません。したがって、これを行うための本当に良い方法はありません。

上記の #1 と #2 の両方を行う .hiverc ファイルを使用することをお勧めします。これをホーム ディレクトリまたはハイブの bin ディレクトリに配置します (ただし、パッチはハイブの conf ディレクトリからも取得するように機能しています)。唯一の問題は、ユーザーが CLI を介してハイブにアクセスしている場合にのみ機能することです。JDBC を使用している場合は、Hive セッションの開始時にそのファイルを手動で取得する必要があります。

于 2012-12-19T23:55:34.803 に答える
0

上記の回答を拡張します。UDF をすべてのユーザー/セッションで真に利用できるようにするには、次のことが必要です。

  • ハイブ libs/ ディレクトリおよび/または HIVE_AUX_JARS_PATH に UDF を追加します。
  • 関数をFunctionRegistryクラスに追加し、 ハイブを再コンパイルします。はい。あまり楽しくない;)

Hive Bible (Programming Hive) から:

Here is an example change to FunctionRegistry where the new nvl() function is added
to Hive’s list of built-in functions:
...
registerUDF("parse_url", UDFParseUrl.class, false);
于 2014-07-25T01:40:07.503 に答える