[HADOOP] 맵리 듀스 로그를 통합
HADOOP맵리 듀스 로그를 통합
디버깅 하둡 맵 줄일 작업은 고통입니다. 나는 표준 출력으로 출력 할 수 있지만, 이러한 로그는 MR 작업이 실행 된 다른 모든 시스템에 표시됩니다. 나는 JobTracker를 이동 내 일을 찾아, 그 작업 로그에 도착하는 각 개별 매퍼를 클릭,하지만 당신은 20 개 이상의 매퍼 / 감속기가있을 때이 매우 복잡 할 수 있습니다.
나는 내가 매퍼 / 감속기의 각 다시 그들이 함께 cat'ed 될 수있는 하나 개의 중앙 위치에 로그 scp를에 다음 실행 어떤 기계 파악하는 작업 추적기를 통해 촉각 근 것입니다 스크립트를 작성해야 할 수도 있다고 생각했다. 내가이 일을 내 시간을 낭비하기 전에, 누군가가 작업의 맵퍼 및 감속기에 대해 하나의 통합 된 표준 출력 로그를 얻을 수있는 더 좋은 방법을 알고 있나요?
해결법
-
==============================
1.나는이에게 다음과 같은 방법을 수행합니다
나는이에게 다음과 같은 방법을 수행합니다
일반적으로 디버깅 (작업이 작동 즉 테스트)를 위해 나는 데이터의 작은 샘플로 내 로컬 컴퓨터에 독립형 모드에서 하둡을 실행합니다. 이 방법 하둡은 다른 자바 응용 프로그램으로 작동하고 콘솔에서 매퍼 또는 감속기의 표준 출력을 보여줍니다.
특정 버그의 경우 (즉, 작업은 내 로컬 컴퓨터에서 잘 실행하지만, 생산에 사망) 난 그냥 디버깅 할 때 나는 일반적으로 표준 출력에 보낼 것입니다 무슨 작업의 출력으로 넣어 코드를 조정할. 당신은 통찰력을 디버깅 작업의 결과를 확인할 수 있습니다 그런 식으로. 이 아니지만, 꽤 잘 작동합니다.
또 다른 옵션은 JobTracker에있는 노드의 로그를 확인하는 것입니다. 그들은 모든 표준 출력 및 표준 오류가 있습니다. 그러나 여러 가지 이유로 나는이 솔루션 (로그 잠시 후 삭제, 여러 노드에 대해 등을보고) 위에서 설명한 것이 훨씬 복잡한 것으로 나타났습니다
-
==============================
2.그래서 난 그냥 이렇게 파이썬 스크립트를 작성 끝났다. 끔찍하지 않았다. 여기에 다른 사람이 그것을 사용하고자하는 경우에는 스크립트입니다. 분명히 더 많은 오류 검사가 아닌 하드 코딩 된 URL 등을 필요로하지만 당신은 아이디어를 얻을. 참고, 당신은 아름다운 수프를 다운로드해야
그래서 난 그냥 이렇게 파이썬 스크립트를 작성 끝났다. 끔찍하지 않았다. 여기에 다른 사람이 그것을 사용하고자하는 경우에는 스크립트입니다. 분명히 더 많은 오류 검사가 아닌 하드 코딩 된 URL 등을 필요로하지만 당신은 아이디어를 얻을. 참고, 당신은 아름다운 수프를 다운로드해야
#!/usr/bin/python import sys from bs4 import BeautifulSoup as BS from urllib2 import urlopen import re TRACKER_BASE_URL = 'http://my.tracker.com:50030/' trackerURLformat = TRACKER_BASE_URL + 'jobtasks.jsp?jobid=%s&type=%s&pagenum=1' # use map or reduce for the type def findLogs(url): finalLog = "" print "Looking for Job: " + url html = urlopen(url).read() trackerSoup = BS(html) taskURLs = [h.get('href') for h in trackerSoup.find_all(href=re.compile('taskdetails'))] # Now that we know where all the tasks are, go find their logs logURLs = [] for taskURL in taskURLs: taskHTML = urlopen(TRACKER_BASE_URL + taskURL).read() taskSoup = BS(taskHTML) allLogURL = taskSoup.find(href=re.compile('all=true')).get('href') logURLs.append(allLogURL) # Now fetch the stdout log from each for logURL in logURLs: logHTML = urlopen(logURL).read() logSoup = BS(logHTML) stdoutText = logSoup.body.pre.text.lstrip() finalLog += stdoutText return finalLog def main(argv): with open(argv[1] + "-map-stdout.log", "w") as f: f.write(findLogs(trackerURLformat % (argv[1], "map"))) print "Wrote mapers stdouts to " + f.name with open(argv[1] + "-reduce-stdout.log", "w") as f: f.write(findLogs(trackerURLformat % (argv[1], "reduce"))) print "Wrote reducer stdouts to " + f.name if __name__ == "__main__": main(sys.argv)
-
==============================
3.내 경험은 당신이 로그를 검사 할 문제의 원인을지도 축소 / 시도 정확히 알 때 / 20 +지도 클릭을 통해 출력 링크를 줄일 필요가 없다는 것입니다. 난 항상 Context.setStatus를 사용하는 이유는 내가 의심을 제기 할 수있다 예외 또는 증가 카운터를 던질 때 ( "여기에 메시지를 경고")입니다.
내 경험은 당신이 로그를 검사 할 문제의 원인을지도 축소 / 시도 정확히 알 때 / 20 +지도 클릭을 통해 출력 링크를 줄일 필요가 없다는 것입니다. 난 항상 Context.setStatus를 사용하는 이유는 내가 의심을 제기 할 수있다 예외 또는 증가 카운터를 던질 때 ( "여기에 메시지를 경고")입니다.
대해 setStatus에 대한 자세한 : http://hadoop.apache.org/docs/r1.1.1/api/org/apache/hadoop/mapreduce/TaskInputOutputContext.html#setStatus(java.lang.String)
https://www.inkling.com/read/hadoop-definitive-guide-tom-white-3rd/chapter-5/running-on-a-cluster (제는 작업을 디버깅)
from https://stackoverflow.com/questions/18518983/consolidate-mapreduce-logs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 자바 API를 HBase를 연결하는 데 실패 (0) | 2019.09.24 |
---|---|
[HADOOP] OOZIE에서 다중 입력 경로 구성 (0) | 2019.09.24 |
[HADOOP] Oozie / Sqoop을에 대한 질문 (0) | 2019.09.24 |
[HADOOP] HDFS를 실행하면 스칼라 스크립트 내부에서 명령 (0) | 2019.09.24 |
[HADOOP] 작업 시도의 호스트 이름을 찾을 수 하둡 (0) | 2019.09.23 |