Linux Hadoop 쉘 스크립트에서 .class 오류가 발생함

Linux Hadoop 쉘 스크립트에서 .class 오류가 발생함

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 파일을 이 디렉토리에 넣을 수 있으므로 이는 위험할 수 있습니다.

관련 정보