अभी के लिए, मेरे पास एक Hadoop जॉब है जो एक बहुत बड़े नाम के साथ काउंटर बनाता है।
उदाहरण के लिए, निम्नलिखित एक stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
:। इस काउंटर को वेब इंटरफेस और getName()
मेथड कॉल पर अलग किया गया है। मुझे पता चला है कि Hadoop की काउंटर अधिकतम नाम की सीमाएँ हैं और यह सेटिंग्स आईडी mapreduce.job.counters.counter.name.max
इस सीमा को कॉन्फ़िगर करने के लिए है। इसलिए मैंने इसे बढ़ा दिया 500
और वेब इंटरफेस अब पूरा काउंटर नाम दिखाता है। लेकिन getName()
काउंटर पर अभी भी नाम छोटा है।
क्या कोई, कृपया, मुझे यह समझाएं या मेरी गलतियों पर ध्यान दें? धन्यवाद।
EDIT 1
मेरा Hadoop सर्वर कॉन्फ़िगरेशन में HDFS, YARN के साथ एकल सर्वर शामिल है, और इस पर स्वयं मानचित्र को कम करता है। मैप-कम करने के दौरान, कुछ काउंटर वेतन वृद्धि होती है और नौकरी पूरी होने के बाद, ToolRunner
मैं उपयोग के साथ काउंटर प्राप्त करता हूं org.apache.hadoop.mapreduce.Job#getCounters
।
EDIT 2
Hadoop संस्करण निम्नलिखित है:
Hadoop 2.6.0-cdh5.8.0
Subversion http://github.com/cloudera/hadoop -r 042da8b868a212c843bcbf3594519dd26e816e79
Compiled by jenkins on 2016-07-12T22:55Z
Compiled with protoc 2.5.0
From source with checksum 2b6c319ecc19f118d6e1c823175717b5
This command was run using /usr/lib/hadoop/hadoop-common-2.6.0-cdh5.8.0.jar
मैंने कुछ अतिरिक्त जांच की और ऐसा लगता है कि यह मुद्दा मेरी जैसी स्थिति का वर्णन करता है। लेकिन यह बहुत भ्रमित करने वाला कारण है कि मैं काउंटरों की संख्या बढ़ाने में सक्षम हूं, लेकिन काउंटर के नाम की लंबाई नहीं ...
EDIT 3
आज, मैंने हडोप के आंतरिक समय को खत्म करने में बहुत समय बिताया। कुछ दिलचस्प चीजें:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
विधि TRUNCated नामों और पूर्ण प्रदर्शन नामों के साथ यार्न से काउंटरों का एक गुच्छा देता है ।- नक्शे और रीड्यूसर को डीबग करने में असमर्थ था, लेकिन लॉगिंग की मदद से ऐसा लगता है कि
org.apache.hadoop.mapreduce.Counter#getName
विधि reducer निष्पादन के दौरान सही तरीके से काम करती है।
getName()
कॉल पर अधिक विवरण प्रदान कर सकते हैं जो अभी भी काटे गए नाम को लौटाता है? क्या यहJob#getCounters()
काम पूरा होने के इंतजार के बाद जमा करने वाले ग्राहक से लौटाए गए काउंटरों पर चलने वाला है , या यह नौकरी के इतिहास के सर्वर से काउंटरों को अलग करने वाला एक अलग अनुप्रयोग है, या यह पूरी तरह से कुछ और है? मुझे उम्मीद है कि आपका विन्यास पर्याप्त होगा। वेब यूआई उसीgetName()
कॉल का उपयोग करता है । (यह विन्यास परिवर्तन से पहले सबमिट की गई नौकरियों में से काटे गए काउंटर नामों को पूर्वव्यापी रूप से ठीक नहीं करेगा।)