记录一下自己安装运行hadoop踩过的坑,方便以后复习查阅
-
在控制台中输入hdfs后提示
Error: JAVA_HOME is incorrectly set. Please update D:\hadoop\conf\hadoop-env.cmd
错误如下图
提示JAVA_HOME
不正确,让修改D:\hadoop\etc\hadoop\hadoop-env.cmd
这个文件,打开看看,
讲道理这么写没问题,然后在控制台输出了一下JAVA_HOME
,也能正确显示,但是就是提示你JAVA_HOME
不正确
后来在网上查到说jdk目录C:\Program Files\Java\jdk1.8.0_171
中间有个空格,所以 才出现错误
解决办法:
PROGRA~1
代替Program Files
即可,即改为C:\PROGRA~1\Java\jdk1.8.0_171
。
-
如果遇到namenode启动但是datanode没有启动
可能是多次格式化
namenode
,datanode
中保存(即配置文件中dfs.data.dir
在本地系统的路径)的current/VERSION
文件只是你第一次格式化时保存的namenode
的ID
,因此就会造成datanode
与namenode
之间的id
不一致。解决办法:
1.把配置文件中
dfs.datanode.data.dir
在本地系统的路径下的current/VERSION
中的clusterID
改为与namenode
一样。重启即可!2.或者直接把
tmp
文件删掉重新格式化 -
在调试程序的时候出现错误
java.net.MalformedURLException: unknown protocol: hdfs
是因为程序不知道有hdfs协议造成的,是由于默认的情况下,只支持http协议的
解决办法:
需要加上下面一段代码
//设定开启HDFS协议 URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
-
出现错误
Exception in thread "main" org.apache.hadoop.security.AccessControlException
没有权限
解决办法:
修改hdfs-site.xml ,增加
<property> <name>dfs.permissions.enabled</name> <value>false</value> </property>
-
eclipse
远程执行的时候出现权限问题Exception in thread "main" org.apache.hadoop.security.AccessControlException:
Permission denied: user=casuall, access=EXECUTE,
inode="/tmp":hadoop:supergroup:drwx------
解决办法:
Run as
—>Run Configurations
—>Arguments
—>VM arguments
:—>-DHADOOP_USER_NAME=hadoop
-
Exception message: /bin/bash: 第0行:fg: 无任务控制
原因:因为在wondows系统中无法使用#!/bin/bash平台兼容性的问题的
解决办法:
1:解决:打成
jar
包放在linux
下运行。ok2:跨平台提交的参数
//:如果要从windows系统中运行这个job提交客户端的程序,则需要加这个跨平台提交的参数
conf.set("mapreduce.app-submission.cross-platform","true");
如果打成
jar
包提交到linux
中去,跨平台提交的参数可以去掉 -
spark shell启动警告
Unable to load native-hadoop library for your platform
解决办法:
在
spark-env.sh
文件中加入LD_LIBRARY_PATH
环境变量LD_LIBRARY_PATH=$HADOOP_HOME/lib/native