Hadoop ने काट दिया / असंगत काउंटर नाम


79

अभी के लिए, मेरे पास एक 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

आज, मैंने हडोप के आंतरिक समय को खत्म करने में बहुत समय बिताया। कुछ दिलचस्प चीजें:

  1. org.apache.hadoop.mapred.ClientServiceDelegate#getJobCountersविधि TRUNCated नामों और पूर्ण प्रदर्शन नामों के साथ यार्न से काउंटरों का एक गुच्छा देता है ।
  2. नक्शे और रीड्यूसर को डीबग करने में असमर्थ था, लेकिन लॉगिंग की मदद से ऐसा लगता है कि org.apache.hadoop.mapreduce.Counter#getNameविधि reducer निष्पादन के दौरान सही तरीके से काम करती है।

2
क्या आप उस getName()कॉल पर अधिक विवरण प्रदान कर सकते हैं जो अभी भी काटे गए नाम को लौटाता है? क्या यह Job#getCounters()काम पूरा होने के इंतजार के बाद जमा करने वाले ग्राहक से लौटाए गए काउंटरों पर चलने वाला है , या यह नौकरी के इतिहास के सर्वर से काउंटरों को अलग करने वाला एक अलग अनुप्रयोग है, या यह पूरी तरह से कुछ और है? मुझे उम्मीद है कि आपका विन्यास पर्याप्त होगा। वेब यूआई उसी getName()कॉल का उपयोग करता है । (यह विन्यास परिवर्तन से पहले सबमिट की गई नौकरियों में से काटे गए काउंटर नामों को पूर्वव्यापी रूप से ठीक नहीं करेगा।)
क्रिस नौरोथ

@ क्रिसहॉरोथ, कॉन्फ़िगरेशन बहुत सरल है, मेरे पास हडूप के साथ एक सर्वर है और यह सब उस पर स्थापित अतिरिक्त सॉफ़्टवेयर है। मेरे मानचित्र में काउंटर्स का प्रवाह कम करें: 1. रीड्यूसर में वृद्धि काउंटर (संदर्भ से प्राप्त) 2. नौकरी से प्राप्त करें # getCounters ()। विलंबित उत्तर के लिए आपकी रुचि और खेद के लिए धन्यवाद।
मृ। सुखद

1
@ क्रिसहॉरोथ, मैंने कुछ अतिरिक्त जांच की और ऐसा लगता है कि मुझे कुछ मिला ... उह, दिलचस्प। हम 2.6.0 स्थापित कर चुके हैं और ऐसा लगता है कि यह मुद्दा मुद्दों .apache.org/jira/browse/MAPREDUCE-5875 मेरी जैसी स्थिति का वर्णन करता है। लेकिन यह बहुत भ्रमित करने वाला कारण है कि मैं काउंटरों की संख्या बढ़ाने में सक्षम हूं, लेकिन काउंटर के नाम की लंबाई नहीं ... क्या आपको लगता है कि यह एक मुद्दा हो सकता है?
10

क्या आप मुझे सटीक नाम बता सकते हैं (एक काट दिया गया) जो आपको काउंटर के लिए गेटनेम ()stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
मैक्समिथुन

@ डेनिसजेरुद्दीन दुर्भाग्य से मैंने वह काम छोड़ दिया और मेरे पास इस मुद्दे को हल करने के लिए कोई अस्थायी विकल्प नहीं था, क्योंकि इस मामले में कोई प्रतिक्रिया नहीं हुई थी क्योंकि हडप जीरा में कोई प्रतिक्रिया नहीं दी गई थी। उस मुद्दे को अभी भी हल नहीं किया गया था जिस दिन मैंने वह नौकरी छोड़ दी थी।
mr.nothing

जवाबों:


2

Hadoop कोड में ऐसा कुछ भी नहीं है जो इसके नामकरण के बाद काउंटर नामों को काट देता है। इसलिए, जैसा कि आप पहले ही बता चुके हैं, mapreduce.job.counters.counter.name.maxकाउंटर के नाम की अधिकतम लंबाई ( डिफ़ॉल्ट मान के रूप में 64 प्रतीकों के साथ ) को नियंत्रित करता है ।

यह सीमा कॉल के दौरान लागू की जाती है AbstractCounterGroup.addCounter/findCounter। प्रतिक्रियाशील स्रोत कोड निम्नलिखित है :

@Override
public synchronized T addCounter(String counterName, String displayName,
                                 long value) {
  String saveName = Limits.filterCounterName(counterName);
  ...

और वास्तव में :

public static String filterName(String name, int maxLen) {
  return name.length() > maxLen ? name.substring(0, maxLen - 1) : name;
}

public static String filterCounterName(String name) {
  return filterName(name, getCounterNameMax());
}

जैसा कि आप देख सकते हैं, काउंटर का नाम सम्मान के साथ काट दिया जा रहा है mapreduce.job.counters.max। अपनी बारी पर, Hadoop कोड में केवल एक ही स्थान है जहाँ कॉल किया Limits.init(Configuration conf)जाता है ( LocalContainerLauncherवर्ग से बुलाया जाता है ):

class YarnChild {

  private static final Logger LOG = LoggerFactory.getLogger(YarnChild.class);

  static volatile TaskAttemptID taskid = null;

  public static void main(String[] args) throws Throwable {
    Thread.setDefaultUncaughtExceptionHandler(new YarnUncaughtExceptionHandler());
    LOG.debug("Child starting");

    final JobConf job = new JobConf(MRJobConfig.JOB_CONF_FILE);
    // Initing with our JobConf allows us to avoid loading confs twice
    Limits.init(job);

मेरा मानना ​​है कि आपके द्वारा देखे जाने वाले काउंटर नामों को ठीक करने के लिए आपको निम्न चरणों का पालन करने की आवश्यकता है:

  1. mapreduce.job.counters.counter.name.maxकॉन्फ़िगरेशन मान समायोजित करें
  2. YARN / MapReduce सेवा पुनरारंभ करें
  3. अपना काम फिर से चलाएं

मुझे अब भी लगता है कि मुझे लगता है कि पुरानी नौकरियों के लिए अलग-अलग नाम होंगे।


हालाँकि, मैं इसकी जाँच करने में असमर्थ हूँ, यह उन लोगों के लिए बहुत उपयोगी और व्याख्यात्मक होना चाहिए जो इस मुद्दे का सामना करते हैं (upvotes के अनुसार ऐसे बहुत से लोग हैं)
mr.nothing

1

getName() लगता है कि पदावनत कर दिया जाएगा

वैकल्पिक रूप से, getUri()जो 255 की डिफ़ॉल्ट अधिकतम लंबाई के साथ आता है , का उपयोग किया जा सकता है।

दस्तावेज़ लिंक: getUri()

व्यक्तिगत रूप से इसे आजमाया नहीं गया है, लेकिन यह इस समस्या का एक संभावित समाधान है।


सुनिश्चित नहीं हैं कि आपको समस्या ठीक से मिल गई है। आप के बारे में बात कर रहे हैं, org.apache.hadoop.fs.FileSystem#getNameलेकिन इस विषय के बारे में है org.apache.hadoop.mapreduce.Counter#getNameऔर यह व्यवहार है।
mr.nothing
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.