我正在使用一种第 3 方服务,该服务聚合数据并公开 REST API 以访问它。
我现在正在尝试获取这些数据并将其加载到我们的本地 HBase 集群上。我创建了一个 Java 应用程序,它从该 3rd 方服务获取数据,处理它并使用 HBase 客户端 API 将它加载到我们的集群上。对于此应用程序,我必须手动运行它,并且不确定 HBase Client API 的加载批量数据效率有多少。
我遇到了 Sqoop 和 Cascading-dbmigrate 来从 RDBMS 进行批量传输。我的问题是:是否有任何类似的工具可以从 REST API 进行批量数据传输?另外,定期同步数据。
谢谢 阿伦达杰 http://arundhaj.com
最佳答案
REST API 不像 RDBMS 那样标准化,据我所知,没有工具可以神奇地从您的 API 加载到 HBase,您必须围绕它构建一些东西。对于这种 HBase 的重载,一个好的做法是使用 HBase 批量加载,这比简单地使用 HBase API 使用更少的 CPU 和网络资源。这可以通过几个步骤完成:
使用
HFileOutputFormat
作为OutputFormat
使用 Map/Reduce 作业准备数据。这确保您的作业输出写为 HFiles这是加载到 HBase 中的一种非常有效的格式。你可以这样做:job.setOutputFormatClass(HFileOutputFormat.class); HFileOutputFormat.setOutputPath(job, path);
使用命令行工具
completebulkload
加载数据,它会处理所有事情,因此您甚至不必担心区域服务器。这可以像这样手动完成:hadoop jar hbase-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable
我相信如果您使用
HFileOutputFormat
,此步骤会自动运行,因此您甚至可能不需要自己执行此步骤。
有关过程的更多详细信息 here
要将所有内容结合在一起,您只需编写一个程序,从您的 API 获取数据并加载到 HDFS。
关于java - 将数据从 API 加载到 HBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372310/