hadoop学习;hdfs操作;运行抛出权限异常: Permission denied;api查看源码方法;源码不停的向里循环;抽象类通过debug查找源码


eclipse快捷键alt+shift+m将选中的代码封装成方法;alt+shift+l将选中的代码添加对应类型放回参数

当调用一个陌生方法时,进入源码不停的向里循环,当找不到return类似方法的时候,可以看到最原始的方法

package com.kane.hdfs;


import java.io.InputStream;
import java.net.URL;


import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;


public class Test {
//hadoop文件系统下的根目录下的hello文件
public static final String HDFS_PATH="hdfs://centos:9000/hello";
/**
* @param args
*/
public static void main(String[] args) throws Exception{
// 告诉java可以读hdfs协议
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
final URL url=new URL(HDFS_PATH);


final InputStream in=url.openStream();
/**
* 参数依次是输入流,输出流,缓冲大小,是否关闭流
*/
IOUtils.copyBytes(in, System.out, 1024,true);
}


}


package com.kane.hdfs;



import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;


import org.apache.hadoop.conf.Configuration;


import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;


public class OpHDFS {
public static final String PATH="hdfs://centos:9000";
public static final String DIR_PATH="/kane";
public static final String FILE_PATH="/kane/needkane";
/**
* @param args
* @throws URISyntaxException 
* @throws IOException 
*/
public static void main(String[] args) throws Exception {
final FileSystem fs=FileSystem.get(new URI(PATH),new Configuration());
//创建文件夹
//makeDir(fs);
//上传文件
//uploadFile(fs);
//下载文件
//downLoad(fs);
//删除文件
deleteFile(fs);

}
private static void deleteFile(final FileSystem fs) throws IOException {
//第二个参数是否递归,如果是文件夹就递归删除,当然文件也没关系
fs.delete(new Path(FILE_PATH), true);
}
public static void makeDir(FileSystem fs) throws IOException {
fs.mkdirs(new Path(DIR_PATH));
}

public static void uploadFile(FileSystem fs) throws Exception {

//我们查看源码的时候,后来直到filesystem,又因为是抽象类,只好打断点获取哪个类实现了

final FSDataOutputStream out=fs.create(new Path(FILE_PATH));
//这里的in是本地文件的输入流
final FileInputStream in=new FileInputStream("D:/wordorid");
//参数输入流,输出流,缓冲大小,是否关闭流
IOUtils.copyBytes(in, out,1024,true );
}
public static void downLoad(FileSystem fs) throws Exception {
//从hdfs读取文件
final FSDataInputStream in=fs.open(new Path(FILE_PATH));
IOUtils.copyBytes(in, System.out, 1024,true);
}

}


解决办法修改hadoop根目录权限 hadoop fs -chmod 777 /

fs.create(new Path(FILE_PATH)),ctrl+左击查看源码一直到最里面,结果发现时抽象类




抽象类通过debug查找源码


相关内容