Env:
Drill 1.1Hive 1.0
MapR 4.1
Goal:
How to run Hive UDF in DrillSolution:
1. Create a Hive UDF
Sample code is https://github.com/viadea/HiveUDFa. Make sure UDF code has the annotation which contains the function name.
For example in MyUpper.java:@Description(
name = "my_upper",
value = "_FUNC_(str) - Converts a string to uppercase",
extended = "Example:\n" +
" > SELECT my_upper(a) FROM test;\n" +
" ABC"
)
b. Make sure UDF code package contains an empty drill-module.conf so that Drill can find this function.
# ls -altr src/main/resources/drill-module.conf -rw-r--r-- 1 root root 0 Aug 12 23:16 src/main/resources/drill-module.confAfter building the jar file, make sure the drill-module.conf is in the jar.
eg:
# jar tf target/MyUDF-1.0.0.jar |grep -i drill drill-module.conf
Note: Starting from Drill 1.4, the drill-module.conf needs to contain the classpath like below:
[root@v1 HiveUDF]# cat src/main/resources/drill-module.conf drill.classpath.scanning.packages += "openkb.hive.udf.MyUpper"Otherwise, below error may show up:
Caused By (org.apache.calcite.sql.validate.SqlValidatorException) No match found for function signature my_upper(<CHARACTER>)
2. Test the UDF in Hive
hive> create function h1db.MyUpper as 'openkb.hive.udf.MyUpper' USING JAR 'maprfs:///github/hiveudf/target/MyUDF-1.0.0.jar';
converting to local maprfs:///github/hiveudf/target/MyUDF-1.0.0.jar
Added [/tmp/82c83467-2484-41aa-833c-1e12fcba7d13_resources/MyUDF-1.0.0.jar] to class path
Added resources: [maprfs:///github/hiveudf/target/MyUDF-1.0.0.jar]
OK
Time taken: 0.117 seconds
hive> select h1db.MyUpper('abc');
OK
ABC
Time taken: 0.355 seconds, Fetched: 1 row(s)
3. Put the JAR file into /jars/3rdparty directory on all Drill nodes.
clush -a cp /xxx/target/MyUDF-1.0.0.jar /opt/mapr/drill/drill-1.1.0/jars/3rdparty/
4. Restart all drill-bits.
maprcli node services -name drill-bits -action restart -filter csvc=="drill-bits"
5. Test the UDF in Drill
0: jdbc:drill:zk=h2.poc.com:5181> select my_upper('abc') from sys.version;
+---------+
| EXPR$0 |
+---------+
| ABC |
+---------+
1 row selected (1.516 seconds)
DF48298217
ReplyDeleteBeğeni Satın Al
Garantili Takipçi
Takipçi Fiyatları
C014582A
ReplyDeleteKonya
Muğla
Hakkari
Iğdır
Karaman
Adıyaman
Çankırı
Tokat
Sivas
37747EB1
ReplyDeleteİnegöl
Balçova
Çayyolu
Polatlı
Akçay
Yıldırım
Dikili
Körfez
Sorgun
5DF7C199
ReplyDeletePayas
Seyhan
Fındıklı
Samandağ
Derince
Kalkan
Akyurt
Seferihisar
Keşan