最本质的错误:Ubuntu在联网时要选择一个主机上的适配器作为网络的物理接口,如果此物理接口不能访问互联网,就会一直连接,最后连接失败,或者显示有线连接连接成功,但是“连接已断开,现在处于离线状态”(如P3)
将“界面名称”选择为主机上正在使用的可以访问互联网的网络适配器。
作为扩展,可以了解一下VirtualBox提供的几种最常用的几种网络配置功能
这个选项定义了虚拟机网络适配器的连接方式,可选择的模式包括:
在选择桥接模式时,该选项用于选择物理网络适配器(如无线网卡或以太网卡)。
3. 控制芯片(T):
这个选项允许你在虚拟机中选择要模拟的网络适配器类型,比如 Intel PRO/1000 MT Desktop 或者 PCnet-FAST III 等。
4. 混杂模式(P):
当使用桥接模式时,开启混杂模式可以允许虚拟机接收主机网络上的所有数据包,而不仅仅是发送给虚拟机的数据包。
5. MAC 地址(M):
这是虚拟机网络适配器的 MAC 地址。你可以手动指定一个 MAC 地址,也可以让 VirtualBox 自动生成一个。
在虚拟机和主机之间传输文件本质上只要两台设备可以ping通就行,通过上面的知识我们可以判定使用
“Host-Only”我们也是可以实现文件传输而不一定要是“桥接模式”,如果要实现局域网组网,就必须选择桥接模式了。
Exception in thread "main" org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot create file/user/hadoop/merge.txt. Name node is in safe mode.
The reported blocks 3 needs additional 1 blocks to reach the threshold 0.9990 of total blocks 5.
The minimum number of live datanodes is not required. Safe mode will be turned off automatically once the thresholds have been reached. NamenodeHostName:Master
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.newSafemodeException(FSNamesystem.java:1468)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1455)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2429)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2375)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:791)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:469)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:527)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1036)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1000)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:928)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2916)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.hadoop.ipc.RemoteException.instantiateException(RemoteException.java:121)
at org.apache.hadoop.ipc.RemoteException.unwrapRemoteException(RemoteException.java:88)
at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:281)
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1212)
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1191)
at org.apache.hadoop.hdfs.DFSClient.create(DFSClient.java:1129)
at org.apache.hadoop.hdfs.DistributedFileSystem$8.doCall(DistributedFileSystem.java:531)
at org.apache.hadoop.hdfs.DistributedFileSystem$8.doCall(DistributedFileSystem.java:528)
at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:542)
at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:469)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1118)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:1098)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:987)
at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:975)
at MergeFile.doMerge(MergeFile.java:45)
at MergeFile.main(MergeFile.java:72)
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException): Cannot create file/user/hadoop/merge.txt. Name node is in safe mode.
The reported blocks 3 needs additional 1 blocks to reach the threshold 0.9990 of total blocks 5.
The minimum number of live datanodes is not required. Safe mode will be turned off automatically once the thresholds have been reached. NamenodeHostName:Master
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.newSafemodeException(FSNamesystem.java:1468)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkNameNodeSafeMode(FSNamesystem.java:1455)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFileInt(FSNamesystem.java:2429)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.startFile(FSNamesystem.java:2375)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.create(NameNodeRpcServer.java:791)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.create(ClientNamenodeProtocolServerSideTranslatorPB.java:469)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:527)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1036)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:1000)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:928)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1729)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2916)
at org.apache.hadoop.ipc.Client.getRpcResponse(Client.java:1545)
at org.apache.hadoop.ipc.Client.call(Client.java:1491)
at org.apache.hadoop.ipc.Client.call(Client.java:1388)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:233)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:118)
at com.sun.proxy.$Proxy9.create(Unknown Source)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.create(ClientNamenodeProtocolTranslatorPB.java:366)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:422)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeMethod(RetryInvocationHandler.java:165)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invoke(RetryInvocationHandler.java:157)
at org.apache.hadoop.io.retry.RetryInvocationHandler$Call.invokeOnce(RetryInvocationHandler.java:95)
at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:359)
at com.sun.proxy.$Proxy10.create(Unknown Source)
at org.apache.hadoop.hdfs.DFSOutputStream.newStreamForCreate(DFSOutputStream.java:276)
... 14 more
Hadoop的NameNode(NN)处于安全模式(Safe Mode)。在安全模式下,HDFS的写操作(如创建文件)受限制,直到满足特定的条件才能正常进行写入。
安全模式是HDFS中的一种保护机制,它会在某些情况下自动触发,例如当集群启动、或者在某些数据块复制的情况下。一般情况下,当数据块的复制数量达到一定阈值时,NameNode会自动退出安全模式。
查看安全模式状态: 使用以下命令检查HDFS当前的安全模式状态:
hdfs dfsadmin -safemode get
如果它显示HDFS处于安全模式,你可以等待HDFS自动退出安全模式,或者手动离开安全模式。
手动离开安全模式: 如果等待时间太长,你可以手动离开安全模式。使用以下命令离开安全模式:
hdfs dfsadmin -safemode leave
Exception in thread "main" java.lang.IllegalArgumentException: java.net.UnknownHostException: localhast
at org.apache.hadoop.security.SecurityUtil.buildTokenService(SecurityUtil.java:445)
at org.apache.hadoop.hdfs.NameNodeProxiesClient.createProxyWithClientProtocol(NameNodeProxiesClient.java:140)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:355)
at org.apache.hadoop.hdfs.DFSClient.<init>(DFSClient.java:289)
at org.apache.hadoop.hdfs.DistributedFileSystem.initialize(DistributedFileSystem.java:172)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3303)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:124)
at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3352)
at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3320)
at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:479)
at MergeFile.doMerge(MergeFile.java:40)
at MergeFile.main(MergeFile.java:72)
Caused by: java.net.UnknownHostException: localhast
... 12 more
代码中的端口号和主机地址与Hadoop设置的不一致,找不到要访问的内容
将代码和“core-site.xml”中的配置保持一致
除了上述几个记录在册的报错,我还遇到了很多稀奇古怪的报错,他们产生的原因多是由于实验教程的指导书是基于“伪分布式”的,我在将Hadoop配置成“分布式集群”后接着做实验,没有将其还原为“伪分布式”。虽然我早就猜测到出现这么多报错,可能是这个配置问题,但我仍然硬着头皮做下去,想象着做分布式可以让我学到更多东西。后发现自己的进度落后其他同学太多,与现实妥协,调回“伪分布式”配置,赶在最后一节实验课结束前,完成了所有实验。如果只是为了完成学习任务,还是不要“头铁”,浪子回头金不换。