BigQuery 到 Hadoop 集群 - 如何传输数据?

Posted

技术标签:

【中文标题】BigQuery 到 Hadoop 集群 - 如何传输数据?【英文标题】:BigQuery to Hadoop Cluster - How to transfer data? 【发布时间】:2015-01-13 21:43:39 【问题描述】:

我有一个 Google Analytics (GA) 帐户,用于跟踪应用的用户活动。我设置了 BigQuery,以便可以访问原始 GA 数据。每天都有数据从 GA 传入 BigQuery。

我有一个以编程方式查询 BigQuery API 的 Python 应用。这个应用程序正在给我所需的响应,这取决于我要查询的内容。

我的下一步是从 BigQuery 获取这些数据并将其转储到 Hadoop 集群中。我想理想地使用数据创建一个配置单元表。我想围绕 python 应用程序构建类似 ETL 过程的东西。例如,我每天都会运行 etl 进程,该进程运行 python 应用程序并将数据导出到集群。

最终,这个 ETL 过程应该放在 Jenkins 上,并且应该能够在生产系统上运行。

在规划此 ETL 流程时,我需要考虑哪些架构/设计/一般因素?

关于我应该如何处理这件事有什么建议吗?我有兴趣以最简单可行的方式做到这一点。

提前致谢。

【问题讨论】:

【参考方案1】:

从 BigQuery 到 Hadoop 的最简单方法是使用官方的 Google BigQuery Connector for Hadoop

https://cloud.google.com/hadoop/bigquery-connector

此连接器定义 BigQueryInputFormat 类。

编写查询以选择适当的 BigQuery 对象。 在 Hadoop 节点之间平均分配查询结果。 将拆分解析为 java 对象以传递给映射器。 Hadoop Mapper 类接收每个选定 BigQuery 对象的 JsonObject 表示形式。

(它使用 Google Cloud Storage 作为 BigQuery 数据和 Hadoop 使用的拆分数据之间的中介)

【讨论】:

嗨。感谢您的回答。我想出了另一种方法,将 Bigquery 数据集导出到 GCS,然后使用 gsutil 工具将数据从 GCS 存储桶下载到我的集群网关机器。 我还将研究 BigQuery Connector for Hadoop 并将其与我当前的流程进行比较。再次感谢! 从 BigQuery 进行简单的导出也很好,特别是因为您可以选择摄取数据的节点数量 - 有助于并行优化您获得的工作人员数量的任务。 此连接器是否可以将数据导入任何 hadoop 集群?例如使用 Cloudera 的一种设置。 bdutil 中 bigquery_env.sh 中的这一行让我感到困惑,我认为这意味着它可以在现有集群中启用大查询并且不设置新集群? # 此文件包含与 bdutil_env.sh 结合使用的环境变量覆盖,以便部署启用 bigquery 的 Hadoop 集群。 哦,“大查询范围”。使用那个是为了让您的 Google Compute Engine 实例可以无缝地对您的 Google BigQuery 项目进行身份验证。因此,如果您在 GCE 上使用 Cloudera 发行版,只需确保使用“bigquery”范围启动您的服务器。如果您不在 GCE 之外并且需要找出替代的身份验证方法,我建议您添加一个新的 *** 问题来解决该问题。【参考方案2】:

查看Oozie。它似乎符合您的要求。它具有工作流引擎、调度支持以及 shell 脚本和配置单元支持。

在安装和部署方面,它通常是hadoop发行版的一部分,但可以单独安装。它具有 db 作为持久层的依赖关系。这可能需要一些额外的努力。

它有 web UI 和 rest API。如果需要,可以自动管理和监控作业。

【讨论】:

以上是关于BigQuery 到 Hadoop 集群 - 如何传输数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 event_name 列启用集群,以便将数据从 Firebase Analytics 流式传输到 Bigquery

通过 Hadoop 输入格式示例用于 pyspark 的 BigQuery 连接器

BigQuery 表如何与分区和集群字段一起使用?

将数据从 BigQuery 表加载到 Dataproc 集群时出错

Hadoop集群以外的机器如何访问Hadoop集群,进行提交文件,下载文件?

Flink实战之StreamingFileSink如何写数据到其它HA的Hadoop集群