将 hadoop fs 路径转换为 ​​EMR 上的 hdfs:// 路径

2024-04-27

我想知道如何将数据从 EMR 集群的 HDFS 文件系统移动到 S3 存储桶。我认识到我可以直接在 Spark 中写入 S3,但原则上,之后执行它也应该很简单,到目前为止,我还没有发现在实践中这是正确的。

AWS 文档建议s3-dist-cp用于在 HDFS 和 S3 之间移动数据。这文档 http://docs.aws.amazon.com/emr/latest/ReleaseGuide/UsingEMR_s3distcp.html for s3-dist-cp规定 HDFS 源应以 URL 格式指定,即hdfs://path/to/file。到目前为止,我已使用以下命令在 HDFS 和本地文件系统之间移动数据hadoop fs -get,其语法为path/to/file而不是hdfs://path/to/file。目前尚不清楚两者之间如何映射。

我正在通过 SSH 进入主节点。我尝试了以下操作,每个都有两个和三个斜杠:

  • hdfs:///[public IP]/path/to/file
  • hdfs:///[public IP]:8020/path/to/file
  • hdfs:///localhost/path/to/file
  • hdfs:///path/to/file
  • /path/to/file(以及许多变体)

在每种情况下,我的命令均按照文档进行格式化:

s3-dist-cp --src hdfs://... --dest s3://my-bucket/destination

我尝试过单个文件和整个目录。在每种情况下,我都会收到源文件不存在的错误。我究竟做错了什么?


相对和/或非完全限定路径会根据默认文件系统(在 core-site.xml 中配置为 fs.defaultFS,在 EMR 上默认为 hdfs)和当前工作目录(默认)自动解析为完全限定路径到/用户/。

在 EMR 上,像 /path/to/file 这样的绝对路径相当于 hdfs:///path/to/file。像 path/to/file 这样的相对路径解析为 hdfs:///user/hadoop/path/to/file (假设您以 hadoop 用户身份运行命令)。

您的 hdfs:// 路径遇到“文件未找到”错误的原因是(对于大多数示例)您将主机名放在了错误的位置,因为主机名前有太多斜杠。如果包含主机名,则其前面应该只有两个斜杠。不过,您实际上不需要包含主机名,因此您也可以编写 hdfs:///path/to/file。 (连续三个斜杠意味着将使用默认主机名。)在大多数示例中,因为您有三个斜杠and包括主机名,它将主机名作为路径的一部分,而不是主机名。

