【问题标题】: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 中。