2012-02-23 18 views
8

पर यूडीएफ चलाने में असमर्थ मैं थ्रिफ्ट सर्वर मोड में हाइव चला रहा हूं। मैं, एक जार फ़ाइल में एक यूडीएफ कि मैंहाइव सर्वर

add jar <path to jar> 
create temporary function func_name as 'com.test.udf.UDF_CLASS' 

चल हालांकि द्वारा उपयोग करने के लिए कोशिश कर रहा हूँ जब मैं बनाने के अस्थायी समारोह आदेश मैं एक त्रुटि

क्वेरी लौटे गैर शून्य कोड प्राप्त चलाने : 9, कारण: विफल: निष्पादन त्रुटि, वापसी कोड 1 org.apache.hadoop.hive.ql.exec.FunctionTask

से मुझे लगता है कि जार के नाम & पथ और उपयोगकर्ता है कि जांच कर ली है हाइव सर्वर चलाने के सभी सी है जार तक पहुंचने के लिए सही अनुमतियां। अजीब बात यह है कि अगर मैं सीएलआई मोड में हाइव चलाता हूं और सटीक वही आदेश चलाता हूं, तो सबकुछ काम करता है। हाइव सीएलआई क्यों हाइव थ्रिफ्ट सर्वर से भिन्न व्यवहार कर सकता है पर कोई विचार?

उत्तर

3

समस्या ठीक की गई निम्न चरणों का उपयोग:

1) में प्रत्येक यूडीएफ जार जगह/usr/lib/छत्ता/auxlib

2) छत्ता-site.xml में प्रत्येक जार करने के लिए पथ निर्दिष्ट करें hive.aux.jars.path संपत्ति (उदा: फ़ाइल: ///usr/lib/hive/auxlib/jar1.jar,file: ///usr/lib/hive/auxlib/jar2.jar)

3) हाइव सर्वर शुरू करने के बाद प्रत्येक यूडीएफ के लिए 'com.test.udf.ClassName' के रूप में अस्थायी फ़ंक्शन func_name को चलाने के लिए हाइव सर्वर को चलाने के लिए एक स्क्रिप्ट अनुरोध बनाने के लिए

संपादित करें: हाइव 0.9 के लिए कोई फर्क नहीं पड़ता कि मैंने क्या किया है, हिवेरवर को ऑक्सलिब निर्देशिका में जार नहीं मिल सका। इसे Hiveserver 0.9 पर काम करने के लिए मुझे हाइव के क्लासपाथ द्वारा निर्दिष्ट निर्देशिका में जार डंप करना पड़ा।

0

तुम भी छत्ता हाइव आदेश को --auxpath विकल्प पास करके ऐसा कर सकते हैं --auxpath /path-to-/hive-examples.jar

या

HIVE_AUX_JARS_PATH पर्यावरण varialble की स्थापना द्वारा ।

+2

संस्करण 0.7.0 (संस्करण मैं उपयोग कर रहा हूँ) एक कमांड लाइन विकल्प के बजाय मानक HIVE_OPTS के रूप में के बाद से 0.7.0 ही स्वीकार किए जाते HIVE_PORT के लिए बचत हाइव सर्वर के साथ उन लोगों के काम का न तो। हाइव सीएलआई ने आपके द्वारा बताए गए दो तरीकों का समर्थन किया है, लेकिन उन लोगों के लिए समर्थन जब हाइवर सर्वर मोड में चल रहा था केवल मुझे 0.8 में जोड़ा गया था। – jwegan

7

थोड़ी देर के लिए इसके साथ खेलने के बाद मुझे .class फ़ाइल को एक निर्देशिका संरचना में डालकर काम करने के लिए मिला जो उसके पैकेज से मेल खाता है, और इसे वहां से .jar में जोड़ रहा है। संदर्भ के लिए मैंने पूरी प्रक्रिया को शामिल किया है, जिसमें हाइव में संकलन और डालने शामिल है।

  1. मैं यूडीएफ उदाहरण here
  2. इस्तेमाल किया यह संकलित करें: javac -classpath $CLASSPATH Lower.javaनोट: क्लासस्पैट को इस तरह परिभाषित किया गया था: CLASSPATH=$(ls $HIVE_HOME/lib/hive-serde-*.jar):$(ls $HIVE_HOME/lib/hive-exec-*.jar):$(ls $HADOOP_HOME/hadoop-core-*.jar), जैसा कि here वर्णित है।
  3. कॉपी एक फ़ोल्डर com/उदाहरण/छत्ता/यूडीएफ को .class फ़ाइल/
  4. यह एक जार में जोड़ा इस आदेश के साथ: jar -cf lower.jar com/example/hive/udf/Lower.class
  5. सत्यापित करें कि पैकेज सही दिखता है: jar -tf lower.jar। आपको इस तरह की एक रेखा देखना चाहिए: com/example/hive/udf/Lower.class
  6. जार को हाइव में आयात करें।add jar lower.jar; create temporary function my_lower as 'com.example.hive.udf.Lower';
+0

यह सुनिश्चित नहीं है कि किसी ने इसे क्यों वोट दिया .. मुझे एक ही समस्या थी और यह मेरे लिए काम किया ... एडब्ल्यूएस ईएमआर –

+2

पर हाइव 0.11.0 का उपयोग करना भी मेरे लिए काम करता है :) पहले चरण में लिंक अब टूटा हुआ है, मुझे लगता है कि यह इंगित करना चाहिए: https://cwiki.apache.org/confluence/display/Hive/HivePlugins – Nadine

संबंधित मुद्दे