HDFS的Java API 对文件的操作

在本次操作中所用到的命令

1.首先启动HDFS

$HADOOP_HOME/sbin/start-dfs.sh

2.关防火墙

切换到root用户,执行service iptables stop

3.拷贝文件到HDFS

bin/hadoop fs -put 本地 HDFS

4.查看HDFS根目录的文件

bin/hadoop fs -ls /

1.新建Java项目,导入Hadoop相关jar包。

在hadoop解压包中的hadoop-2.6.0\share\hadoop\common目录下红色标注的文件全部拷贝

在hadoop-2.6.0\share\hadoop\hdfs目录下红色标注的文件全部拷贝

然后在Java项目中构建配置路径

2.编写代码

    FileSystem fileSystem;
    
    /*
     * 初始化
     */
    @Before
    public void init() throws Exception{
        //读取数据由平台上的协议确定
        URI uri = new URI("hdfs://192.168.*.*:9000");
        Configuration conf = new Configuration();
        fileSystem = FileSystem.get(uri, conf);
    }
    
    /*
     * 查看目录
     */
    @Test
    public void Catalog() throws Exception{
        Path path = new Path("/poker");
        FileStatus fileStatus = fileSystem.getFileStatus(path);
        System.out.println("*************************************");    
        System.out.println("文件根目录: "+fileStatus.getPath()); 
        System.out.println("这文件目录为:");
        for(FileStatus fs : fileSystem.listStatus(path)){ 
            System.out.println(fs.getPath()); 
        } 
    }
    
    /*
     * 浏览文件
     */
    @Test
    public void look() throws Exception{
        Path path = new Path("/core-site.xml");
        FSDataInputStream fsDataInputStream = fileSystem.open(path);
        System.out.println("*************************************");
        System.out.println("浏览文件:");
        int c;
        while((c = fsDataInputStream.read()) != -1){
            System.out.print((char)c);
            }
        fsDataInputStream.close();
    }
    
    /*
     * 上传文件
     */
    @Test
    public void upload() throws Exception{
        Path srcPath = new Path("C:/Users/Administrator/Desktop/hadoop/hadoop.txt");  
        Path dstPath = new Path("/");  
        fileSystem.copyFromLocalFile(false, srcPath, dstPath);
        fileSystem.close(); 
        System.out.println("*************************************");
        System.out.println("上传成功!");
    }
    
    /*
     * 下载文件
     */
    @Test
    public void download() throws Exception{
        InputStream in = fileSystem.open(new Path("/hadoop.txt"));  
        OutputStream out = new FileOutputStream("E://hadoop.txt");  
        IOUtils.copyBytes(in, out, 4096, true);  
    }
    
    /*
     * 删除文件
     */
    @Test
    public void delete() throws Exception{
        Path path = new Path("hdfs://192.168.*.*:9000/hadoop.txt");
        fileSystem.delete(path,true);
        System.out.println("*************************************");
        System.out.println("删除成功!");
    }

 

3.运行时发现出现用户没有权限的错误。

解决方法:

1.修改HDFS根目录的权限

2.把Hadoop权限验证关闭,把hadoop.dll文件放到C:/windows/system32中,然后修改hdfs-site.xml文件,把验证关闭

<property>

     <name>dfs.permissions</name>

     <value>false</value>

</property>

3.伪造用户 -DHADOOP_USER_NAME=用户名

 

posted @ 2017-03-21 17:44  calmLang  阅读(14547)  评论(0编辑  收藏  举报