【问题标题】:Load data from API to HBase将数据从 API 加载到 HBase
【发布时间】:2012-12-31 14:13:09
【问题描述】:

我正在使用一项 3rd 方服务,该服务聚合数据并公开 REST API 以进行访问。

我现在正在尝试获取这些数据并将其加载到我们的本地 HBase 集群上。我创建了一个 java 应用程序,它从该 3rd 方服务中获取数据,对其进行处理并使用 HBase 客户端 API 将其加载到我们的集群上。对于这个应用程序,我必须手动运行它,并且不确定有多少 HBase 客户端 API 可以有效地加载批量数据。

我遇到了 Sqoop 和 Cascading-dbmigrate 从 RDBMS 进行批量传输。我的问题是:是否有任何类似的工具可以从 REST API 进行批量数据传输?另外,定期同步数据。

谢谢 阿伦达杰 http://arundhaj.com

【问题讨论】:

    标签: java hadoop hbase bigdata sqoop


    【解决方案1】:

    REST API 不像 RDBMS 那样标准化,据我所知,没有工具可以神奇地从您的 API 加载到 HBase,您必须围绕它构建一些东西。对于这种对 HBase 的重载,一个好的做法是使用 HBase 批量加载,这将比简单地使用 HBase API 使用更少的 CPU 和网络资源。这可以通过几个步骤完成:

    1. 使用 HFileOutputFormatOutputFormat 使用 Map/Reduce 作业准备数据。这可确保您的作业输出写入为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 中。

    【讨论】:

    • 出于好奇,那么人们如何设法将 Facebook 数据(或任何类似的服务,如 twitter、reddit)放在集群上并对这些数据进行分析?因为这些服务也只公开 API。
    • 不确定 Facebook,但在使用外部数据源时,设计一个 ETL 流程来提取这些数据并将其加载到您的集群中,然后用它做任何你想做的事情是非常标准的.我一直在与许多不同的来源一起工作,虽然有时获取可能是一个瓶颈,但它仍然是一个必要的步骤。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多