2013-07-29 3 views
9

क्या कोई मुझे बता सकता है कि sqoop में --split-by और सीमा क्वेरी का उपयोग क्या है?sqoop में निम्न आदेश क्या हैं?

sqoop आयात --connect JDBC: 'जहां आईडी = 5 और $ शर्तें मेज से * चुनें' --split-दर // स्थानीय होस्ट/मेरी --username उपयोगकर्ता 1234 --query --password तालिका: mysql .id --target-dir/dir

उत्तर

28

--split-दर: यह स्तंभ निर्दिष्ट करने के लिए प्रयोग किया जाता है मेज आयात के लिए विभाजन उत्पन्न करने के लिए प्रयोग किया जाता है। इसका अर्थ यह है कि यह निर्दिष्ट करता है कि आपके क्लस्टर में डेटा आयात करते समय विभाजन बनाने के लिए कौन सा कॉलम उपयोग किया जाएगा। इसका उपयोग अधिक समानांतरता प्राप्त करके आयात प्रदर्शन को बढ़ाने के लिए किया जा सकता है। Sqoop तालिका के किसी विशेष स्तंभ में मानों के आधार पर विभाजन बनाता है जो कि आयात आदेश के माध्यम से उपयोगकर्ता द्वारा --split द्वारा निर्दिष्ट किया गया है। यदि यह उपलब्ध नहीं है, तो इनपुट तालिका की प्राथमिक कुंजी का उपयोग विभाजन बनाने के लिए किया जाता है।

उपयोग करने का कारण: कभी-कभी प्राथमिक कुंजी में न्यूनतम और अधिकतम मानों के बीच मूल्यों का वितरण भी नहीं होता है (जिसका उपयोग विभाजन को बनाने के लिए किया जाता है यदि --split-by उपलब्ध नहीं है)। ऐसी स्थिति में आप कुछ अन्य कॉलम निर्दिष्ट कर सकते हैं जिसमें कुशल आयात के लिए विभाजन बनाने के लिए डेटा का उचित वितरण हो।

--boundary-क्वेरी: डिफ़ॉल्ट sqoop करके क्वेरी से चयन मिनट(), अधिकतम() का उपयोग विभाजन पैदा करने के लिए सीमाओं को पता लगाने के लिए होगा। कुछ मामलों में यह क्वेरी सबसे इष्टतम नहीं है, इसलिए आप - बाउंडरी-क्वेरी तर्क का उपयोग करके दो अंकीय कॉलम लौटने वाली किसी भी मनमानी क्वेरी को निर्दिष्ट कर सकते हैं।

उपयोग करने का कारण: यदि --split-by आपको इष्टतम प्रदर्शन नहीं दे रहा है तो आप प्रदर्शन को बेहतर बनाने के लिए इसका उपयोग कर सकते हैं।

10

स्क्वाप आपको समांतर और --split-by और --boundary-query में डेटा आयात करने की अनुमति देता है और आपको अधिक नियंत्रण देता है। यदि आप केवल एक टेबल आयात कर रहे हैं तो यह प्राथमिक कुंजी का उपयोग करेगा, हालांकि यदि आप अधिक उन्नत क्वेरी कर रहे हैं, तो आपको समांतर विभाजन करने के लिए कॉलम निर्दिष्ट करना होगा।

अर्थात,

sqoop import \ 
    --connect 'jdbc:mysql://.../...' \ 
    --direct \ 
    --username uname --password pword \ 
    --hive-import \ 
    --hive-table query_import \ 
    --boundary-query 'SELECT 0, MAX(id) FROM a' \ 
    --query 'SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND $CONDITIONS'\ 
    --num-mappers 3 
    --split-by a.id \ 
    --target-dir /data/import \ 
    --verbose 

सीमा क्वेरी आप अधिकतम, न्यूनतम प्राप्त करने के लिए एक अनुकूलित क्वेरी निर्दिष्ट कर सकते हैं। अन्यथा यह आपके कथन कथन पर MIN (a.id), MAX (a.id) करने का प्रयास करेगा।

परिणाम हो जाएगा (यदि मिनट = 0, अधिकतम = 30) 3 प्रश्नों कि समानांतर में चलाने मिलता है:

SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 0 AND 10; 
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 11 AND 20; 
SELECT a.id, a.name, b.id, b.name FROM a, b WHERE a.id = b.id AND a.id BETWEEN 21 AND 30; 
+0

क्षमा करें। मुझे अभी भी यह नहीं मिला है। क्या है - सेप्लिट-बाय? क्या यह आदेश की प्रसंस्करण के साथ कुछ करने के लिए है? – DrewRose

16

--split द्वारा मानचित्रकारों समान रूप से भर में मेज से मूल्यों को वितरित करने के लिए किया जाता है यानी कहना यू 100 अद्वितीय रिकॉर्ड (प्राथमिक कुंजी) और अगर वहाँ 4 मानचित्रकारों हैं, --split-दर (प्राथमिक कुंजी स्तंभ है) आपको मैपर्स के बीच समान रूप से डेटा-सेट वितरित करने में मदद करेगा।

$ शर्तें एसक्यूओपी प्रक्रिया द्वारा उपयोग किया जाता है, यह डेटा सेट प्राप्त करने के लिए आंतरिक रूप से एक अद्वितीय स्थिति अभिव्यक्ति के साथ प्रतिस्थापित करेगा। यदि आप समांतर आयात चलाते हैं, तो नक्शा कार्य $ क्वेरी के लिए प्रतिस्थापित विभिन्न मानों के साथ आपकी क्वेरी निष्पादित करेंगे। उदाहरण के लिए, एक मैपर निष्पादित कर सकता है "foo WHERE (id> = 0 और id < 10000) का चयन करें", और अगला मैपर निष्पादित कर सकता है "foo WHERE (id> = 10000 और id < 20000) से चुनें bla" और इसी तरह ।

1

इसके अलावा हम दोहरे उद्धरण चिह्नों के भीतर --query मान निर्दिष्ट (""), हम एक slash(\)

--query "select * from table where id=5 AND \$CONDITIONS" 

वरना

--query 'select * from table where id=5 AND $CONDITIONS' 
0

साथ $CONDITIONS पूर्व में होना करने के लिए खंड --Split-दर की जरूरत है डेटा आयात के लिए विभाजन उत्पन्न करने के लिए उपयोग की जाने वाली तालिका के कॉलम निर्दिष्ट करने के लिए प्रयोग किया जाता है। यह खंड उन कॉलम को निर्दिष्ट करता है जिनका उपयोग डेटा को हडोप क्लस्टर में आयात करते समय विभाजित करने के लिए किया जाएगा। -split-by खंड अधिक समांतरता के माध्यम से बेहतर प्रदर्शन प्राप्त करने में मदद करता है। अपाचे स्क्वाप आयात कमांड के -split-by खंड में निर्दिष्ट कॉलम में मौजूद मानों के आधार पर विभाजन बनाएगा। यदि -split-by खंड निर्दिष्ट नहीं है, तो तालिका आयात की प्राथमिक कुंजी डेटा आयात करते समय विभाजन बनाने के लिए उपयोग की जाती है। कभी-कभी तालिका की प्राथमिक कुंजी न्यूनतम और अधिकतम सीमा के बीच समान रूप से वितरित मान नहीं हो सकती है। ऐसी परिस्थितियों में -split-by खंड का उपयोग कुछ अन्य कॉलम निर्दिष्ट करने के लिए किया जा सकता है जिसमें विभाजन बनाने के लिए डेटा का वितरण भी होता है ताकि डेटा आयात कुशल हो।

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