如何从HDFS读取数据然后将它们发送到Elasticsearch并显示在kibana仪表板上?
我知道ES-Hadoop中有一个连接器双向工作以发送/接收数据,但我的问题是在第一阶段从HDFS中提取数据
最可行的选择是什么?请给我提供几个选项..
有用的信息:我有一个Hadoop HDFS系统,它总结了日志...所以我必须将这些日志带到弹性搜索并在Kibana仪表板上显示
答案 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中。