在测试安装hadoop的时候,通常会遇到大家在同一批机器上安装hadoop的情况,这样的话会有端口已经被占用导致安装不成功的情况出现。
Hadoop日志会提示这种错误:
ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because java.net.BindException: Address already in use
在这种情况下,最好的方法就是在配置环境时把所有的端口配置都进行修改。
在hadoop 0.20版本会涉及到3个配置文件:
core-site.xml:
1: <property>2: <name>fs.default.name</name>3: <value>hdfs://master:9100</value>4: <description>5: 为默认hdfs文件访问URI
6: </description>7: </property>
hdfs-site.xml
1: <property>2: <name>dfs.datanode.address</name>3: <value>0.0.0.0:50011</value>4: <description>5: 默认为50010, 是datanode的监听端口
6: </description>7: </property>8: <property>9: <name>dfs.datanode.http.address</name>10: <value>0.0.0.0:50076</value>11: <description>12: 默认为50075,为datanode的http server端口
13: </description>14: </property>15: <property>16: <name>dfs.datanode.ipc.address</name>17: <value>0.0.0.0:50021</value>18: <description>19: 默认为50020, 为datanode的ipc server端口
20: </description>21: </property>
mapred-site.xml
1: <property>2: <name>mapred.job.tracker</name>3: <value>master:9101</value>4: <description>5: job tracker运行的位置和端口
6: </description>7: </property>8:
9: <property>10: <name>mapred.task.tracker.http.address</name>11: <value>0.0.0.0:50061</value>12: <description>13: 默认为50061, 是task tracker的http server端口
14: </description>15: </property>
以上端口都配置为和其他人不冲突的端口,然后启动hadoop就可以顺利启动了。
PS:
1:如果遇到这种错误:
ERROR org.apache.hadoop.mapred.TaskTracker: Can not start task tracker because org.apache.hadoop.ipc.RemoteException: java.io.IOException: Unknown protocol to name node: org.apache.hadoop.mapred.InterTrackerProtoco
说明你在core-site.xml中fs.default.name的端口 和 mapred-site.xml中mapred.job.tracker中端口配置为完全相同的了,请修改为不同端口。
2:如果遇到这种:
error: org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /tmp/hadoop-*/mapred/system. Name node is in safe mode.
请不要急,NameNode会在开始启动阶段自动关闭安全模式,然后启动成功。如果你不想等待,可以运行:
bin/hadoop dfsadmin -safemode leave 强制结束。
解释:安全模式
NameNode启动时会从fsimage和edits日志文件中装载文件系统的状态信息,接着它等待各个DataNode向它报告它们各自的数据块状态,这样,NameNode就不会过早地开始复制数据块,即使在副本充足的情况下。这个阶段,NameNode处于安全模式下。NameNode的安全模式本质上是HDFS集群的一种只读模式,此时集群不允许任何对文件系统或者数据块修改的操作。通常NameNode会在开始阶段自动地退出安全模式。如果需要,你也可以通过’bin/hadoop dfsadmin -safemode’命令显式地将HDFS置于安全模式。NameNode首页会显示当前是否处于安全模式。关于安全模式的更多介绍和配置信息请参考JavaDoc:setSafeMode()。