将文件从 Google Cloud Storage 直接下载到 HDFS 和 Hive 表中

Posted

技术标签:

【中文标题】将文件从 Google Cloud Storage 直接下载到 HDFS 和 Hive 表中【英文标题】:Downloading files from Google Cloud Storage straight into HDFS and Hive tables 【发布时间】:2015-12-10 17:00:35 【问题描述】:

我正在使用 Windows 命令行,因为 Unix 和防火墙的问题阻止了 gsutil 工作。我可以读取我的 Google Cloud Storage 文件并将它们复制到其他存储桶(我不需要这样做)。我想知道如何将它们直接下载到 HDFS(我正在“ssh”进入)?有人做过吗?理想情况下,这是第一部分,第二部分是为 Google Cloud Storage 数据创建 Hive 表,以便我们可以使用 HiveQL 和 Pig。

【问题讨论】:

忘了提一下,我可以直接将它们下载到我的 C:Users/Me ...然后上传到 HDFS,而是通过直接进入 hdfs 来缩短这个过程。谢谢 在 Linux 机器上,您可以通过单个命令行将 GS 下载通过管道传输到 HDFS 上传。不过在 Windows 上... 顺便说一句,“ssh-ing into HDFS”到底是什么意思?!?您使用的是hdfs dfs -put 之类的命令行、WebHDFS REST 接口还是一些 Microsoft 装置? 是的,使用 Unix 访问 Hadoop,然后使用 hdfs dfs -commands。但是在 Unix 上完全无法通过 gsutil 连接,所以中间的集成位让我很难过。你认识一个愤怒的工程师,他可能有解决方案吗? 啊,我忘记了一个警告:当您上传带有hdfs dfshadoop distcp 的文件时,会使用临时文件名,直到上传完成。 WebHDFS 不是这样:文件是以其真实名称创建的,如果它大于 1 个块(例如 128 MB),那么只要 DataNode 通知 NameNode 块 #1 已刷新,其他 HDFS 客户端就会看到它.因此,它可能会在不完整的情况下被检测和读取(尤其是在您的上传链接带宽较低的情况下)。 【参考方案1】:

您可以使用Google Cloud Storage connector,它为您已经在 Google Cloud Storage 中的数据提供 HDFS-API 兼容接口,因此您甚至不需要将其复制到任何地方,只需读取和直接写入您的 Google Cloud Storage桶/对象。

设置连接器后,如有必要,您还可以使用hdfs 工具在 HDFS 和 Google Cloud Storage 之间复制数据。

【讨论】:

嘿 Misha,我没看错吧,HDFS 在 Google Cloud 中,在 HDFS 和 Google 之间复制数据的能力似乎是单向的,HDFS 到 google cloud,而不是从。对于在本地 HDFS 中拥有大量数据集并希望将数据连接在一起进行分析的大型公司来说,这是极其有限的,这正是我正在做的事情。必须将所有内容都迁移到 Google Cloud 中并不是一个可行的选择。不幸的是,像这样的一种数据传输方式使数据的使用变得困难,因此有点让它变得毫无价值。 :-( @sadiemac — 这不是单向的,而是双向的。您是否尝试过它并没有为您工作,或者您是否认为它只是单向的?或者文档是否以某种方式暗示了这一点?在这种情况下,请告诉我是什么导致您得出这个结论,以便我们修复它,因为根本不是这样。 抱歉,Misha,我知道您也可以将数据移动到谷歌云中的 HDFS,在这方面我猜它是双向的,但将数据从本地 HDFS 复制到谷歌云 HDFS 不是我想要的要么。将来自 Google Cloud 的数据与本地 HDFS 集群集成是我所追求的。是的,连接器文档暗示所有这些转换只能在 Google Cloud 和 Cloud HDFS 中发生。例如,“适用于 Hadoop 的 Google Cloud Storage 连接器允许您直接在 Cloud Storage 中的数据上运行 Hadoop 或 Spark 作业”, @sadiemac — 您还可以在本地运行 GCS 连接器,在本地运行 HDFS,并使用 hdfs 在它们之间移动数据。结果,您最终将通过 HDFS API 将数据复制到 GCS 中或从 GCS 中复制出来。那是你要找的吗?感谢您对文档的反馈,我会与团队分享。

以上是关于将文件从 Google Cloud Storage 直接下载到 HDFS 和 Hive 表中的主要内容,如果未能解决你的问题,请参考以下文章

将大量文件从 Google Cloud Storage 复制到 Google Colab,无需记录/打印

将文件从 Google Cloud Storage 添加到云端硬盘

从 Google Cloud Function (Python) 将新文件写入 Google Cloud Storage 存储桶

将文件从 S3 存储桶复制到 Google Cloud Storage

Google Cloud Storage - 将文件从一个文件夹移动到另一个文件夹 - 使用 Python

Apache Beam/Google Dataflow - 将数据从 Google Datastore 导出到 Cloud Storage 中的文件