• लगभग 1.75GB शतरंज मैच डेटा को Hadoop की जगह कमांड-लाइन टूल्स से प्रोसेस करने पर काम सिर्फ 12 सेकंड में पूरा हुआ, जो Hadoop के 26 मिनट की तुलना में 235 गुना से भी अधिक तेज था
  • grep, sort, uniq, awk, xargs, mawk जैसे बेसिक shell commands को जोड़कर streaming processing pipeline बनाई गई, जिससे मेमोरी उपयोग लगभग शून्य बना रहा
  • xargs parallel processing और mawk optimization के जरिए CPU cores का उपयोग बढ़ाया गया और IO bottleneck को न्यूनतम किया गया
  • वही dataset Hadoop cluster (7 c1.medium instances) पर चलाने की तुलना में लागत और maintenance burden काफी कम रहा
  • यह दिखाता है कि single machine पर भी प्रभावी data analysis संभव है, और अनावश्यक Big Data tools के उपयोग पर सावधानी की जरूरत बताता है

परिचय: Hadoop से तेज कमांड-लाइन प्रोसेसिंग

  • Amazon EMR और mrjob के साथ लगभग 20 लाख शतरंज मैचों के डेटा का विश्लेषण करने वाले एक उदाहरण को देखकर, उसी डेटा को कमांड-लाइन आधारित streaming processing से दोबारा लागू किया गया
    • Hadoop cluster (7 c1.medium) पर 26 मिनट लगे, 1.14MB/sec processing speed
    • लोकल laptop पर सिर्फ 12 सेकंड में पूरा, 270MB/sec processing speed
  • साधारण result aggregation जैसे कामों में shell pipeline, Hadoop की तुलना में कहीं अधिक efficient साबित होती है
  • shell commands को जोड़कर Storm जैसी parallel stream processing structure एक single machine पर लागू की जा सकती है

डेटा संरचना और तैयारी

  • डेटा PGN(Portable Game Notation) फ़ॉर्मेट में शतरंज मैच रिकॉर्ड है, और हर मैच का परिणाम "Result" लाइन में दिया गया है
    • "1-0" का मतलब सफेद की जीत, "0-1" का मतलब काले की जीत, "1/2-1/2" का मतलब ड्रॉ
  • GitHub के rozim/ChessData repository से लगभग 3.46GB dataset लिया गया
    • Tom Hayden के प्रयोग वाले डेटा (1.75GB) से लगभग दोगुना आकार

बेसिक pipeline बनाना

  • IO सीमा मापने के लिए cat *.pgn > /dev/null चलाने पर लगभग 13 सेकंड(272MB/sec) लगे
  • बेसिक analysis pipeline:
    cat *.pgn | grep "Result" | sort | uniq -c
    
    • execution time लगभग 70 सेकंड, Hadoop की तुलना में लगभग 47 गुना तेज
  • sort | uniq की जगह AWK का उपयोग कर results को सीधे aggregate किया गया
    • execution time 65 सेकंड, मेमोरी उपयोग लगभग शून्य
    • grep एक single CPU core पर अटककर bottleneck बन गया

Parallelization और optimization

  • xargs से grep को parallel किया गया
    find . -type f -name '*.pgn' -print0 | xargs -0 -n1 -P4 grep -F "Result" | gawk ...
    
    • execution time 38 सेकंड, लगभग 77 गुना speed-up
  • grep हटाकर सिर्फ AWK filtering से pipeline को सरल बनाया गया
    • हर फ़ाइल के परिणामों को मिलाने के लिए double AWK pipeline बनाई गई
    • execution time 18 सेकंड, लगभग 174 गुना तेज
  • mawk में बदलने पर अतिरिक्त optimization मिला
    find . -type f -name '*.pgn' -print0 | xargs -0 -n4 -P4 mawk ... | mawk ...
    
    • execution time 12 सेकंड, Hadoop की तुलना में 235 गुना तेज, processing speed 270MB/sec

निष्कर्ष: सादगी की दक्षता

  • बड़े पैमाने की distributed processing की ज़रूरत न हो, तो single machine पर shell tools का संयोजन अधिक तेज और किफायती हो सकता है
  • Hadoop का उपयोग अक्सर ऐसे कामों में भी ज़रूरत से ज़्यादा किया जाता है जिन्हें relational DB या साधारण scripts से संभाला जा सकता है
  • कमांड-लाइन आधारित streaming analysis, performance, implementation cost, maintenance के लिहाज से एक बेहतर विकल्प है

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.