读写hdfs文件(工作笔记)

import java.io.IOException;
import java.io.InputStream;
import java.util.List;
import java.util.Map;

import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Maps;


public class LoadHdfsTemplate {
    static final Logger logger = LoggerFactory
            .getLogger(LoadHdfsTemplate.class);
    
    protected FileSystem fileSystem ;
    
    private String hdfsPath = "/template/template.txt";
    
    public final boolean checkFile(String filePath) {
        boolean exists = false;
        try {
            Path path = new Path(filePath);
            exists = fileSystem.exists(path);
        } catch (IOException e) {
            logger.error("接口模板文件不存在!", e);
        } catch (Exception e) {
            logger.error("", e);
        }
        return exists;
    }
    
    public Map<String,Object> readHdfsFile() throws IOException{
        fileSystem = FileSystem.get(new Configuration());
        Path path = new Path(hdfsPath);
        InputStream in = fileSystem.open(path);
        List<String> lines = IOUtils.readLines(in);
        if(null == lines || lines.isEmpty()){
            return null;
        }
        Map<String,Object> map =  Maps.newConcurrentMap();
        int rowNum = 0;
        for(String line : lines){
            rowNum++;
            String[] content = line.split("    ");
            String code = content[0].trim();
            String template = content[1].trim();
            if(StringUtils.isEmpty(line) || StringUtils.isEmpty(template)){
                logger.error("第{}条模板格式错误!内容为:{}",rowNum,line);
                continue;
            }
            map.put(code, template);
        }
        return map;
        
    }

    public void setHdfsPath(String hdfsPath) {
        this.hdfsPath = hdfsPath;
    }
}

 应用场景为,读取hdfs上的文件,并转化成<k,v>形式存入内存。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构与算法

HDU 5536 Chip Factory

Problem Description John is a manager of a CPU chip factory, the factory produc...

35815
来自专栏码匠的流水账

聊聊flink LocalEnvironment的execute方法

flink-java-1.6.2-sources.jar!/org/apache/flink/api/java/DataSet.java

1352
来自专栏码匠的流水账

聊聊sentinel的ModifyRulesCommandHandler

本文主要研究一下sentinel的ModifyRulesCommandHandler

1271
来自专栏一个会写诗的程序员的博客

java.lang.reflect.InaccessibleObjectException: Unable to make

java.lang.reflect.InaccessibleObjectException: Unable to make ...

772
来自专栏开发与安全

90% of python in 90 minutes

注:本文整理自 http://www.slideshare.net/MattHarrison4/learn-90 -----------------------...

2240
来自专栏个人分享

Socket与Http方式解析发送xml消息封装中间件jar包

  最近项目代码中太多重复的编写Document,不同的接口需要不同的模板,于是重写提取公共部分打成jar包,方便各个系统统一使用~

1603
来自专栏java、Spring、技术分享

深入分析Spring MVC中RequestBody与ResponseBody

  在SpringMVC中,可以使用@RequestBody和@ResponseBody两个注解,分别完成请求报文到对象和对象到响应报文的转换。在Sprin...

2791
来自专栏算法修养

FZU 2150 Fire Game(BFS)

Problem 2150 Fire Game Accept: 1302    Submit: 4569 Time Limit: 1000 mSec    M...

3294
来自专栏JMCui

项目工具类

一、前言     在工作中,难免遇到各种各样的问题,每个人似乎都有一套自己的解决方案。而我,又不想每次解决完问题就把东西扔了,捡了芝麻,丢了西瓜,什么时候才能进...

4676
来自专栏函数式编程语言及工具

SDP(3):ScalikeJDBC- JDBC-Engine:Fetching

  ScalikeJDBC在覆盖JDBC基本功能上是比较完整的,而且实现这些功能的方式比较简洁,运算效率方面自然会稍高一筹了。理论上用ScalikeJDBC作为...

3825

扫码关注云+社区

领取腾讯云代金券