hadoop에서 map Reduce를 실행하기 위해 이 스크립트를 실행하려고 합니다. 하지만 이 스크립트를 실행하면 스크린샷에 첨부된 오류가 표시됩니다. 스크립트:
rm -rf /홈/sk/데스크탑/abc/wordcountc/
rm /home/sk/Desktop/abc/wordcountj.jar
mkdir /home/sk/Desktop/abc/wordcountc/
sudo chmod 777 /home/sk/Desktop/abc/wordcountc
CD /usr/local/하둡
dfs.sh 시작
Yarn.sh 시작
평화의 정의
bin/hdfs dfs -rm -r -skipTrash /사용자
bin/hdfs dfs -rm -r -skipTrash /opt
bin/hdfs dfs -rm -r -skipTrash /opt2
bin/hdfs dfs -mkdir /사용자
bin/hdfs dfs -put '/home/sk/Desktop/input' /user
CD /홈/sk/데스크탑/abc/
javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0 .jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar -d /home/sk/Desktop/abc*.java
mv /home/sk/Desktop/abc/*.class /home/sk/Desktop/abc/wordcountc/
CD /홈/sk/데스크탑/abc
jar -cvf wordcountj.jar -C /home/sk/Desktop/abc/wordcountc .
CD /usr/local/하둡
bin/hadoop jar /home/sk/Desktop/abc/wordcountj.jar OutDegree /user/input 출력wc
답변1
플래그는 인수를 디렉터리 경로로 사용합니다 -d
.javac
오라클은 말한다이 로고 정보:
클래스 파일의 대상 디렉터리를 설정합니다. 디렉터리는 이미 존재해야 하며
javac
생성되지 않습니다. 클래스가 패키지의 일부인 경우javac
패키지 이름을 반영하는 하위 디렉터리에 클래스 파일을 배치하고 필요에 따라 디렉터리를 만듭니다.
그러나 제공한 매개변수는 /home/sk/Desktop/abc*.java
전혀 디렉터리 경로처럼 보이지 않습니다.
그런 뜻 이었습니까 /home/sk/Desktop/
? 아니면 이 로고가 꼭 필요한가요 -d
? 이 작업을 수행하지 않을 수도 있으며 이는 abc*.java
컴파일하려는 Java 소스 파일입니다.
아니면 당신이 원해요 -d /home/sk/Desktop/ /home/sk/Desktop/abc*.java
.
답변2
스크립트의 명령이 javac
작동하지 않습니다. Usage: javac <options> <source files>
스크린샷의 메시지가 이를 보여줍니다. 그러면 mv
이동할 Java 클래스 파일이 생성되지 않기 때문에 명령이 실패하게 됩니다. 이로 인해 클래스 로더가 실패하고 오류 스택이 생성됩니다.
javac
이 문제를 해결하려면 다음 명령을 변경해야 합니다 .javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar -d /home/sk/Desktop/abc*.java
도착하다:
javac -classpath /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.0.jar:/usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-2.7.0.jar:/usr/local/hadoop/share/hadoop/common/lib/commons-cli-1.2.jar -d /home/sk/Desktop/abc/ /home/sk/Desktop/abc/*.java
그러면 /home/sk/Desktop/abc의 모든 Java 파일이 컴파일되고 각 Java 파일에 해당하는 클래스 파일이 생성됩니다.
미래에는 현재 사용하고 있는 단어 수 파일보다 더 많은 Java 파일을 이 디렉토리에 넣을 수 있으므로 이는 위험할 수 있습니다.