您的位置:首页 > 运维架构

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

2014-05-22 14:57 676 查看
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查找源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: