java - 将数据从 API 加载到 HBase

标签 java hadoop hbase bigdata sqoop

我正在使用一种第 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 和网络资源。这可以通过几个步骤完成:

  1. 使用 HFileOutputFormat 作为 OutputFormat 使用 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。

关于java - 将数据从 API 加载到 HBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14372310/

相关文章:

java - 为 class.getResource() 定义根类路径

hadoop - 如何使用 hadoop mapreduce 查找登录持续时间

hadoop - 无法在HBase中启动区域服务器

hadoop - 使用 Hadoop 处理来自多个数据源的数据

java - 编译、提供、APK - Android 依赖范围

java - achartengine : how to repaint/redraw chart

hadoop - 如何从桌面上的 Tableau 连接到 VMware 上的 Hive 服务器?

hadoop - 有没有办法将节点添加到正在运行的 Hadoop 集群?

java - 为什么我在这里收到 NotSerializedException?

hadoop - MapReduceIndexerTool 没有正确地重新索引文档