1

我正在尝试以伪分布式模式运行 Hadoop,以了解系统的工作方式。为了安装它,我从站点下载了 Hadoop-3.0.0,解压了它。我已经完成了如下配置(为简洁起见,省略了配置标签):

核心站点.xml

<property>
   <name>fs.defaultFS</name>
   <value>hdfs://localhost/</value>
</property>

hdsf-site.xml

<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>

mapred-site.xml

<property>
   <name>mapreduce.framework.name</name>
   <value>yarn</value> 
</property>

纱线站点.xml

<property>
   <name>yarn.resourcemanager.hostname</name>
   <value>localhost</value> </property>
<property>
   <name>yarn.nodemanager.aux-services</name>
   <value>mapreduce_shuffle</value> 
</property>

这样做之后,我已经格式化了我的 hdfs 使用

hdfs namenode -format

我还使用以下设置了无密码 ssh:

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa2
cat ~/.ssh/id_rsa2.pub >> ~/.ssh/authorized_keys

(我还使用配置文件将 id_rsa2.pub 添加为 localhost 的默认值,因为我已经将 id_rsa.pub 用于其他用途,并且不想混合搭配以防我破坏了某些东西)

我可以通过 ssh 进入 localhost。一切看起来都很好。

然后我运行 start-dfs.sh,我看到了这个错误:

Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [zm.local]
zm.local: zm@zm.local: Permission denied (publickey,password,keyboard-interactive).
2018-01-16 17:31:35,807 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

如果我运行 jps(在启动 yarn 和 mapreduce 历史服务器之后),我有以下内容:

37921 NodeManager
38070 Jps
37434 NameNode
38060 JobHistoryServer
37821 ResourceManager

值得注意的是,SecondaryNameNode 丢失了,我的假设是由于上述错误。

然后我可以尝试使用 hadoop 的 fs 命令,我可以创建一个文件夹并进行查找。但是,如果我尝试复制任何数据,我会收到 NameNode 处于安全模式的通知。如果我使用以下方法关闭保存模式:

hdfs dfsadmin -safemode leave

它立即重新打开。通过转到 localhost 上的 namenode 端口,我看到以下消息:

Safe mode is ON. Resources are low on NN. Please add or free up more resourcesthen turn off safe mode manually. NOTE: If you turn off safe mode before adding resources, the NN will immediately return to safe mode. Use "hdfs dfsadmin -safemode leave" to turn safe mode off.

不过,我有很多资源。单个数据节点使用了不到 8% 的分配空间,名称节点几乎有 100GB 的空间。datanode 和 namenode 都报告为健康。因此,我认为问题在于缺少辅助名称节点。考虑到这一点,是否有人知道可能导致 SecondaryNameNode 与 PrimaryNameNode 具有不同权限问题的原因?它似乎试图将 sNN 放在本地机器上的某个地方 - 但是当我签入时/tmp/hadoop*,所有文件权限似乎都是正常的。

谢谢你的帮助。

4

0 回答 0