if (NativeIO.isAvailable()) {
NativeIO.chmod(f.getCanonicalPath(), permission.toShort()); } else {
execCommand(f, Shell.SET_PERMISSION_COMMAND, String.format(\ } }
static String execCommand(File f, String... cmd) throws IOException { String[] args = new String[cmd.length + 1]; System.arraycopy(cmd, 0, args, 0, cmd.length); args[cmd.length] = f.getCanonicalPath(); String output = Shell.execCommand(args); return output; } /**
* Create a tmp file for a base file.
* @param basefile the base file of the tmp * @param prefix file name prefix of tmp
* @param isDeleteOnExit if true, the tmp will be deleted when the VM exits * @return a newly created tmp file
* @exception IOException If a tmp file cannot created * @see java.io.File#createTempFile(String, String, File) * @see java.io.File#deleteOnExit() */
public static final File createLocalTempFile(final File basefile, final String prefix,
final boolean isDeleteOnExit) throws IOException {
File tmp = File.createTempFile(prefix + basefile.getName(), \ if (isDeleteOnExit) { tmp.deleteOnExit(); }
return tmp; } /**
* Move the src file to the name specified by target. * @param src the source file * @param target the target file
* @exception IOException If this operation fails */
public static void replaceFile(File src, File target) throws IOException { /* renameTo() has two limitations on Windows platform. * src.renameTo(target) fails if * 1) If target already exists OR
* 2) If target is already open for reading/writing. */
if (!src.renameTo(target)) { int retries = 5;
while (target.exists() && !target.delete() && retries-- >= 0) { try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new IOException(\ } }
if (!src.renameTo(target)) {
throw new IOException(\ \ } } } /**
* A wrapper for {@link File#listFiles()}. This java.io API returns null * when a dir is not a directory or for any I/O error. Instead of having * null check everywhere File#listFiles() is used, we will add utility API
* to get around this problem. For the majority of cases where we prefer * an IOException to be thrown.
* @param dir directory for which listing should be performed * @return list of files or empty list
* @exception IOException for invalid directory or for a bad disk. */
public static File[] listFiles(File dir) throws IOException { File[] files = dir.listFiles(); if(files == null) {
throw new IOException(\ + dir.toString()); }
return files; } /**
* A wrapper for {@link File#list()}. This java.io API returns null * when a dir is not a directory or for any I/O error. Instead of having * null check everywhere File#list() is used, we will add utility API * to get around this problem. For the majority of cases where we prefer * an IOException to be thrown.
* @param dir directory for which listing should be performed * @return list of file names or empty string list
* @exception IOException for invalid directory or for a bad disk. */
public static String[] list(File dir) throws IOException { String[] fileNames = dir.list(); if(fileNames == null) {
throw new IOException(\ + dir.toString()); }
return fileNames; } }
重新编译打包hadoop-core-1.0.2.jar,替换掉hadoop-1.0.2根目录下的hadoop-core-1.0.2.jar即可。
替换之后,刷新项目,设置好正确的jar包依赖,现在再运行WordCountTest,即可。 成功之后,在Eclipse下刷新HDFS目录,可以看到生成了ouput2目录:
点击“ part-r-00000”文件,可以看到排序结果:
Bye 1 Goodbye 1 Hadoop 2 Hello 2 World 2
嗯,一样可以正常Debug调试该程序,设置断点(右键 –> Debug As – > Java Application),即可(每次运行之前,都需要收到删除输出目录)。
另外,该插件会在eclipse对应的workspace\\.metadata\\.plugins\\org.apache.hadoop.eclipse下,自动生成jar文件,以及其他文件,包括Haoop的一些具体配置等。 嗯,更多细节,慢慢体验吧。