Hadoop hdfs to elastisearch

时间:2016-03-04 21:47:47

标签: hadoop elasticsearch hdfs kibana

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

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

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

有用的信息:我有一个Hadoop HDFS系统,它总结了日志...所以我必须将这些日志带到弹性搜索并在Kibana仪表板上显示

1 个答案:

答案 0 :(得分:0)

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

的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中。