【问题标题】:Copying data from cloudera cluster to google cloud hdfs cluster using distcp使用 distcp 将数据从 cloudera 集群复制到 google cloud hdfs 集群
【发布时间】:2016-04-27 21:19:40
【问题描述】:

我正在使用 cloudera quickstart vm。我昨天开始玩谷歌云平台。我正在尝试将 cloudera hdfs 中的数据复制到 1.谷歌云存储(gs://bucket_name/) 2. google cloud hdfs集群(使用hdfs://google_cluster_namenode:8020/)

  1. 我按照this post中的说明设置了服务帐户身份验证并配置了我的cloudera core-site.xml

    hadoop fs -cp hdfs://quickstart.cloudera:8020/path_to_copy/ gs://bucket_name/
    

工作正常。但是,我无法使用 distcp 复制到谷歌云存储。我收到以下错误。我知道这不是 URI 问题。我还有什么遗漏的吗?

Error: java.io.IOException: File copy failed: hdfs://quickstart.cloudera:8020/path_to_copy/file --> gs://bucket_name/file
at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:284)
at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:252)
at org.apache.hadoop.tools.mapred.CopyMapper.map(CopyMapper.java:50)
at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:145)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:787)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:163)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1671)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 
Caused by: java.io.IOException: Couldn't run retriable-command: Copying hdfs://quickstart.cloudera:8020/path_to_copy/file to gs://bucket_name/file
at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:101)
at org.apache.hadoop.tools.mapred.CopyMapper.copyFileWithRetry(CopyMapper.java:280)
... 10 more 
Caused by: java.lang.IllegalArgumentException: java.net.URISyntaxException: Relative path in absolute URI: gs://bucket_name.distcp.tmp.attempt_1461777569169_0002_m_000001_2
at org.apache.hadoop.fs.Path.initialize(Path.java:206)
at org.apache.hadoop.fs.Path.<init>(Path.java:116)
at org.apache.hadoop.fs.Path.<init>(Path.java:94)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.getTmpFile(RetriableFileCopyCommand.java:233)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doCopy(RetriableFileCopyCommand.java:107)
at org.apache.hadoop.tools.mapred.RetriableFileCopyCommand.doExecute(RetriableFileCopyCommand.java:100)
at org.apache.hadoop.tools.util.RetriableCommand.execute(RetriableCommand.java:87)
... 11 more
  1. 我无法让 distcp 连接到 google cloud hdfs namenode;我收到“正在重试连接到服务器”。我找不到任何文档来配置 cloudera hdfs 集群和 google cloud hdfs 集群之间的连接。我假设服务帐户身份验证也应该与 google hdfs 一起使用。是否有可用于在集群之间设置副本的参考文档?我还缺少其他身份验证设置吗?

【问题讨论】:

  • "我知道这不是 URI 问题" 你怎么知道的? cloudera 虚拟机如何知道如何处理gs://?这不是一个常见的 URI。您收到的是URISyntaxException,所以我想说这是一个 URI 问题
  • 我的意思是说,当我使用 hadoop fs -cp 时,相同的 URI 正在工作。但是distcp看不懂?
  • 您链接到的问题引用了旧版本的连接器(1.2.8,而当前版本是 1.4.5)。您能否验证您在集群上安装了哪个版本?此页面包含获取连接器的详细信息:cloud.google.com/hadoop/google-cloud-storage-connector#getting 此外,尝试写入 GCS 上的目录可能是值得的:gs://your_bucket/directory/file(我已验证 vanilla hadoop distcp 到桶在最新版本中工作,但不适用于 1.2.8,错误消息似乎表明它正在破坏桶)。
  • @Angus 感谢您的回复。是的,它是 1.2.8 v。安装 1.4.5 会引发其他类路径问题。需要检查一下。是的,我正在尝试写入 gcs 上的目录。

标签: hadoop google-cloud-storage google-cloud-platform cloudera-cdh cloudera-quickstart-vm


【解决方案1】:

事实证明,我必须修改防火墙规则以允许来自运行 distcp 的 ip 的 tcp/http。检查 GCP 计算实例上的网络防火墙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多