出现cannot creat directory或cannot creat file类型
如下报错信息:
cannot create directory Permission denied
如果使用的是 user 用户,多数情况下是因为文件权限问题,hadoop3.3.1、big_data(存数据)、log_hadoop(存日志) 文件都要将权限给 user。
不识别主机名称,如下报错信息:
java.net.UnknownHostException: hadoop102: hadoop102
java.net.InetAddress.getLocalHost(InetAddress.java:1475)
解决方案:检查 etc/hosts
文件配置和主机名称,不要起一些奇怪的主机名。
主机名称更改地址 /etc/hostname
如果集群是第一次启动,需要在 hadoop102 节点格式化 NameNode
hdfs namenode -format
如果不是第一次格式化,则需要先停掉 namenode 和 datanode 进程,再删除所有机器上的 big_data(存数据) 和 log_hadoop(存日志) 文件夹,然后重新创建 big_data 和 log_hadoop 文件夹,将权限全部给到 user,再进行格式化。(如果没有配置这些,默认路径在 /tmp
目录下)
因为格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找不到已往数据。
原因:ssh没有配置好。
原因:如果不是用 rpm 安装需要去 /etc/profile
文件下配置环境变量。rpm 安装默认在 /usr/java/default
不需要配置环境变量。
原因:是在 Linux 的根目录下 /tmp
目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。
原因有以下几种:
1)防火墙没关闭
systemctl stop firewalld.service
systemctl disable firewalld.service
2)模块没有启动
3)主机名称配置错误
4)IP地址配置错误
5)如果只是8088端口无法打开。
vim /etc/hosts
注释或删除如下代码
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 hadoop102
报错内容:
INFO mapreduce.JobSubmitter: Cleaning up the staging area /tmp/hadoop-yarn/staging/root/.staging/job_1510302622448_0003
出错原因:单机读取的是本地的文件,分布式环境下需要从hdfs 上读取文件。
解决方案:将本地的文件上传到 hdfs 上,然后再运行可以成功执行。
报错内容:
Output directory xxx already exists
出错原因:输出目录已存在
解决方案:修改输出目录,输出目录需要为空目录,所以在后面随便加上一个目录名,则会在 /output
目录下创建目录,如果是多次计算每次都需要指定不同的目录用于存储结果。
Hadoop文件系统命令参考:FileSystem Shell
下面给出几个常用命令
1 新建文件夹
hadoop dfs -mkdir [-p] <paths>
2 上传本地文件
hadoop fs -put localfile /hadoopdir
3 查看hadoop文件
hadoop fs -ls /hadoopfile
hadoop fs -ls -e /hadoopdir
4 修改文件夹权限
hadoop fs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
5 删除文件夹
hadoop fs -rm -r /hadoopdir