【云计算】HDFS相关操作
小标 2019-01-23 来源 : 阅读 1107 评论 0

摘要:本文主要向大家介绍了【云计算】HDFS相关操作,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】HDFS相关操作,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

package demo;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Test;

/*
 * 原因:
 * Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): 
 * Permission denied: user=lenovo, access=WRITE, inode="/folder1":root:supergroup:drwxr-xr-x
 * 
 * 当前用户:lenovo 执行w权限
 *  HDFS的根的权限:root:supergroup:drwxr-xr-x
 *  
 *  四种方式,执行程序:
 *  1、设置一个属性
 *  2、使用-D参数
 *  3、改变目录的权限  hdfs dfs -chmod 777 /folder2
 *  4、dfs.permissions  ---> false  禁用HDFS的权限检查功能
 */
public class TestMkDir {
    @Test
    public void test1() throws Exception{
        //方式一:设置一个属性,代表用户的身份
        System.setProperty("HADOOP_USER_NAME", "root");
        //指定NameNode的地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //获取一个HDFS的客户端
        FileSystem client = FileSystem.get(conf);
        //创建目录
        client.mkdirs(new Path("/folder1"));    
        //关闭客户端
        client.close();
    }

    @Test
    public void test2() throws Exception{
        //指定NameNode的地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //获取一个HDFS的客户端
        FileSystem client = FileSystem.get(conf);
        //创建目录
        client.mkdirs(new Path("/folder2"));
        //关闭客户端
        client.close();
    }

    @Test
    public void test3() throws Exception{
        //指定NameNode的地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //获取一个HDFS的客户端
        FileSystem client = FileSystem.get(conf);
        //创建目录
        client.mkdirs(new Path("/folder2/folder3"));    
        //关闭客户端
        client.close();
    }

    @Test
    public void test4() throws Exception{
        //指定NameNode的地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //获取一个HDFS的客户端
        FileSystem client = FileSystem.get(conf);
        //创建目录
        client.mkdirs(new Path("/folder4"));
        //关闭客户端
        client.close();
    }
}


上传文件



package demo;

import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

public class TestUpload {
    @Test
    public void test1() throws Exception{
        //构造一个输入流
        InputStream in = new FileInputStream("d:\\dowload\\hadoop-2.4.1.zip");
        //配置NameNode地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //客户端
        FileSystem client = FileSystem.get(conf);
        //得到一个输出流
        OutputStream out = client.create(new Path("/tools/a.zip"));
        //构造一个缓冲区
        byte[] buffer = new byte[1024];
        int len=0;
        while((len=in.read(buffer)) >0) {
            //读取到了数据
            out.write(buffer, 0, len);
        }
        out.flush();
        out.close();
        in.close();
    }

    @Test
    public void test2() throws Exception{
        //构造一个输入流
        InputStream in = new FileInputStream("d:\\dowload\\hadoop-2.4.1.zip");
        //配置NameNode地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //客户端
        FileSystem client = FileSystem.get(conf);
        //得到一个输出流
        OutputStream out = client.create(new Path("/tools/b.zip"));     
        //使用工具类简化程序
        IOUtils.copyBytes(in, out, 1024);
    }
}


下载文件



package demo;

import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;

public class TestDownload {
    @Test
    public void test1() throws Exception{
        //配置NameNode地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //客户端
        FileSystem client = FileSystem.get(conf);
        //打开一个输入流 <------HDFS
        InputStream in = client.open(new Path("/tools/a.zip"));
        //构造一个输出流  ----> d:\temp\aa.zip
        OutputStream out = new FileOutputStream("d:\\temp\\bb.zip");
        //使用工具类简化程序
        IOUtils.copyBytes(in, out, 1024);
//      //构造一个缓冲区
//      byte[] buffer = new byte[1024];
//      int len=0;
//      while((len=in.read(buffer)) >0) {
//          //读取到了数据
//          out.write(buffer, 0, len);
//      }
//      out.flush();
//      out.close();
//      in.close();
    }
}


查看文件信息


package demo;

import java.util.Arrays;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.junit.Test;

public class TestMetaData {
    @Test
    public void testCheckFileInfo() throws Exception{
        //配置NameNode地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //客户端
        FileSystem client = FileSystem.get(conf);
        //获取该目录下所有文件的信息
        FileStatus[] filesStatus = client.listStatus(new Path("/tools"));
        for(FileStatus f:filesStatus){
            System.out.println(f.isDirectory()"目录":"文件");
            System.out.println(f.getPath().getName());
            System.out.println(f.getBlockSize());
            System.out.println("*************************");
        }
        client.close();
    }

    @Test
    public void testCheckFileBlock() throws Exception{
        //配置NameNode地址
        Configuration conf = new Configuration();
        conf.set("fs.defaultFS", "hdfs://192.168.157.111:9000");
        //客户端
        FileSystem client = FileSystem.get(conf);
        //获取该文件的信息
        FileStatus fs = client.getFileStatus(new Path("/tools/a.zip"));
        //获取文件的数据块的信息
        BlockLocation[] location = client.getFileBlockLocations(fs, 0, fs.getLen());
        for(BlockLocation block:location){
            //block.getHosts() ---> 为什么返回一个String[]          System.out.println(Arrays.toString(block.getHosts()) + "\t"+ Arrays.toString(block.getNames()));
        }
        client.close();
    }
}


          

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved