HDFS API之编写词频统计框架

package com.imooc.bigdata.hadoop.hdfs;

/*
 * 使用HDFS API完成WordCount统计
 *
 * 需求:统计HDFS上的文件的词频统计,然后将统计结果输出到HDFS
 *
 * 功能拆解:
 * 1) 读取HDFS上的文件 ==》 HDFS API
 * 2) 业务处理(词频统计):对文件中的每一行数据都要进行业务处理(按照分隔符分割) ==》 Mapper(抽象类/接口)
 * 3) 将处理结果缓存起来 ==》 Context(抽象类/接口)
 * 4) 将结果输出到HDFS ==》 HDFS API
 *
 */

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URI;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HDFSWordCountApp01 {

    public static void main(String[] args) throws Exception{

        // 1) 读取HDFS上的文件 ==》 HDFS API
        Path input = new Path("/hdfsApi/test/hello.txt");

        // 获取要操作的HDFS文件系统
        FileSystem fs = FileSystem.get(new URI("hdfs://192.168.126.101:8020"), new Configuration(), "hadoop");
        //将内容读取出来,此处不使用递归
        RemoteIterator<LocatedFileStatus> iterator = fs.listFiles(input,false);
        //迭代开始:
        while (iterator.hasNext()){
            LocatedFileStatus file = iterator.next();
            FSDataInputStream in = fs.open(file.getPath());
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));

            String line = "";
            while ((line = reader.readLine())!= null){
                //TODO... 2) 词频处理
            }
            reader.close();
            in.close();

        }

        //TODO... 3) 将结果缓存起来 Map
        Map<Object, Object> contextMap = new HashMap<Object, Object>();

        // 4) 将结果输出到HDFS ==》 HDFS API
        Path output = new Path("/hdfsApi/output/");

        FSDataOutputStream out = fs.create(new Path(output, new Path("WCOut")));


        //TODO... 将第三步缓存中的内容输出到out中去
        Set<Map.Entry<Object, Object>> entries = contextMap.entrySet();
        for (Map.Entry<Object, Object> entry : entries){
            out.write((entry.getKey().toString() + "\t" + entry.getValue() + "\n").getBytes());
        }

        out.close();
        fs.close();

        System.out.print("HDFS API统计词频运行成功");
    }
}

 

posted @ 2021-07-05 16:26  酱汁怪兽  阅读(76)  评论(0)    收藏  举报