我正在尝试运行此脚本以在 hadoop 上运行映射减少。但是当我运行这个脚本时,它给了我屏幕截图中附加的错误。脚本:
rm -rf /home/sk/Desktop/abc/wordcountc/
rm /home/sk/Desktop/abc/wordcountj.jar
mkdir /home/sk/Desktop/abc/wordcountc/
须藤 chmod 777 /home/sk/Desktop/abc/wordcountc
cd /usr/local/hadoop
启动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 /home/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 /home/sk/桌面/abc
jar -cvf wordcountj.jar -C /home/sk/Desktop/abc/wordcountc 。
cd /usr/local/hadoop
bin/hadoop jar /home/sk/Desktop/abc/wordcountj.jar OutDegree /user/input outputwc
答案1
标志-d
tojavac
需要一个作为目录路径的参数。
甲骨文说关于这个标志:
设置类文件的目标目录。该目录必须已经存在;
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 文件放入此目录中,而不仅仅是您当前正在使用的字数统计文件。