api - 如何通过 Java API 在 Google Cloud Platform 上的 HDFS 中创建目录

标签 api hadoop google-hadoop

我在谷歌云平台上运行一个 Hadoop 集群,使用谷歌云存储作为持久数据的后端。我能够从远程机器 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() 命令时出现超时错误。

错误

org.apache.hadoop.net.ConnectTimeoutException:调用从 gl051-win7/192.xxx.1.xxx 到 111.222.333.444.bc.googleusercontent.com:8020 套接字超时异常失败:org.apache.hadoop.net.ConnectTimeoutException :WAITING channel 准备好连接时的 20000 毫秒超时。 ch : java.nio.channels.SocketChannel[连接挂起远程=111.222.333.444.bc.googleusercontent.com/111.222.333.444:8020]

您是否知道在 Google Cloud Platform 上针对 Hadoop 使用 Java Hadoop API 的任何限制?

谢谢!

最佳答案

看起来您正在本地机器上运行该代码并尝试连接到 Google Compute Engine VM;默认情况下,GCE 具有严格的防火墙设置,以避免将您的外部 IP 地址暴露给任意入站连接。如果您使用默认值,那么您的 Hadoop 集群应该在“默认”GCE 网络上。您需要关注 adding a firewall instructions允许端口 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 source-range 因为 Hadoop 不对这些传入请求进行身份验证或授权。您需要尽可能将其限制为仅计划拨入的入站 IP 地址。您可能还需要打开几个其他端口,具体取决于您使用什么功能连接到 Hadoop。

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

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

关于api - 如何通过 Java API 在 Google Cloud Platform 上的 HDFS 中创建目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148615/

相关文章:

hadoop - Hive 交叉连接在本地 map 连接上失败

c# - 如何从 C++ 函数库调用 .Net COM+ 对象?

java - 如何在数组响应android retrofit2中获取特定的响应数据

php - 创建新的 magento Rest api 以获取 magento 中的类别列表

hadoop - 在 Hadoop 中包含第三方 Jar

hadoop - 适用于 Hadoop 的 Google Cloud 连接器不适用于 Pig

css - 有谁知道基于 REST 的 CSS 压缩器?

python - Pyspark --py-files 不起作用

json - Apache spark 存储和查询 json 数据是一个很好的用例吗?

hadoop - Spark/Hadoop/Yarn集群通信需要外部ip?