Flink 批处理——多文件写入hdfs(Java)

@羲凡——只为了更好的活着

Flink 批处理——多文件写入hdfs(Java)

0.本文解决哪种问题

假如你有5000个门店甚至更多,产品需要你将每个门店的数据都写成一个文件且以门店命名,这意味着你要写5000或更多的文件,如果你直接用flink批处理writeAsText算子
要么报错,要么特别慢,如果报错 Cannot currently handle nodes with more than 64 outputs.,可以参考 解决方案 。所有 用了hadoop的多文件输出方法,按照key多文件输出到hdfs。客官请看:

1.前提准备

pom.xml文件中要添加依赖(根据自己的flink版本修改哈)

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-hadoop-compatibility_2.11</artifactId>
    <version>${flink.version}</version>
</dependency>
2.直接上代码
第一步,新建一个类继承 MultipleTextOutputFormat
package com.yum.cpos.flink.source.hbase;

import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapred.lib.MultipleTextOutputFormat;

public class HdfsMultipleTextOutputFormat<K,V> extends MultipleTextOutputFormat<K,V> {
    @Override
    protected String generateFileNameForKeyValue(K key, V value, String name) {
        return String.valueOf(key);
    }
    @Override
    protected K generateActualKey(K key, V value) {
        return (K) NullWritable.get();
    }
}
第二步,主方法里面实现上面的类,如下
HdfsMultipleTextOutputFormat<String, String> mulFormat = new HdfsMultipleTextOutputFormat<>();
JobConf jobConf = new JobConf();
FileOutputFormat.setOutputPath(jobConf,new Path(hdfsOutputPath));
HadoopOutputFormat<String, String> format = new HadoopOutputFormat<String, String>(mulFormat, jobConf);
dataSet.output(format).name("toHDFS")

====================================================================

@羲凡——只为了更好的活着

若对博客中有任何问题,欢迎留言交流

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值