HDFS项目wordcount实现

综合性HDFS实战: 使用HDFS java API 完成HDFS文件系统上的文件的词频统计
:wordcount

/path/1.txt
hello world hello
/path/2.txt
hello world hello

==> (hello,4) (world,2)
将统计完的结果输出到HDFS上去

本实战的要求:只允许使用HDFS API进行操作
目的:
1)掌握HDFS API的操作
2)通过这个案例,对后续要学习的mapreduce 有一个好的认识

//需求:统计HDFS上的wc ,然后将统计结果输出到HDFS
功能拆解:
1)读取HDFS上的文件  :Hadoop  fs -text /test/a.txt
2)业务处理(词频统计): 队伍文件中的每一行数据都进行业务处理(按分隔符分割)===》Mapper
3)将处理结果缓存起来 ==>Context
4)将结果输出到HDFS ==>HDFS API


public static void main(String [] args)
{
    Path input=new Path("/test/hello.txt");
    Path output=new Path("/test/output/");

   FileSystem fs= FileSytem.get(new URI("hdfs:192.168.57.168:8020"),new Configuration(),new USER());

    String line="";
    while((line=reader.readLine())!=null)
    {
        //业务处理(词频统计)
    }
    reader.close();
    in.close();
}

//ImoocContext

private Map<Object,Object> cacheMap =new HashMap<Object,Object>();

public Map<Object,Object> getCacheMap()
{
    return cacheMap;
}

public void write(Object key,Object value)
{
    cacheMap.put(key,value);
}

public void get(Object key){
    return cacheMap.get(key);
}

//class Mapper
// line :读取到每一行数据
// context:上下文/缓存

mark

mark

自定义类:
mark

客户端写数据到HDFS的流程:

mark

客户端读数据的过程:
mark

HDFS的元数据的管理:
mark

元数据:HDFS的目录结构以及每个文件的BLOCK信息(id,副本系数,block存放在哪个)
存在什么地方:hdfs-site.xml ${hadoop.tmp.dir}/name/…
元素据存放在文件中:
/test1
/test1/a.txt
/test2/1.txt
/test2/2.txt
/test2/xxx

hadoop fs -put xxx /test2/

checkPoints: 保证内存中的数据不会丢
mark

hadoop fs -put xxx /test2/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值