2015-09-22 15 views
24

का उपयोग कर एकाधिक हाइव स्टोर्स पर पूछताछ मेरे पास एक स्पार्क एप्लिकेशन है जो स्पार्क इंजन का उपयोग करके हाइव टेबल पर हाइव और क्वेरी से सफलतापूर्वक कनेक्ट होगा।अपाचे स्पार्क

इसे बनाने के लिए, मैंने बस hive-site.xml को एप्लिकेशन के क्लासपाथ में जोड़ा और स्पार्क अपने मेटास्टोर से कनेक्ट करने के लिए hive-site.xml पढ़ेगा। स्पार्क की मेलिंग सूची में इस विधि का सुझाव दिया गया था।

अभी तक इतना अच्छा है। अब मैं दो हाइव स्टोर्स से कनेक्ट करना चाहता हूं और मुझे नहीं लगता कि मेरे क्लासपाथ में hive-site.xml जोड़ना उपयोगी होगा। मैंने कुछ लेख और स्पार्क मेलिंग सूचियों को संदर्भित किया लेकिन कोई भी ऐसा नहीं कर सका।

क्या कोई सुझाव दे सकता है कि मैं इसे कैसे प्राप्त कर सकता हूं?

धन्यवाद।

डॉक्स के लिए भेजा:

+2

सिर्फ एक कामकाज का विचार: एचआईवीएस डेटा पर हाइव डेटा रहता है, फिर भी आप एक फ़ाइल या डीआईआर पर डेटाफ्रेम बना सकते हैं? मेरा मतलब है, 'sc.wholeTextFiles (' hdfs: // host/usr/hive/गोदाम/mytable ')' आपको हाइव टेबल की सामग्री देगा। निश्चित रूप से, आप मेटा-डेटा का आराम खो देंगे, लेकिन यह काम कर सकता है। – mehmetminanc

+0

मैंने खुद से एक ही सवाल पूछा है, बहुत कुछ खोजा है, और स्पार्क के कुछ कोड पढ़ा है - अब तक मुझे लगभग आश्वस्त है कि कम से कम एक ही स्पार्ककॉन्टेक्स्ट में नहीं है :( –

+0

@ कार्तिक-मांचला मैंने सेटअप करने की कोशिश की स्पार्क-हाइव और इसे हॉर्टनवर्क्स सैंडबॉक्स चलाया लेकिन मुझे कुछ त्रुटियां मिल रही हैं, क्या आप इस में मेरी मदद कर सकते हैं। –

उत्तर

4

मुझे लगता है कि जेडीबीसी का उपयोग कर दूरस्थ डेटाबेस से डेटा जोड़ने और पढ़ने की स्पार्क एसक्यूएल क्षमता का उपयोग करके यह संभव है।

एक विस्तृत आर & डी के बाद, मैं जेडीबीसी का उपयोग करके दो अलग-अलग हाइव वातावरण से कनेक्ट करने में सफलतापूर्वक सक्षम था और आगे की प्रक्रिया के लिए हाइव टेबल को स्पार्क में डेटाफ्रेम के रूप में लोड करने में सक्षम था।

पर्यावरण विवरण

Hadoop-2.6.0

अपाचे-छत्ता-2.0.0-बिन

चिंगारी 1.3.1-बिन-hadoop2.6

कोड नमूना हाइवमल्टी पर्यावरण।स्केला

import org.apache.spark.SparkConf 
    import org.apache.spark.sql.SQLContext 
    import org.apache.spark.SparkContext 
    object HiveMultiEnvironment { 
     def main(args: Array[String]) { 
     var conf = new SparkConf().setAppName("JDBC").setMaster("local") 
     var sc = new SparkContext(conf) 
     var sqlContext = new SQLContext(sc) 

// load hive table (or) sub-query from Environment 1 

     val jdbcDF1 = sqlContext.load("jdbc", Map(
      "url" -> "jdbc:hive2://<host1>:10000/<db>", 
      "dbtable" -> "<db.tablename or subquery>", 
      "driver" -> "org.apache.hive.jdbc.HiveDriver", 
      "user" -> "<username>", 
      "password" -> "<password>")) 
     jdbcDF1.foreach { println } 

// load hive table (or) sub-query from Environment 2 

     val jdbcDF2 = sqlContext.load("jdbc", Map(
      "url" -> "jdbc:hive2://<host2>:10000/<db>", 
      "dbtable" -> "<db.tablename> or <subquery>", 
      "driver" -> "org.apache.hive.jdbc.HiveDriver", 
      "user" -> "<username>", 
      "password" -> "<password>")) 
     jdbcDF2.foreach { println } 
     } 
// todo: business logic 
    } 

अन्य मापदंडों भी इस तरह के partitionColumn सेटिंग के रूप में SqlContext का उपयोग कर लोड होने के दौरान सेट किया जा सकता। ग्रहण से https://spark.apache.org/docs/1.3.0/sql-programming-guide.html

बिल्ड पथ: विवरण 'JDBC करने के लिए अन्य डेटाबेस' स्पार्क संदर्भ दस्तावेज़ में खंड के अंतर्गत खोजा

enter image description here

मैं क्या प्रयास नहीं किया है

उपयोग पर्यावरण के लिए HiveContext और पर्यावरण के लिए SqlContext 2

आशा है कि यह उपयोगी होगा।

+0

यह उत्तर निश्चित रूप से सहायक है। मैंने पहले यह कोशिश की है और jdbc दृष्टिकोण के साथ समस्या थी .. मैं बनाए गए डेटाफ्रेम से विशिष्ट कॉलम नहीं चुन सका –

0

यह स्पार्क के वर्तमान संस्करण में संभव हो सकता है नहीं लगता है। स्पार्क रेपो में HiveContext code पढ़ना ऐसा लगता है कि hive.metastore.uris ऐसा कुछ है जो कई मेटास्टोरों के लिए कॉन्फ़िगर करने योग्य है, लेकिन ऐसा लगता है कि केवल उसी मेटास्टोर में अनावश्यकता के लिए उपयोग किया जाता है, न कि पूरी तरह से अलग मेटास्टोर।

अधिक जानकारी यहां https://cwiki.apache.org/confluence/display/Hive/AdminManual+MetastoreAdmin

लेकिन आप शायद आदेश सामंजस्य में इस पर काम करने के लिए कहीं न कहीं डेटा को समेकित करना होगा। या आप प्रत्येक स्टोर के लिए कई स्पार्क संदर्भ बना सकते हैं।

आप कई अलग-अलग मेटास्टोरों के लिए hive.metastore.uris को कॉन्फ़िगर करने का प्रयास कर सकते हैं, लेकिन शायद यह काम नहीं करेगा। यदि आप सुनिश्चित करते हैं कि आप spark.driver.allowMultipleContexts सेट करते हैं, तो यह सुनिश्चित करने के लिए कि आप प्रत्येक स्टोर के लिए एकाधिक स्पार्क संदर्भ बनाने का निर्णय लेते हैं, लेकिन यह आमतौर पर निराश होता है और अप्रत्याशित परिणाम हो सकता है।

+0

क्या आप कुछ विवरण जोड़ना चाहते हैं? शायद स्पार्क 2.0.0 को अपडेट करें? –

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