在第四个示例(hdfs:///path/to/file)中,该路径实际上是有效路径,但它与 path/to/file 不同,后者是相对路径。与我上面提到的类似,/path/to/file 相当于 hdfs:///path/to/file,而 path/to/file 相当于 hdfs:///user/hadoop/path/to/file 。

顺便说一句,如果您使用主机名,我很确定您需要使用私有主主机名,而不是公共 IP。 (不过,您可以完全保留主机名,并连续使用三个斜杠来表示您不包含主机名。)我建议不要使用主机名,因为那样您就需要随时更改路径您在不同的集群上运行了该命令。

最后,“hadoop fs -get”仅采用非 uri 样式路径而 s3-dist-cp 仅采用 uri 样式路径并不完全正确。其中任何一个都采用任一类型的路径。 “hadoop fs -get /path/to/file”和“hadoop fs -get hdfs:///path/to/file”都是有效且等效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 hadoop fs 路径转换为 ​​EMR 上的 hdfs:// 路径 的相关文章

随机推荐

  • 将某些软件包的 nuget 软件包更新限制为当前版本

    有没有办法禁用项目中安装的特定 nuget 包的更新 我已经对几个 javascript 库包进行了一些本地修改 并且不想冒将来有人更新我的更改的风险 我从未创建过自己的 nuget 包 我猜一种选择可能是分叉现有的包 你可以尝试约束包 h
  • 检查变量是否存在 - Terraform 模板语法

    我正在尝试使用 terraform 模板语法检查模板文件中是否存在变量 但出现错误This object does not have an attribute named proxy set header cat nginx conf tm
  • JavaScript 文件中的代码如何获取文件的 URL?

    我需要将 CSS 样式表动态加载到位于不同的领域 如何获取 JS 文件的完整 URL 以在href样式表的属性 例如 结构如下 http bla com js script js http bla com css style css 我想将
  • 与 jQuery 配合使用的backbone.js 替代品?

    有没有像backbone js这样的东西的替代品 它为你的前端javascript提供了一些框架 结构 但没有任何不需要的依赖项 并且与jQuery更紧密地结合在一起 您需要一个易于使用的 MVC 框架吗 因为Sammy js http s
  • 如何使用 Spring 配置文件设置 Flyway 迁移文件位置

    我有两个 Spring 配置文件dev and test配置为开发和测试环境 在每个环境中我使用不同的数据库即h2在开发和postgresql在测试中 以下是每个配置文件的我的属性文件 其中 vendor 由 spring boot 解决h
  • 如何指定 Gradle 包装器下载位置?

    我们将项目转移到了 gradle 并在 Jenkins 上持续构建 我们使用 gradle 包装器和 Jenkings gradle 插件 通过查看控制台输出 我发现每次构建都会下载 gradle 11 24 42 Downloading
  • 堆栈小部件内的列表视图不起作用(scrollDirection:Axis.vertical)

    我需要做这个设计 This is my code result 但是当我添加列表视图时它不起作用我需要垂直列表而不是水平列表列表视图 builder 滚动方向 Axis vertical 收缩包装 真实 项目数量 12 itemBuilde
  • C 结构体中的 Typedef

    首先是令我困惑的代码 typedef struct Object typedef int MyInt void destructor Object void constructor struct Object Object 为什么编译器阻止
  • Heroku 在部署时不会预编译资产

    它在其文档中非常清楚地表明 如果我不在本地预编译它们 它就会执行此操作 说实话 我对在本地预编译这些没有兴趣 我所经历过的生产 rb 我已经复制了应用程序 rb In my 生产 rb config serve static assets
  • 使用日期作为窗口函数实现 RANGE

    从 SQLAlchemy 1 4 25 开始 没有内置支持 所以我尝试使用该解决方案here https stackoverflow com a 69606048 11277108 这是我的复制 from datetime import d
  • 使用 ViewBag 时出现 RuntimeBinderException

    我们收到 Layout cshtml 中使用的 Viewbag 项目的 RuntimeBinderException 我们在内存分析器中观察到这些异常 它们不是致命的 一切正常 但很烦人 我们想清除它们 例如 以下代码会导致异常 Rende
  • 有时 git 会在没有我要求的情况下将所有远程 git 分支作为本地分支进行跟踪。发生了什么?

    有时 git 会自发地 在某些但不是全部 拉取 或 克隆 操作期间 将存储库的所有远程分支复制到我的本地存储库中 甚至将它们全部设置为正确跟踪相应的远程分支 这是什么原因造成的 有什么办法可以让我故意这样做吗 如果您只是从远程分支执行普通分
  • 如何获取屏幕触摸的 x,y 坐标?

    当我的应用程序运行时 每当有人触摸屏幕时 是否有一种简单的方法来获取 x y 坐标 只是想将它们存储在一些整数中 覆盖onTouchEvent MotionEvent event 然后打电话event getX and event getY
  • 如何强制 JTable 在包含阿拉伯字符的情况下不反转文本?

    我有以下文字 word 但是当它显示在我的 JTable 上时 它看起来像这样 word 在每个 JLabel 或 TextArea 或任何其他输入中 它确实看起来像原始文本 word 仅在 JTable 上我遇到这样的问题 我不在乎它是否
  • 延迟作业:如何强制处理失败的作业

    我正在维护一个 Rails 应用程序 在该应用程序上运行 Delayed job gem 来发送电子邮件 我刚刚注意到 由于应用程序中的错误 我所有延迟的工作在过去几天都失败了 现在错误已修复 我想尽快处理作业 但它们已经有太多失败的尝试
  • 使窗口在特定边界内可拖动 WPF

    我有一个 wpf 子窗口 允许使用 DragMove 方法进行拖动 但是 我需要允许仅在其父窗口控件的范围内拖动窗口 谁能建议一种方法来实现这一目标 谢谢 有两种方法可以做到这一点 Using 地点已结束 http msdn microso
  • 会话复制在多节点集群上的 glassfish 中不起作用

    会话复制在多节点集群上的 glassfish 中不起作用 1 应用程序在 web xml 中包含可分发标签 2 应用程序部署在集群 c1 中 该集群包含同一节点上的 2 个实例 时 会话复制可以正常工作 3 当部署在集群 c2 包含两台 C
  • 配置 Jest 模仿 webpack 解析 root 和解析别名

    我正在努力使用 Webpack 和 Jest 建立一个项目 目前 Webpack 解决了配置导致 Jest 测试复杂化的问题 在我的 webpack 配置中 我设置了以下选项 resolve root dirname src extensi
  • Gnu 时间和格式化输出

    我想使用 gnu time 来测量一些小 c 程序的运行时间 人 中写道 f FORMAT format FORMAT Use FORMAT as the format string that controls the output of
  • 将 hadoop fs 路径转换为 ​​EMR 上的 hdfs:// 路径

    我想知道如何将数据从 EMR 集群的 HDFS 文件系统移动到 S3 存储桶 我认识到我可以直接在 Spark 中写入 S3 但原则上 之后执行它也应该很简单 到目前为止 我还没有发现在实践中这是正确的 AWS 文档建议s3 dist cp