2012-04-01 6 views
7

सारांश:

क्या मोंगोडीबी डेटा को पढ़ना संभव है, इसे हडोप के साथ संसाधित करना, और इसे आरडीबीएस (MySQL) में आउटपुट करना संभव है?

  1. आयात «Hadoop के लिए MongoDB कनेक्टर» साथ Hadoop में डेटा:

यह संभव करने के लिए है।

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

    मेरी समस्या यह है कि मैं डेटा विश्लेषण के लिए एक बड़ा मोंगोडीबी संग्रह पढ़ना चाहता हूं, लेकिन संग्रह के आकार का अर्थ है कि विश्लेषणात्मक नौकरी को संसाधित करने में बहुत लंबा समय लगेगा। दुर्भाग्यवश, मोंगोडीबी का अंतर्निर्मित मानचित्र-ढांचा ढांचा इस काम के लिए अच्छा काम नहीं करेगा, इसलिए मैं Apache Hadoop के साथ विश्लेषण करना पसंद करूंगा।

    मैं समझता हूं कि यह मोंगो डीबी से हडोप में «MongoDB Connector for Hadoop» का उपयोग करके संभवतः पढ़ा गया डेटा है, जो मोंगोडीबी से डेटा पढ़ता है, इसे हडोप में मैपरेडस के साथ संसाधित करता है, और आखिरकार परिणाम को मोंगोडीबी डेटाबेस में आउटपुट करता है।

    समस्या यह है कि मैं MapReduce के आउटपुट को मोंडोडीबी के बजाय एक MySQL डेटाबेस में जाना चाहता हूं, क्योंकि परिणाम अन्य MySQL तालिकाओं के साथ विलय होना चाहिए।

    इस उद्देश्य के लिए मुझे पता है कि स्क्वाप माईएसक्यूएल में हैडोप मैपराइडस के परिणाम निर्यात कर सकता है।

    आखिरकार, मैं मोंगोडीबी डेटा भी पढ़ना चाहता हूं, फिर इसे हडोप के साथ संसाधित करना चाहता हूं और अंततः परिणाम को एक MySQL डेटाबेस में आउटपुट करना चाहता हूं।

    क्या यह संभव है? ऐसा करने के लिए कौन से टूल्स उपलब्ध हैं?

    +0

    आपका प्रश्न अधिक स्पष्ट किया जा सकता है। मुझे यकीन नहीं है कि आप क्या करने की कोशिश कर रहे हैं। मैं आपके प्रश्न को संपादित करने के लिए संपादित करूंगा जो मुझे लगता है कि आप क्या कहने की कोशिश कर रहे हैं, लेकिन आपकी स्पष्टीकरण भी सहायक होगी। – brice

    +0

    मैं स्पष्टीकरण के लिए अपना प्रश्न अपडेट करता हूं – paganotti

    +0

    मेरे अपडेट किए गए उत्तर को देखें, जो आपको बताएगा कि आप जो भी कर रहे हैं उसे आप कैसे कर सकते हैं। – brice

    उत्तर

    10

    टी एल; डॉ: एक एक निर्गम फ़ॉर्मेटर है कि आपके Hadoop काम में एक RDBS को लिखते सेट करें:

    job.setOutputFormatClass(DBOutputFormat.class); 
    

    कई बातें ध्यान रखें:

    1. निर्यात डेटा Sqoop का उपयोग कर MongoDB से Hadoop से संभव नहीं है। ऐसा इसलिए है क्योंकि Sqoop JDBC का उपयोग करता है जो SQL-आधारित डेटाबेस के लिए कॉल-स्तरीय API प्रदान करता है, लेकिन MongoDB SQL-आधारित डेटाबेस नहीं है। इस काम को करने के लिए आप «MongoDB Connector for Hadoop» देख सकते हैं। कनेक्टर on GitHub उपलब्ध है। (संपादित करें: जैसा कि आप अपने अपडेट में इंगित करते हैं।)

    2. स्क्वाप निर्यात डिफ़ॉल्ट रूप से एक ही लेनदेन में नहीं किए जाते हैं। इसके बजाय, Sqoop docs के अनुसार:

      के बाद से Sqoop अनेक लेन-देन में निर्यात प्रक्रिया टूट जाती है, यह संभव है कि एक असफल निर्यात काम आंशिक डेटा डेटाबेस के लिए प्रतिबद्ध किया जा रहा में परिणाम हो सकता है।यह कुछ मामलों में सम्मिलित टकराव के कारण विफल होने वाली अगली नौकरियों को आगे बढ़ा सकता है, या दूसरों में डुप्लिकेट डेटा का कारण बन सकता है। आप --staging-table विकल्प के माध्यम से एक स्टेजिंग टेबल निर्दिष्ट करके इस समस्या को दूर कर सकते हैं जो निर्यात किए गए डेटा को चरणबद्ध करने के लिए उपयोग की जाने वाली सहायक तालिका के रूप में कार्य करता है। चरणबद्ध डेटा अंततः एक ही लेनदेन में गंतव्य तालिका में स्थानांतरित हो जाता है।

    3. «हडोप के लिए मोंगोडीबी कनेक्टर» आपके द्वारा वर्णित वर्कफ़्लो को मजबूर नहीं करता है। डॉक्स के अनुसार:

      यह कनेक्टिविटी की इजाजत दी दोनों (MapReduce नौकरियों में उपयोग के साथ-साथ Hadoop पारिस्थितिकी तंत्र के अन्य घटकों के लिए) Hadoop में MongoDB डाटा पढ़ने के साथ-साथ लेखन Hadoop नौकरियों के परिणामों का रूप ले लेता MongoDB के लिए बाहर।

    4. दरअसल, जहां तक ​​मैं «MongoDB Connector for Hadoop»: examples से समझने के रूप में, यह संभव एक MySQL डेटाबेस के लिए उत्पादन में लिखने के लिए अपने Hadoop MapReduce काम में एक org.apache.hadoop.mapred.lib.db.DBOutputFormat निर्दिष्ट करने के लिए किया जाएगा। कनेक्टर रिपोजिटरी से उदाहरण के बाद:

      job.setMapperClass(TokenizerMapper.class); 
      job.setCombinerClass(IntSumReducer.class); 
      job.setReducerClass(IntSumReducer.class); 
      job.setOutputKeyClass(Text.class); 
      job.setOutputValueClass(IntWritable.class); 
      job.setInputFormatClass(MongoInputFormat.class); 
      /* Instead of: 
      * job.setOutputFormatClass(MongoOutputFormat.class); 
      * we use an OutputFormatClass that writes the job results 
      * to a MySQL database. Beware that the following OutputFormat 
      * will only write the *key* to the database, but the principle 
      * remains the same for all output formatters 
      */ 
      job.setOutputFormatClass(DBOutputFormat.class); 
      
    0

    मैं तुम्हें अपाचे सुअर (जो Hadoop के नक्शे-कम करने के शीर्ष पर चलता है) पर एक नज़र डालें सिफारिश करेंगे। यह माइस्क्ल को आउटपुट करेगा (स्कूप का उपयोग करने की आवश्यकता नहीं है)। मैंने इसका इस्तेमाल करने के लिए इसका इस्तेमाल किया जो आप वर्णन कर रहे हैं। पिग और माईएसक्ल के साथ "अपरर्ट" करना संभव है। आप पिग्सबैंक के डीबी स्टोरेज और माइस्क्ल के इंसर्ट डिप्लिकेट कुंजी अपडेट (http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html) के साथ पिग के स्टोर कमांड का उपयोग कर सकते हैं।

    0

    मोंगोहाडोप कनेक्टर का उपयोग मोंगोडीबी से डेटा पढ़ने और हडोप का उपयोग करके इसे संसाधित करने के लिए करें।

    लिंक: https://github.com/mongodb/mongo-hadoop/blob/master/hive/README.md

    इस कनेक्टर आप मोंगो db से डेटा पढ़ने और Hadoop का उपयोग कर इसे संसाधित करने में सुअर और हाइव उपयोग कर सकते हैं का उपयोग करना। मोंगो हाइव तालिका के

    उदाहरण:

    CREATE EXTERNAL TABLE TestMongoHiveTable 
        ( 
        id STRING, 
        Name STRING 
        ) 
        STORED BY 'com.mongodb.hadoop.hive.MongoStorageHandler' 
        WITH SERDEPROPERTIES('mongo.columns.mapping'='{"id":"_id","Name":"Name"}') 
        LOCATION '/tmp/test/TestMongoHiveTable/' 
        TBLPROPERTIES('mongo.uri'='mongodb://{MONGO_DB_IP}/userDetails.json'); 
    

    एक बार जब यह तालिका अलग करने आप Sqoop या सुअर का उपयोग कर सकते mysql में डेटा निर्यात के लिए निर्यात कर रहा है।

    यहां एक प्रवाह है।

    मोंगो डीबी -> मोंगो डीबी हैडूप कनेक्टर (पिग) का उपयोग कर प्रक्रिया डेटा -> इसे हाइव टेबल/एचडीएफएस में स्टोर करें -> एसक्यूओपी का उपयोग करके mysql में डेटा निर्यात करें।

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

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