本文不是安装教程,网上有很多大佬们的详细讲解,当做储存,记录几个不错的链接:
centos7安装hadoop2.7
(作者下方还有其他版本安装教程链接)
来源:Linux社区 作者:LinuxWindows环境下采用eclipse链接虚拟机中的伪分布式集群
来源:CSDN 作者:mod-honestintall hadoop-2.6.x on win10
上面安装教程很详细,小白博主安装了数个小时,耗时几天,遇到诸多千奇百怪的错误,这里就着重记录博主遇到的奇葩错误了。
首先要在Linux下下载并安装JDK,博主选择了在windows官网上下载jdk-8u144-linux-x64.tar,所以又下载了winscp(进行win和Linux连接和传输文件),以下是错误及解决方案:
问题一:
分析原因:没有打开虚拟机,主机名输入有误
说明:主机名是虚拟机中Linux系统的IP地址(博主的是centos7)
查看本机IP方法:在终端以root用户登录,输入命令:ifconfig,即可。
得知:192.168.80.129
[root@localhost ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.80.129 netmask 255.255.255.0 broadcast 192.168.80.255
inet6 fe80::e405:6a1f:6f6:c5a0 prefixlen 64 scopeid 0x20
问题二:将JDK压缩包从windows复制到Linux中的安装目录/usr/lib/jvm下,(说明:这个错误博主在安装hadoop时也出现了,解决方案同。)出现:
分析原因:“无权访问”!!!所以可能是操作目录权限不够
解决方法:在Linux终端root用户下,修改操作目录的权限,
输入命令:chmod 777 /usr/lib/jvm或者/opt(目录路径)
问题三:解压JDK压缩包后找不到解压后的文件
分析原因:输入的命令不是解压到指定目录
解决方案:
方法1:先输入命令:cd /usr/lib/jvm ,进入想要解压的目录,
再输入命令:tar -zxvf jdk-8u144-linux-x64.tar.gz,进行解压。
方法2:命令格式:tar -zxvf 【压缩包文件名.tar.gz】 -C 【路径】/
注释:解压.tar.gz格式到指定的目录下
例如:tar -zxvf jdk-8u144-linux-x64.tar.gz -C /usr/lib/jvm/
问题四:启动hadoop,需要Linux连接网络,可是我的centos7,没有连接
解决方案:在Linux中修改命令使centos7自动连接网络,具体方法如下:
以root用户登录,输入命令: cd /etc/sysconfig/network-scripts/ ,回车,进入网络配置文件所在的文件夹。
输入ls,查看当前目录下的文件,可以找到自己的网络名称(形如ifcfg-…)例如我的网络名称是:ifcfg-ens33。
然后输入命令:vi ifcfg-ens33,按i进入编辑模式,找到ONBOOT=no 这一行,将后面的 no 改为 yes。
然后按键esc,输入:wq保存退出即可。
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=b66dbb1c-0a53-42a0-89a2-915935d5deea
DEVICE=ens33
ONBOOT=yes
----------
问题五:启动hadoop,输入sbin/start-all.sh,显示:没有此目录
分析原因:启动hadoop需要在hadoop解压的目录下操作,博主错在一直在hadoop目录下输入了数次启动命令,导致一直显示没有那个目录或文件
解决方法:博主下的是hadoop-2.6.0,所以需要进入该文件再执行该命令,
输入进入目录命令:cd /opt/hadoop-2.6.0 即可。
问题六:成功启动hadoop后,输入jps,正常的话会显示如下六行
4722 NameNode
5208 NodeManager
4980 SecondaryNameNode
9553 Jps
3062 ResourceManager
4837 DataNode
博主显示:找不到该命令……
内心戏:老孙我排除外难取到西经,奈何佛祖掐指一算,少一难???
于是博主查阅资料,问同学,耗了数个小时,结果大家都没遇到该奇葩问题……
分析原因:无从下手哇,于是博主开始排查:配置的JDK环境变量,指定的JDK安装位置,Hadoop核心配置文件(3个),是否都编辑正确。
解决方案:博主哭着修改了JDK的环境变量,因为centos7,vi编辑时显示略微怪异,一时不查,看错了位置,多写了=和/。
反思:血与泪的教训,告诉我们:小心使得少一难~,如果真的错了,就一点一点耐心、细心地排查,同时也需要点信心!
问题七:输入jps,显示没有namenode或者没有DataNode,六项变五项,(一度怀疑自己不会数数)
分析原因:可能是格式化了两次及以上造成的,可通过查找日志发现问题,
输入命令:/var/log/hadoop-hdfs/hadoop-hdfs-datanode-hbase.log
发现namenode clusterID和datanode clusterID的值不一样,因为每一次对namenode的格式化,系统都会分配一个new id给它,因此造成ID不匹配
解决方案:
方法1、找到Hadoop-tmp 文件夹(core-site-xml设置的文件夹),使用vi编辑器将/hadoop-tmp/dfs/data/current/VERSION文件中的clusterID
改为/hadoop-tmp/dfs/name/current/VERSION文件中的clusterID
方法2、(简单粗暴)直接vi编辑core-site-xml,修改你原本设置的那个不会被linux定期删除的文件夹(默认情况下namenode和datanode的文件都会存在这个目录下 ),然后重新格式化,启动。
方法3、删除name、data所在的目录,重新格式化,启动
问题八:
hadoop fs -ls / 没有内容
输入命令hadoop fs -mkdir /user ,提示
error:mkdir:Cannot create directory /user. Name node is in safe mode.
分析原因:
Name node is in safe mode
说明Hadoop的NameNode处在安全模式下。
那什么是Hadoop的安全模式呢?
在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
解决方案:
输入命令,强制离开安全模式
hadoop dfsadmin -safemode leave
博主悲催的输入:
[root@localhost ~]#hadoop dfsadmin -safemode leave
Safe mode is off
[root@localhost ~]#hadoop fs -mkdir /user
error:mkdir:Cannot create directory /user. Name node is in safe mode.
[root@localhost ~]#hadoop dfsadmin -safemode get
Safe mode is on
[root@localhost ~]#hadoop dfsadmin -safemode leave
Safe mode is off
[root@localhost ~]#hadoop dfsadmin -safemode get
Safe mode is on
然后博主机智的朋友挽救了流泪的博主……
[root@localhost hadoop-2.6.0]./sbin/stop-dfs.sh
[root@localhost hadoop-2.6.0]./sbin/start-dfs.sh
[root@localhost ~]#hadoop fs -mkdir /user
Exciting!
说明:
用户可以通过dfsadmin -safemode value 来操作安全模式,参数value的说明如下:
enter - 进入安全模式
leave - 强制NameNode离开安全模式
get - 返回安全模式是否开启的信息
wait - 等待,一直到安全模式结束。
博主不会说,还有很多稀奇古怪的问题……有的忘了,想起来再补,过程很艰难,
朋友说:工欲善其事,必先利其器。所以痛并快乐着???
任重道远呢~