目录
(1)无法创建新虚拟机: 无法打开配置文件“C:\xxx.vmx”:拒绝访问
2、启动后jps没有Datenode(主节点和从节点都出现过)
本文是我在VMware虚拟机Centos7中搭建Hadoop完全分布式集群时所遇到的一些问题,通过在网上查阅资料都已解决,这些问题可能会比较常见,所以发出来供大家参考。
(1)无法创建新虚拟机: 无法打开配置文件“C:\xxx.vmx”:拒绝访问
问题原因:这是因为创建虚拟机需要计算机管理员权限,需要使用管理员运行该程序。
解决方法:退出当前VMware,然后右键桌面VMware的快捷方式以管理员身份运行重新进行创建。
(2)有关Hadoop集群的一些问题合集
在配置完Hadoop集群后,执行命令start-all.sh启动集群,并可以通过jps来查看节点运行情况,但是由于各种各样的原因(包括但不限于配置文件出错、频繁格式化namenode),可能会导致在不同节点执行jps时会没有相应的进程,并且情况可能各不相同,以下是对我搭建集群时出现的问题做出陈述,并且给出我的解决方法。
我的节点分配为master:Datanode、Namenode、NodeManager、Resourcemanager、NodeManager
node1和node2:Datanode、NodeManager
1、主节点master进程正常,从节点中只有jps
问题原因:Hadoop2需要在etc/hadoop目录下的slave文件中写入主节点与从节点名称,刚开始我就是在slave中写入的名称,而我的Hadoop版本为3,对应的配置文件为workers,所以会出错。
解决方法:因此Hadoop3需要在hadoop-3.1.3/etc/hadoop/workers中写入主从节点名称而非slave。
2、启动后jps没有Datenode(主节点和从节点都出现过)
问题原因:这大多数情况是因为多次输入hadoop namenode -format格式化节点的缘故,这导致了的datanode的clusterID和 namenode的clusterID不匹配,从而在启动后没有datanode进程。
想要解决这个问题,首先需要打开配置文件core-site.xml,查看初始化节点产生的相关文件存在的路径,如下图所示,我的Hadoop集群产生日志文件等都保存在/usr/local/soft/hadoop-3.1.3/tmp下,因此需要进入该目录下解决问题,下面介绍这个问题的两个解决方法。
解决方法一(简单粗暴):重新格式化,首先执行stop-all.sh关闭集群,然后在xftp7找到master主节点集群中的tmp目录,将里面的文件全部删除(主节点执行即可!!在终端用命令删除也可以,在hadoop目录下执行命令rm -rf /tmp/)。
然后还需要删除hadoop安装目录的logs文件夹(与tmp同级),将logs下边的所有文件全部删除即可(这一步需要三个节点都执行!!)。
删除完毕后格式化hadoop:hadoop namenode -format,等待过后启动Hadoop集群:start-all.sh,执行jps查看进程,可以看到问题解决。但是因为要重新格式化,所以只适用于Hadoop中没有文件或无重要文件的情况。
解决方法二:保留现有数据,首先执行stop-all.sh关闭集群,然后用NameNode节点的~/dfs/name/current/VERSION中的namenode的clusterID替换所有datanode节点机器中~/dfs/data/current/VERSION中的clusterID(注意,两者的路径不一致)。如下面图所示,
修改完毕后重新启动hadoop:start-all.sh。这种方式不影响现有的数据,避免了重新的格式化。
3、启动集群后主节点jps没有NodeManager
问题原因:nodemanager要求的内存最低1024MB以及运行时cpu数量,如果在配置文件中没有相应的设置,就有可能出现启动失败的结果。
解决方法:进入目录cd /usr/local/soft/hadoop-3.1.3/etc/hadoop/,并进入文件yarn-site.xml,增加以下一段代码:
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.nodemanager.resource.cpu-vcores</name>
<value>1</value>
</property>
保存配置文件后重启集群 stop-all.sh,start-all.sh即可。
4、Hadoop集群输入jsp出现process information unavailable
问题原因:process information unavailable,是因为进程没有被正常结束,比如资源占用过大时挂掉或者没有结束进程就重启服务器,导致原进程变为-- process information unavailable空值
解决方法:首先输入jsp查看,得出进程号为2394,然后ps查看该进程是否存在:
ps -ef|grep 2394
发现存在,随后进入hsperfdata_{当前用户}目录下,ls查看若有2394,则删除对应进程号的文件,执行如下命令即可,随后再jps就无问题了。
rm -rf 2394
5、Hadoop集群启动错误
问题原因:用户权限不够因此启动失败。
解决方法:通过修改系统的环境变量,来增加root用户权限。首先进入配置文件,添加如下内容:
sudo vim /etc/profile.d/my_env.sh
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_JOURNALNODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
然后将文件分发到各个从节点即可。
scr -r my_env.sh node1:/etc/profile.d/my_env.sh
scr -r my_env.sh node2:/etc/profile.d/my_env.sh
(3)Hive3 报错
java.lang.NoSuchMethodError:com.google.common.base.Preconditions.checkArgumen...
问题原因:hadoop和hive的两个guava.jar版本不一致导致问题,程序执行时不知选择哪个,所以就抛出异常。两个jar位置分别位于下面两个目录:
Hive:/usr/local/soft/hive/lib/guava-19.0.jar
Hadoop:/usr/local/soft/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar
解决方法:保留高版本的jar包,故删除hive中的guava然后把hadoop中的文件复制即可。执行命令:
rm -rf /usr/local/soft/hive/lib/guava-19.0.jar
cp/usr/local/soft/hadoop-3.1.3/share/hadoop/common/lib/guava-27.0-jre.jar /usr/local/soft/hive/lib/
(4)hive 插入数据,insert后报错 FAILED
FAILED: Execution Error,
return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
错误提示:
Starting Job = job_1594085668614_0006, Tracking URL = http://kudu:8088/proxy/application_1594085668614_0006/
Kill Command = /root/soft/hadoop-3.2.1/bin/mapred job -kill job_1594085668614_0006
Hadoop job information for Stage-1: number of mappers: 0; number of reducers: 0
2020-07-07 09:43:24,559 Stage-1 map = 0%, reduce = 0%
Ended Job = job_1594085668614_0006 with errors
Error during job, obtaining debugging information...
FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
MapReduce Jobs Launched:
Stage-Stage-1: HDFS Read: 0 HDFS Write: 0 FAIL
Total MapReduce CPU Time Spent: 0 msec
错误原因:namenode内存空间不够,JVM剩余内存空间不够新job运行所致。
解决办法:在hive> 下,输入set hive.exec.mode.local.auto=true;即可。以此启用Hive执行引擎的本地模式自动切换功能,这个设置允许Hive在本地模式和远程模式之间自动切换,根据查询的性质来选择执行引擎。