【问题标题】:Hadoop hdfs to elasticsearchHadoop hdfs 到 elasticsearch
【发布时间】:2020-05-27 01:21:10
【问题描述】:

如何从 HDFS 读取数据,然后将它们发送到 Elasticsearch 并显示在 kibana 仪表板上?

我知道 ES-Hadoop 中有一个连接器可以双向发送/接收数据,但我的问题是在第一阶段从 HDFS 提取数据

什么是最可行的选择?请给我几个选择..

有用的信息:我有一个 Hadoop HDFS 系统正在汇总日志...所以我必须将这些日志放到弹性搜索中并将其显示在 Kibana 仪表板上

【问题讨论】:

    标签: hadoop elasticsearch hdfs kibana


    【解决方案1】:

    您当然可以创建一个定期运行并调用的 bash 脚本

    hdfs dfs -copyToLocal <src> <dest>
    

    从 hdfs 复制所有数据。

    或者使用 Hadoop 的 FileSystem java api 创建一个输入流来流式传输来自 hadoop 的数据:

    public static FileSystem getFS(String hadoopUser) { 
        UserGroupInformation ugi = UserGroupInformation
                    .createRemoteUser(hadoopUser);
    
        return ugi.doAs(new PrivilegedAction<FileSystem>() {
    
            @Override
            public FileSystem run() {
                Configuration conf = new Configuration();
                try {
                    return FileSystem.get(conf);
                } catch (IOException e) {
                    e.printStackTrace();
                }
                return null;
            }
        });
    
        return null;
    }
    

    然后……

    FileSystem fs = getFS("hdfs");
    
    InputStream in = fs.open(new Path("/path/to/hdfs/file"));
    
    //do stuff with your input stream here...
    

    关于将这些数据放到 elasticsearch 上,您可以做一些类似于 Netflix 对 inviso 所做的事情(在 github 中搜索 inviso 并查看 jes/index_cluster_stats.py 以获得一个想法)。基本上,编写一个与 elasticsearch 集成的 python 脚本,并让该脚本每隔几分钟运行一次,以解析从 HDFS 提取的数据,然后将这些数据存储在 elasticsearch 中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-19
      • 2015-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-14
      相关资源
      最近更新 更多