为什么Google Dataproc HDFS Name Node是Safemode



我试图通过向Dataproc集群提交Spark作业来写入hdfs:///home/bryan/test_file/的HDFS目录。

我得到一个错误,名称节点处于安全模式。我有一个解决方案可以让它退出安全模式,但我担心这可能是由于另一个原因。

为什么Dataproc集群处于安全模式?

ERROR org.apache.spark.streaming.scheduler.JobScheduler: Error running job streaming job 1443726448000 ms.0
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create directory /home/bryan/test_file/_temporary/0. Name node is in safe mode.
The reported blocks 125876 needs additional 3093 blocks to reach the threshold 0.9990 of total blocks 129098.
The number of live datanodes 2 has reached the minimum number 0. Safe mode will be turned off automatically once the thresholds have been reached.

什么是安全模式

在数据节点报告哪些块在线之前,NameNode处于安全模式。这样做是为了确保即使(实际上)有足够的(但未报告的)复制,NameNode也不会开始复制块。

为什么会这样

一般来说,这种情况不应该发生在您所描述的Dataproc集群中。在这种情况下,我怀疑集群中的虚拟机没有正常联机或遇到问题(网络或其他),因此集群从未离开安全模式。坏消息是,这意味着集群处于糟糕的状态。由于Dataproc集群启动速度很快,我建议您删除集群并创建一个新集群。好消息是,这些错误应该是相当罕见的。

原因是您可能在启动worker之前启动了主节点(容纳namenode)。如果关闭所有节点,首先启动worker ,然后启动主节点,它应该可以工作。我怀疑主节点首先启动,检查工作节点是否在那里。如果它们离线,它将进入安全模式。一般来说,这种情况不应该发生,因为心脏跳动的存在。然而,事情就是这样,重启主节点将解决这个问题。在我的例子中,是在Dataproc上使用spark。

HTH

最新更新