我使用bdutil在hadoop(2.6)集群上部署了spark(1.3.1)和yarn client,默认情况下,这些示例是用临时的外部ip创建的,到目前为止spark运行良好。考虑到一些安全问题,并且假设集群只在内部访问,我从示例中删除了外部IP;之后,sparkshell甚至不会运行,似乎无法与yarn/hadoop通信,只是无限期地卡住了。只有在我添加了外部IP回来,Spark壳开始正常工作。
我的问题是,运行sparkoveryarn需要节点的外部ip吗?为什么?如果是,是否会有任何关于安全等方面的担忧?谢谢!
1条答案
按热度按时间b5buobof1#
简短的回答
您需要外部ip地址来访问gcs,并且默认的bdutil设置将gcs设置为默认的hadoop文件系统,包括控制文件。使用
./bdutil -F hdfs ... deploy
使用hdfs作为默认值。使用外部ip地址时,安全性不应该是一个问题,除非你在gce网络配置中向防火墙规则添加了太多的许可规则。
编辑:目前似乎有一个错误,我们设置
spark.eventLog.dir
到gcs路径,即使默认的\u fs是hdfs。我归档了https://github.com/googlecloudplatform/bdutil/issues/35 来追踪这个。同时只需手动编辑/home/hadoop/spark-install/conf/spark-defaults.conf
在你的主人身上(你可能需要sudo -u hadoop vim.tiny /home/hadoop/spark-install/conf/spark-defaults.conf
对其拥有编辑权限)spark.eventLog.dir
至hdfs:///spark-eventlog-base
或者hdfs中的其他东西,然后运行hadoop fs -mkdir -p hdfs:///spark-eventlog-base
让它工作。冗长的回答
默认情况下,bdutil还将google云存储配置为“默认hadoop文件系统”,这意味着spark和yarn使用的控制文件需要访问google云存储。此外,需要外部IP才能访问google云存储。
在手动配置内部网络ssh之后,我成功地部分地重新编写了您的案例;在启动过程中,我实际上看到了以下几点:
正如所料,只要打电话
org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend.start
它试图联系谷歌云存储,但失败了,因为没有外部IP就无法访问gcs。为了解决这个问题,你可以使用
-F hdfs
创建集群时使用hdfs作为默认文件系统;在这种情况下,即使没有外部ip地址,一切都应该在集群内工作。在这种模式下,只要通过指定full来分配外部ip地址,您甚至可以继续使用gcsgs://bucket/object
路径作为hadoop参数。但是,请注意,在这种情况下,只要您删除了外部ip地址,您就不能使用gcs,除非您还配置了代理服务器,并通过代理提供所有数据;地面军事系统对此进行了配置fs.gs.proxy.address
.一般来说,没有必要仅仅因为有外部ip地址就担心安全问题,除非您在google compute engine的“默认”网络防火墙规则中打开了新的许可规则。