2016-03-04 64 views
0

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

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

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

有用的信息:我有一个总结日志Hadoop的HDFS系统......所以我必须让那些登录到弹性搜索和对Kibana仪表板上显示出来

回答

0

你当然可以创建一个定期运行,并呼吁

hdfs dfs -copyToLocal <src> <dest> 

到所有数据从HDFS复制bash脚本。

或者使用Hadoop的文件系统的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中。