복붙노트

[HADOOP] Hadoop에서 Python을 사용하여 map reduce를 실행할 수 없습니까?

HADOOP

Hadoop에서 Python을 사용하여 map reduce를 실행할 수 없습니까?

나는 잘 작동하는 단어 수 프로그램을 위해 파이썬으로 매퍼와 감속기를 썼습니다. 다음은 샘플입니다.

echo "hello hello world here hello here world here hello" | wordmapper.py | sort -k1,1 | wordreducer.py 
hello   4
here    3
world   2

큰 파일에 대해 hadoop 작업을 제출하려고하면 오류가 발생합니다.

hadoop jar share/hadoop/tools/sources/hadoop-*streaming*.jar -file wordmapper.py -mapper wordmapper.py  -file wordreducer.py -reducer wordreducer.py -input /data/1jrl.pdb -output /output/py_jrl
Exception in thread "main" java.lang.ClassNotFoundException: share.hadoop.tools.sources.hadoop-streaming-2.2.0-test-sources.jar
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

커맨드 라인을 다음과 같이 변경했습니다 (위에서 와일드 카드를 제거했습니다).

hadoop jar share/hadoop/tools/sources/hadoop-streaming-2.2.0-sources.jar -file wordmapper.py -mapper wordmapper.py  -file wordreducer.py -reducer wordreducer.py -input /data/1jrl.pdb -output /output/py_jrl
Exception in thread "main" java.lang.ClassNotFoundException: -file
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:249)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:205)

왜 이러한 오류가 발생하고 어떻게 해결할 수 있습니까? hadoop2를 사용합니다. 감사!

해결법

  1. ==============================

    1.적어도 하나의 문제는 .java 파일이며 실행할 수없는 -sources.jar을 사용하고 있다는 것입니다.

    적어도 하나의 문제는 .java 파일이며 실행할 수없는 -sources.jar을 사용하고 있다는 것입니다.

    대신 이것을 사용해보십시오 ...

    share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar
    

    그리고 존재하지 않는 경우 파일 이름에 -sources가없는 hadoop-streaming * .jar을 찾으십시오.

  2. from https://stackoverflow.com/questions/24661653/unable-to-run-map-reduce-using-python-in-hadoop by cc-by-sa and MIT license