2013-01-17 65 views
0

我正在使用一个第三方服务,它聚合数据并公开REST API以访问它。将数据从API加载到HBase

我正在尝试获取这些数据并将其加载到本地HBase群集中。我创建了一个Java应用程序,用于从第三方服务中提取数据,使用HBase客户端API对其进行处理并将其加载到我们的群集中。对于这个应用程序,我必须手动运行它,也不知道有多少HBase客户端API能够有效地加载批量数据。

我遇到了Sqoop和Cascading-dbmigrate从RDBMS进行批量传输。我的问题是:是否有任何类似的工具从REST API进行批量数据传输?同样,在一段时间内同步数据。

感谢 ArunDhaJ http://arundhaj.com

回答

3

REST API的不规范像RDBMS,据我所知,没有任何工具,可以神奇地从API到HBase的加载,你必须围绕构建了一点东西。对于这种大量加载HBase的情况,一个好的做法是使用HBase批量加载,与仅使用HBase API相比,HBase会占用更少的CPU和网络资源。这可以通过几个步骤来完成:

  1. 与地图准备数据/使用HFileOutputFormat作为OutputFormat减少工作。这可以确保您的作业输出被编写为HFiles,这是一种非常有效的格式,可以加载到HBase中。你可以做这样的:

    job.setOutputFormatClass(HFileOutputFormat.class); 
    HFileOutputFormat.setOutputPath(job, path); 
    
  2. 负载使用命令行工具completebulkload这需要照料一切,所以你甚至不需要担心该地区的服务器上的数据。这可以手动完成这样的:

    hadoop jar hbase-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable 
    

    我相信,如果你使用HFileOutputFormat所以你可能甚至不需要自己做这一步这一步会自动运行。

的过程here

你需要做的一切都绑在一起简直就是写一个程序,将从您的API,并加载到HDFS中获取数据什么的更多细节。

+0

为了好奇,那么人们如何设法将Facebook数据(或任何类似的服务,如twitter,reddit)放在群集上并对数据进行分析?因为这些服务也只公开API。 – ArunDhaJ

+0

尤其不了解Facebook,但在使用外部数据源时,设计ETL过程以提取此数据并将其加载到群集中,然后根据需要执行任何操作都是非常标准的。我一直在与许多不同的消息来源一起工作,虽然有时候获取可能是瓶颈,但它仍然是一个必要的步骤。 –