我正在尝试以伪分布式模式运行Hadoop以了解系统的工作方式。为了安装它,我从网站上下载了Hadoop-3.0.0,解开它。我完成了以下配置(为简洁起见,省略了配置标签):
芯-site.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>
纱-site.xml中
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value> </property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
执行此操作后,我使用
格式化了我的hdfshdfs 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在SAFEmode中的通知。如果我使用以下方式关闭保存模式:
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.
但是,我有足够的资源。单个datanode占用的空间不到8%,namenode占用了近100GB的空间。 datanode和namenode都报告为健康。因此,我认为问题是缺少辅助名称节点。考虑到这一点,有人知道什么可能导致SecondaryNameNode从PrimaryNameNode有不同的权限问题?它似乎试图将sNN放在本地机器上的某个位置 - 但是当我签入/tmp/hadoop*
时,所有文件权限似乎都是正常的。
感谢您的帮助。