hadoop हूओप स्ट्रीमिंग का उपयोग करके फ़ाइलों को अनझिप करें




zip hadoop-streaming (4)

किसी भी कारण से एचडीएफएस के भीतर किसी फ़ाइल को अनझिप / अनकंप्रेड करने का एक आसान तरीका

hadoop fs -text /hdfs-path-to-zipped-file.gz | hadoop fs -put - /hdfs-path-to-unzipped-file.txt

मेरे पास एचडीएफएस में कई फाइलें हैं, ये सभी एक ज़िप फ़ाइल है जिसमें एक सीएसवी फ़ाइल है। मैं फ़ाइलों को असम्परोड करने की कोशिश कर रहा हूं ताकि मैं उन पर एक स्ट्रीमिंग नौकरी चला सकूँ।

मैंने कोशिश की:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
    -D mapred.reduce.tasks=0 \
    -mapper /bin/zcat -reducer /bin/cat \
    -input /path/to/files/ \
    -output /path/to/output

हालांकि मुझे एक त्रुटि मिलती है ( subprocess failed with code 1 ) मैंने भी एक फाइल पर चलने की कोशिश की, वही त्रुटि

कोई सलाह?


Hadoop gzip प्रारूप में संकुचित फ़ाइलों को पढ़ सकता है, लेकिन यह ज़िप प्रारूप से अलग है। Hadoop ज़िप फ़ाइलों को पढ़ नहीं सकता AFAIK


चारों ओर प्रयोग करने के बाद, मुझे पता चला कि अगर आप स्ट्रीमिंग स्ट्रीम करने के लिए इस संशोधन करते हैं, तो आप अपनी सभी जीज़िप फ़ाइलों को एक नई निर्देशिका में असम्पीडित करेंगे। फ़ाइल नाम सभी खो गए हैं (सामान्य भाग- XXXX नाम के नाम पर), लेकिन यह मेरे लिए काम किया

मैं इस काम का अनुमान लगाता हूं क्योंकि हूओप स्वचालित रूप से हुड के नीचे जिप्प फाइलों को असंपुंबित करता है, और बिल्ली बस उस अनजिप आउटपुट को गूंजती है

hadoop jar /usr/iop/4.2.0.0/hadoop-mapreduce/hadoop-streaming.jar \
    -D mapred.reduce.tasks=0 \
    -mapper /bin/cat \
    -input  /path-to-gzip-files-directory \
    -output /your-gunzipped-directory

समस्या का मूल कारण यह है: आप कई (टेक्स्ट) infos को हौप से प्राप्त कर सकते हैं (इससे पहले कि आप डेटा प्राप्त कर सकते हैं)।

जैसे hdfs dfs-cat hdfs: //hdm1.gphd.local: 8020 / hive / gphd / गोदाम / my.db / my / part-m-00000.gz | ज़कैट | wc -l या तो काम नहीं करेगा - "gzip: stdin: gzip प्रारूप में नहीं" त्रुटि संदेश

इसलिए आपको इस "अनपेक्षित" इंफोस को छोड़ देना चाहिए मेरे मामले में मुझे 86 लाइनों को छोड़ना होगा

इसलिए मेरी एक पंक्ति कमांड यह होगी (रिकॉर्ड की गिनती के लिए): hdfs dfs -cat hdfs: //hdm1.gphd.local: 8020 / हाइव / जीएफडी / गोदाम / my.db / my / part-m-00000.gz | पूंछ-एन +86 | ज़कैट | wc -l

नोट: यह एक वैकल्पिक हल है (वास्तविक समाधान नहीं) और बहुत बदसूरत - "86" के कारण - लेकिन यह ठीक काम करता है :)







hadoop-streaming