HADOOP MR Job 디버깅
eclipse에서 디버깅을 하는 것을 추천합니다.hadoop-eclipse 플러그인을 설치하고, 플러그인의jar에 대한 수정을 주의하십시오
1:lib 폴더에 의존하는jar 패키지를 추가합니다.
2: meta-inf 파일 수정
2 eclipse에서 MR 프로젝트를 새로 만들고 적당한 논리를 작성합니다. 오른쪽 키로run on hadoop으로Word Count의 클래스를 시작합니다. 그 전에 프로젝트의classpath에 있는hadoop 프로필에 추가해야 합니다.
- <property>
-
- <name>mapred.child.java.opts</name>
-
- <value>-Xmx2000m -Xdebug -Xrunjdwp:transport=dt_socket,address=7788,server=y,suspend=y</value>
-
- </property>
-
-
-
- <property>
-
- <name>mapred.tasktracker.map.tasks.maximum</name>
-
- <value>1</value>
-
- <description>tasktracker map </description>
-
- </property>
-
-
-
- <property>
-
- <name>mapred.tasktracker.reduce.tasks.maximum</name>
-
- <value>1</value>
-
- <description>tasktracker reduce </description>
-
- </property>
-
-
-
- <property>
-
- <name>mapred.task.timeout</name>
-
- <value>100000000</value>
-
- </property>
이 설정들은tasktracker가 jvm에서task를 실행할 때의 매개 변수를 지정합니다.
셋째, 우리의 MR 프로젝트가 포장되지 않았기 때문에 자가 포장 프로그램이 있어야 한다(이 프로그램은 인터넷에 옮겨진다)
- import java.io.File;
-
- import java.io.FileInputStream;
-
- import java.io.FileOutputStream;
-
- import java.io.IOException;
-
- import java.net.MalformedURLException;
-
- import java.net.URL;
-
- import java.net.URLClassLoader;
-
- import java.util.LinkedList;
-
- import java.util.List;
-
- import java.util.jar.JarEntry;
-
- import java.util.jar.JarOutputStream;
-
- import java.util.jar.Manifest;
-
-
-
- public class EJob {
-
-
-
- private static List<URL> classPath = new LinkedList<URL>();
-
-
-
- public static void addClasspath(String path){
-
- try {
-
- classPath.add(new URL(path));
-
- } catch (MalformedURLException e) {
-
- // TODO Auto-generated catch block
-
- e.printStackTrace();
-
- }
-
- }
-
-
-
- public static ClassLoader getClassLoader() {
-
- ClassLoader parent = Thread.currentThread().getContextClassLoader();
-
- if (parent == null) {
-
- parent = EJob.class.getClassLoader();
-
- }
-
- if (parent == null) {
-
- parent = ClassLoader.getSystemClassLoader();
-
- }
-
- return new URLClassLoader(classPath.toArray(new URL[0]), parent);
-
- }
-
-
-
- public static File createTempJar(String root) throws IOException {
-
- if (!new File(root).exists()) {
-
- return null;
-
- }
-
- Manifest manifest = new Manifest();
-
- manifest.getMainAttributes().putValue("Manifest-Version", "1.0");
-
- final File jarFile = File.createTempFile("EJob-", ".jar", new File(System
-
- .getProperty("java.io.tmpdir")));
-
-
-
- Runtime.getRuntime().addShutdownHook(new Thread() {
-
- public void run() {
-
- jarFile.delete();
-
- }
-
- });
-
-
-
- JarOutputStream out = new JarOutputStream(new FileOutputStream(jarFile),
-
- manifest);
-
- createTempJarInner(out, new File(root), "");
-
- out.flush();
-
- out.close();
-
- return jarFile;
-
- }
-
-
-
- private static void createTempJarInner(JarOutputStream out, File f,
-
- String base) throws IOException {
-
- if (f.isDirectory()) {
-
- File[] fl = f.listFiles();
-
- if (base.length() > 0) {
-
- base = base + "/";
-
- }
-
- for (int i = 0; i < fl.length; i++) {
-
- createTempJarInner(out, fl[i], base + fl[i].getName());
-
- }
-
- } else {
-
- out.putNextEntry(new JarEntry(base));
-
- FileInputStream in = new FileInputStream(f);
-
- byte[] buffer = new byte[1024];
-
- int n = in.read(buffer);
-
- while (n != -1) {
-
- out.write(buffer, 0, n);
-
- n = in.read(buffer);
-
- }
-
- in.close();
-
- }
-
- }
-
-
-
- }
마지막으로 WordCount의main 함수에 추가
- File jarFile = EJob.createTempJar("bin");
- ClassLoader classLoader = EJob.getClassLoader();
- Thread.currentThread().setContextClassLoader(classLoader);
-
- ((JobConf)job.getConfiguration()).setJar(jarFile.toString());
이렇게 하면 eclipse에서 원격 디버깅을 하면 7788 포트를 연결할 수 있습니다
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Azure HDInsight + Microsoft R Server에서 연산 처리 분산Microsoft Azure HDInsight는 Microsoft가 제공하는 Hadoop의 PaaS 서비스로 인프라 주변의 구축 노하우를 몰라도 훌륭한 Hadoop 클러스터를 구축할 수 있는 훌륭한 서비스입니다. 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.