Hadoop Java API操作 及读取序列化文件(04-05-06)

    针对于04-05-06班级整合。

1.创建java项目

2.修改pom.xml文件

添加依赖

<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.1.4</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>

3.创建一个名为HdfsTest类,在类中编写单元测试代码测试API中的每个方法

(1)查看HDFS根目录下的文件或子目录,并将名称打印在控制台

//单元测试  每个操作放在一个测试方法中,  选中方法名---》右击  运行testList()
@Test
public void testList() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    // FileSystem fs = FileSystem.get(conf);
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");
    //3.获取HDFS根目录下的子目录和文件
    FileStatus  []files =fs.listStatus( new Path("/"));
    //4.循环所有的files
    for(FileStatus f:files){
        //判断是文件还是目录
        if(f.isFile()){
            System.out.println(  "f:  "+f.getPath().getName() );
        }else {
            System.out.println(" d:    "+f.getPath().getName());
        }
    }

    //关闭资源
    fs.close();

}

控制台输出的结果:

(2)创建目录

//创建目录
@Test
public void testMkdirs() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");

    fs.mkdirs(new Path("/hdfs/2306"));


    //关闭资源
    fs.close();

}

测试结果:

(3)删除非空目录

//删除文件或目录
@Test
public void testDelete() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");

    fs.delete(new Path("/output-2302-order"),true);


    //关闭资源
    fs.close();

}

(4)文件上传

//文件上传
@Test
public void testCopyFromLocalFile() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");

    fs.copyFromLocalFile(new Path("D:\\software\\apache-maven-3.8.6.rar"),new Path("/hdfs/2306/"));
    //关闭资源
    fs.close();

}

(5)文件下载

//文件下载
@Test
public void testCopyToLocalFile() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");

    fs.copyToLocalFile(new Path("/bigdata/order.txt"),new Path("D:\\software\\"));
    //关闭资源
    fs.close();

}

(6)读取HDFS上的序列化文件,将数据保存到D:\\software\\raceData.txt

//读取序列化文件中的数据保存到本次磁盘
@Test
public void testSequenceFileRead() throws Exception{

    //1.创建配置对象
    Configuration conf = new Configuration();
    //2.获取文件系统对象  yt启动集群的用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://master:8020") ,conf,"yt");

    SequenceFile.Reader reader = new SequenceFile.Reader(fs,new Path("/ouput-2301-select/part-m-00000"),conf);
    //创建文件对象
    File file = new File("D:\\software\\raceData.txt");
    //创建字节流对象
    OutputStream  out = new FileOutputStream(file);
    //创建缓冲字符输出流对象
    BufferedWriter  bw =new BufferedWriter( new OutputStreamWriter(out) );
    Text key =new Text();
    Text val =new Text();
    while(  reader.next(key,val)   ){
        bw.write(  key.toString()+"\t" +val.toString()  );
        bw.newLine();
    }
    bw.flush();
    //关闭资源
    bw.close();
    out.close();
    fs.close();

}

代码中的part-m-0000文件,需要完成 --筛选日志并生成序列化文件
           https://blog.csdn.net/lydia88/article/details/138184788

才能得到日志化文件。

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值