Hiện tại, tôi có một công việc Hadoop tạo ra các quầy với một cái tên khá lớn.
Ví dụ, sau một: stats.counters.server-name.job.job-name.mapper.site.site-name.qualifier.qualifier-name.super-long-string-which-is-not-within-standard-limits
. Bộ đếm này được cắt ngắn trên giao diện web và khi getName()
gọi phương thức. Tôi đã phát hiện ra rằng Hadoop có giới hạn về tên tối đa của bộ đếm và id cài đặt mapreduce.job.counters.counter.name.max
này là để định cấu hình giới hạn này. Vì vậy, tôi đã tăng điều này lên 500
và giao diện web hiện hiển thị tên bộ đếm đầy đủ. Nhưng getName()
của bộ đếm vẫn trả về tên bị cắt ngắn.
Ai đó, làm ơn, giải thích điều này hoặc chỉ cho tôi những sai lầm của tôi? Cảm ơn bạn.
CHỈNH SỬA 1
Cấu hình máy chủ Hadoop của tôi bao gồm một máy chủ duy nhất có HDFS, YARN và bản đồ tự giảm trên đó. Trong quá trình thu nhỏ bản đồ, có một số bước tăng bộ đếm và sau khi hoàn thành công việc, trong ToolRunner
tôi tìm nạp bộ đếm bằng cách sử dụng org.apache.hadoop.mapreduce.Job#getCounters
.
CHỈNH SỬA 2
Phiên bản Hadoop như sau:
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
Tôi đã thực hiện một số điều tra bổ sung và có vẻ như vấn đề này mô tả một tình huống tương tự như của tôi. Nhưng nó khá khó hiểu vì tôi có thể tăng số lượng bộ đếm nhưng không thể tăng độ dài của tên bộ đếm ...
CHỈNH SỬA 3
Hôm nay, tôi đã dành khá nhiều thời gian để gỡ lỗi nội bộ của Hadoop. Một số công cụ thú vị:
org.apache.hadoop.mapred.ClientServiceDelegate#getJobCounters
phương thức trả về một loạt các bộ đếm từ sợi có tên TRUNCATED và tên hiển thị ĐẦY ĐỦ .- Không thể tự gỡ lỗi bản đồ và bộ giảm nhưng với sự trợ giúp của việc ghi nhật ký, có vẻ như
org.apache.hadoop.mapreduce.Counter#getName
phương pháp đó hoạt động chính xác trong quá trình thực thi bộ giảm.
getName()
cuộc gọi vẫn trả về tên bị cắt ngắn không? Điều này có lặp lại qua các bộ đếm được trả về từJob#getCounters()
máy khách gửi sau khi chờ hoàn thành công việc hay là một bộ đếm truy vấn ứng dụng riêng biệt từ máy chủ lịch sử công việc hay là một cái gì đó hoàn toàn khác? Tôi mong đợi cấu hình của bạn là đủ. Giao diện người dùng web sử dụng cùng mộtgetName()
cuộc gọi. (Nó sẽ không hồi tố lần chỉnh sửa cắt ngắn tên truy cập từ công việc đệ trình trước khi thay đổi cấu hình mặc dù.)