hadoop
本人已在centos7上部署了hadoop的集群环境,现在在windows下的idea中进行测试,在测试过程中遇到以下问题,在此做下记录。
如下,测试代码:
// 从hadoop上拉取文件下来到本地
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(new URI("hdfs://192.168.3.85:9000"), conf);
fs.copyToLocalFile(new Path("/file/test"), new Path("E:\\"));
fs.close();
}
1、java.io.FileNotFoundException: Hadoop home directory
问题1:java.io.FileNotFoundException: java.io.FileNotFoundException: Hadoop home directory E:\hadoop-3.2.2 does not exist -see https://wiki.apache.org/hadoop/WindowsProblems
原因:在本地做测试的时候,也需要安装一份hadoop。
解决方法:我直接拷贝了一份在centos7上的hadoop安装包,并解压在我的E盘中,该问题解决。
2、WARN - Did not find winutils.exe: {}
问题2:java.io.FileNotFoundException: Could not locate Hadoop executable: E:\hadoop-3.2.2\bin\winutils.exe
原因:在安装的hadoop文件下的bin目录中缺少该winutils.exe程序,该程序是编译后的文件,idea执行需要该程序。
解决方法:如图
默认hadoop中的bin目录
需要添加额外的程序,这里找到winutils-master下自己的相近符合的版本,将其bin目录下的所有文件拷贝到hadoop的bin目录下。
这里附上winutils的下载地址:百度网盘 请输入提取码
提取码:y8n2
再次启动后,成功将hdfs上的文件拷贝到本地。
3、HADOOP_HOME and hadoop.home.dir are unset
问题3:java.io.FileNotFoundException: HADOOP_HOME and hadoop.home.dir are unset
原因:在我的电脑中没有给它设置环境变量,因此将环境变量加上。
解决方法:如下图
HADOOP_HOME环境
path环境
保存再次启动程序,解决问题。
4、No Route to Host from kafka1/192.168.3.85 to kafka3:8485 failed on socket timeout exception: java.net.NoRouteToHostException: No route to host
问题4:java.net.NoRouteToHostException: No route to host
原因:没有关闭防火墙
解决方法:关闭几个节点中的防火墙, systemctl stop firewalld
5、Caused by: org.apache.hadoop.ipc.RemoteException
问题5:Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=Administrator, access=WRITE, inode="/":auditsys:supergroup:drwxr-xr-x
原因:在java代码中访问hadoop,被通知没有权限的问题。
解决方法:在hadoop的服务器上,最便捷的方式为将所有目录改为 777 权限,命令为
hdfs dfs -chmod 777 -R /
6、Got error, status=ERROR, status message , ack with firstBadLink as 192.168.3.86:9866
问题6:Got error, status=ERROR, status message , ack with firstBadLink as x.x.x.x:xxxx
原因:这个ip的防火墙没关,访问不到。
解决方法:去这一台服务器上,将防火墙给关闭了。命令:systemctl stop firewalld
7、org.apache.hadoop.ipc.RemoteException
(org.apache.hadoop.hdfs.server.namenode.SafeModeException)
问题7:hadoop开启了安全模式
解决方法:hdfs dfsadmin -safemode leave
8、Permission denied: user=Administrator, access=WRITE, inode="/":root:supergroup:drwxr-xr-x
问题7:没有权限
解决方法:FileSystem fs = FileSystem.get(new URI("hdfs://ip:9000/"),conf,"auditsys");
9、java.net.ConnectException: Connection refused: no further
conf.set("fs.defaultFS", "hdfs://ip:9000"); FileSystem fs = FileSystem.get(new URI("hdfs://ip:9000/"),conf,"root");
解决方法:去掉conf.set方法