当前位置: 首页 > 知识库问答 >
问题:

如何通过Java API在Google云平台的HDFS中创建目录

殳毅
2023-03-14

我正在Google云平台上运行Hadoop集群,使用Google云存储作为持久数据的后端。我能够从远程机器ssh到主节点,并运行hadoop fs命令。无论如何,当我尝试执行以下代码时,我得到了一个超时错误。

密码

FileSystem hdfs =FileSystem.get(new URI("hdfs://mymasternodeip:8020"),new Configuration());
Path homeDir=hdfs.getHomeDirectory();
//Print the home directory
System.out.println("Home folder: " +homeDir); 

// Create a directory
Path workingDir=hdfs.getWorkingDirectory();
Path newFolderPath= new Path("/DemoFolder");

newFolderPath=Path.mergePaths(workingDir, newFolderPath);
if(hdfs.exists(newFolderPath))
    {
        hdfs.delete(newFolderPath, true); //Delete existing Directory
    }
//Create new Directory
hdfs.mkdirs(newFolderPath); 

执行hdfs.exists()命令时,我得到一个超时错误。

错误

组织。阿帕奇。hadoop。网ConnectTimeoutException:来自gl051-win7/192的调用。xxx。1.xxx至111.222.333.444。不列颠哥伦比亚省。googleusercontent。com:8020套接字超时失败异常:org。阿帕奇。hadoop。网ConnectTimeoutException:等待通道准备好连接时超时20000毫秒。ch:java。nio。频道。SocketChannel[连接挂起远程=111.222.333.444.bc.googleusercontent.com/111.222.333.444:8020]

您是否知道在Google云平台上对Hadoop使用Java Hadoop API有任何限制?

谢谢

共有1个答案

王俊哲
2023-03-14

看起来您正在本地计算机上运行该代码,并试图连接到Google Compute Engine VM;默认情况下,GCE具有严格的防火墙设置,以避免将外部IP地址暴露给任意入站连接。如果您使用的是默认值,那么您的Hadoop集群应该位于“默认”GCE网络上。您需要遵循添加防火墙的说明,以允许在端口8020上传入TCP连接,并可能在其他Hadoop端口上以及从您的本地IP地址传入TCP连接,这样才能工作。看起来像这样:

gcloud compute firewall-rules create allow-http \
    --description "Inbound HDFS." \
    --allow tcp:8020 \
    --format json \
    --source-ranges your.ip.address.here/32

请注意,您真的希望避免打开0.0.0.0/0源代码范围,因为Hadoop不会对这些传入请求进行身份验证或授权。您需要尽可能将其限制为您计划拨入的入站IP地址。您可能还需要打开几个其他端口,具体取决于您使用的连接到Hadoop的功能。

更普遍的建议是,只要有可能,您应该尝试在Hadoop集群本身上运行代码;在这种情况下,您将使用主主机名本身作为HDFS权限,而不是外部IP:

hdfs://<master hostname>/foo/bar

这样,您可以将端口暴露限制在SSH端口22,其中传入流量由SSH守护程序正确控制,然后您的代码就不必担心哪些端口打开,甚至不必担心处理IP地址。

 类似资料:
  • 有没有可能删除一个谷歌云平台项目,在删除完成后,用相同的ID制作另一个GCP项目?

  • 我正在创建一个物联网设备,用户可以设置一个特定的时间来触发物联网设备的动作。下午01:00,空调自动启动。我正在使用谷歌云平台。我检查了GCP中的Cron作业,它在特定的时间或指定的间隔触发特定的URL。因为我的触发时间存储在datastore中,所以我必须在每分钟后使用cron job查询数据库,在那里我可以编写逻辑,如果时间匹配就触发操作。但总会有59秒的滞后,在最坏的情况下,否则我可以在每秒

  • 我正在谷歌云平台上工作,我必须使用java非Web应用程序访问云功能,就像我正在尝试使用谷歌云存储JSON API存储和检索谷歌云存储中的对象一样。 在访问这些之前,我需要对我的应用程序进行身份验证,所以我找到了授权API来进行授权访问。 null 我浏览了GCP文档,但没有得到区分这些文档的明确信息,我对GCP非常陌生,所以请您分享任何信息或博客链接,以说明如何使用Google Cloud Cl

  • 找到7个项目drwxr-xr-x-hbase用户0 201 4-06-25 18:58/hbase/.tmp ... 但当我运行此命令时,我会得到 yarn-site.xml Hbase配置hbase-site.xml 我可以浏览http://localhost:50070和http://localhost:8088/cluster 在hbase-marc-master-marc-pc.log中,

  • 有没有可能重新命名一个谷歌云平台项目?如果是,怎么做? 我不需要更改项目ID或编号。但我确实想更改项目名称(人类用来标识云平台项目的名称)。 谢谢你的提示!

  • 我在谷歌云平台上托管了一个基本的网络应用程序,我注意到在过去的几个月里,我的成本在慢慢上升。在过去的30天里,它真的加速了(幸运的是,在一个很小的基础上--我仍然在每天不到2美元的水平上滴答作响)。我已经几个月没有添加任何新的功能或客户端了,所以这有点令人惊讶。 我的第一直觉是交通增加了。我在App Engine仪表板上看不到类似的内容,但我放入了一堆优化,并大幅降低了QPS以防万一。没有变化。