Centos7普通用户安装Hadoop
Posted 介北烟花
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Centos7普通用户安装Hadoop相关的知识,希望对你有一定的参考价值。
Centos7普通用户安装Hadoop
前置步骤
1.安装VMware虚拟机软件
官网地址:https://www.vmware.com/cn/products/workstation-pro/workstation-pro-evaluation.html
2.准备一台安装有Centos7的虚拟机
官网地址 https://www.centos.org/
如果官网的下载地址速度有点慢,可以试试国内的镜像。
以下是国内用的挺多的镜像地址:
http://mirrors.aliyun.com/centos/
http://mirrors.huaweicloud.com/centos/
https://mirrors.tuna.tsinghua.edu.cn/centos/
3.启动Centos7,并以root用户登录系统
如果下了基础的iso文件镜像,需要在网络配置完成后自行下载缺失的命令程序
root用户下需要进行的操作
#代表在超级用户root下操作,$代表在普通用户下操作
1、建立新的hadoop用户 :
#useradd hadoop
修改hadoop用户的密码:
#passwd hadoop
2、修改sudoers文件,使普通用户也拥有近似于root用户的权限:
#vim /etc/sudoers
在大约100行左右的地方添加如图的一行(101的行)
3、配置静态IP、更改机器名、更改IP和机器映射关系
先在虚拟机软件下的“编辑”菜单下选择“虚拟网络配置器”,查看VMnet8网段的子网IP
可以看到我的子网IP地址是192.168.94.0,也可以修改该子网IP地址
我这边便不进行修改了,因为每台虚拟机的IP地址是唯一的,所以要分配下每台虚拟机的IP地址(初学 先只配置3台)
192.168.94.210 test1
192.168.94.211 test2
192.168.94.212 test3
配置静态IP(三台虚拟机都需要修改)
#vim /etc/sysconfig/network-scripts/ifcfg-ens33
修改红色框内的内容
更改主机名
#vim /etc/hostname
修改hosts文件
#vim /etc/hosts
前面两行不要删除,添加新的内容进去
4.修改完成后,重启虚拟机
#reboot
特别说明:重启以后,用SecureCRT连接虚拟机,并且以hadoop用户登录,完成以下操作。$代表hadoop普通用户。
SecureCRT登录的时候就一定要输入hadoop用户名,并保存用户名和相应的密码。
hadoop用户的操作
- 关闭防火墙
$sudo systemctl stop firewalld.service
$sudo systemctl disable firewalld.service
$sudo mkdir /opt/softwares
$sudo mkdir /opt/modules
- 往资源目录(/opt/softwares)上传需要的软件(jdk,hadoop等)
如果没有文件夹,可以先mkdir新建文件夹
$cd /opt/softwares
$sudo rz
如果提示没有rz命令,需要安装rz的软件
$ sudo yum install lrzsz
该命令需要Centos7中有网络
-
卸载OpenJDK、安装新版JDK、配置JDK
卸载openjdk
$sudo rpm -e --nodeps java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64
$sudo rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.191-2.6.15.5.el7.x86_64
$sudo rpm -e --nodeps java-1.8.0-openjdk-1.8.0.181-7.b13.el7.x86_64
$sudo rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.181-7.b13.el7.x86_64
centos内的openJDK不一定是这个,需要以下命令查看Java版本,通过这个卸载openjdk版本
$rpm -qa | grep java
$rpm -e --nodeps 需要删除的OpenJDK名称
解压Java,安装java(下载了哪个版本就修改为那个版本)
$sudo tar -zxvf /opt/softwares/jdk-8u25-linux-x64.tar.gz -C /opt/modules/
配置profile文件
$sudo vim /etc/profile
刷新profile文件(如果profile文件出错,导致你的所有命令会不可使用,需要小心)
$source /etc/profile
可以用这个命令查看JDK是否安装好。
$java -version
- 关掉虚拟机,以该虚拟机克隆出(完整克隆)另外两台test1、test2,并且修改相应的机器名和I
修机器名、IP参照上面的第5点。
机器名文件:sudo vim /etc/hostname
IP文件:sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
配置三台机器之间的免密登录(hadoop用户)
注意:在test1上的hadoop用户下操作:
$ssh test1
$ssh-keygen -t rsa (连续三次回车)
$ssh-copy-id test2 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test3 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test1 (如果需要输入密码就输入hadoop用户的密码)
以上命令做好后。lyy1就可以免密登录lyy2,lyy3了,同理配置lyy2,lyy3。
注意:在test2上的hadoop用户下操作:
$ssh test2
$ssh-keygen -t rsa (连续三次回车)
$ssh-copy-id test1 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test3 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test2 (如果需要输入密码就输入hadoop用户的密码)
注意:在test3上的hadoop用户下操作:
$ssh test3
$ssh-keygen -t rsa (连续三次回车)
$ssh-copy-id test1 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test2 (如果需要输入密码就输入hadoop用户的密码)
$ssh-copy-id test3 (如果需要输入密码就输入hadoop用户的密码)
Hadoop配置(test1的hadoop用户)
- 解压hadoop文件,如果前面没有上传就参照第7点步骤上传文件
$sudo tar -zxvf /opt/softwares/hadoop-2.7.1.tar.gz -C /opt/modules/
注意:如果你的hadoop版不一致,上条命令的文件名改成你自己的文件名即可。
- 修改环境变量(增加hadoop-home变量),并让环境变量生效。
$sudo vim /etc/profile
$source /etc/profile
- 将hadoop-env.sh mapred-env.sh yarn-env.sh 加入JAVA_HOME变量
$sudo echo "JAVA_HOME=/opt/modules/jdk1.8.0_25" >> /opt/modules/hadoop-2.7.1/etc/hadoop/hadoop-env.sh
$sudo echo "JAVA_HOME=/opt/modules/jdk1.8.0_25" >> /opt/modules/hadoop-2.7.1/etc/hadoop/mapred-env.sh
$sudo echo "JAVA_HOME=/opt/modules/jdk1.8.0_25" >> /opt/modules/hadoop-2.7.1/etc/hadoop/yarn-env.sh
注意:大家一定注意JDK和hadoop的版本路径和你的是否一致,不一致就改成你们自己的版本。
- hadoop关联的配置文件修改
①core-site.xml文件修改
$cd /opt/modules/hadoop-2.7.1/etc/hadoop
$sudo vim core-site.xml (在该文件内添加以下内容,自己的主机名)
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://test1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp</value>
</property>
</configuration>
②hdfs-site.xml文件修改
$cd /opt/modules/hadoop-2.7.1/etc/hadoop
$sudo vim hdfs-site.xml (在该文件内添加以下内容)
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/modules/hadoop-2.7.1/tmp/dfs/data</value>
</property>
</configuration>
③mapred-site.xml文件修改
$cd /opt/modules/hadoop-2.7.1/etc/hadoop
$sudo mv mapred-site.xml.template mapred-site.xml
$sudo vim mapred-site.xml (在该文件内添加以下内容)
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
④yarn-site.xml文件修改
$cd /opt/modules/hadoop-2.7.1/etc/hadoop
$sudo vim yarn-site.xml (在该文件内添加以下内容,自己的主机名)
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>test1</value>
</property>
</configuration>
⑤slaves文件修改
$cd /opt/modules/hadoop-2.7.1/etc/hadoop
$sudo vim slaves (在该文件内添加以下内容,改为自己的主机名)
test1
test2
test3
将test1上的hadoop文件夹拷贝到另外test2、test3上
$sudo scp -r /opt/modules/hadoop-2.7.1/ hadoop@test2:/opt/modules/
$sudo scp -r /opt/modules/hadoop-2.7.1/ hadoop@test3:/opt/modules/
将test1上的profile文件拷贝到另外test2、test3上,并到相应的机器上执行source
在test1上执行下面两行语句:
$sudo scp /etc/profile root@test2:/etc
$sudo scp /etc/profile root@test3:/etc
在test2、test3上刷新profile文件:
$source /etc/profile
初始化Hadoop
注意:为了确保格式化成功,在运行下面命令以前,可以在三台机器上分别先运行以下命令修改归属:
$sudo chown -R hadoop:hadoop /opt/modules
12.在test1上格式化集群,如果看见如下图“successfully formatted”样,即表示集群安装成功
$hadoop namenode -format
启动集群后,在test1、test2、test3上分别输入jps应该有如下图所示进程。
$start-all.sh
test1
test2、test3
宿主机上以Web方式查看集群(需要在自己本地电脑hosts文件增加IP和名字映射)
http://test1:50070 或 http://192.168.94.210:50070
http://test1:8088 或 http:/192.168.94.210:8088
常见问题
1. SecondaryNameNode需要在主机(test2)上
在hdfs-site文件添加指定主机
<configuration>
<!--secondary namenode所在主机的IP和端口-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>test02:50090</value>
</property>
</configuration>
2. hadoop初始化失败
争对这个问题,需要在刚刚运行的代码中寻找错误信息,一般都是Hadoop文件的配置失败,或者是Java的变量未安置在Hadoop文件中,亦或者是profile文件中的Hadoop环境变量未成功。
3. Hadoop初始化时,或者Hadoop初始化后启动时发现权限不够
则需要删掉三台虚拟机的Hadoop文件,从解压Hadoop文件的步骤开始做。
因为无法改变超级用户root的权限,就在Hadoop文件解压时和发送时解除root的管理,使其可以为普通用户使用。
解压时,使用以下命令
$tar -zxvf /opt/softwares/hadoop-2.7.1.tar.gz -C /opt/modules/
将test1上的hadoop文件夹拷贝到另外test2、test3上,使用以下命令
$scp -r /opt/modules/hadoop-2.7.1/ hadoop@test2:/opt/modules/
$scp -r /opt/modules/hadoop-2.7.1/ hadoop@test3:/opt/modules/
那么在初始化Hadoop时,就不需要修改归属(chown)
4. 在查看网页端yarn时,发现节点不健康
该问题容易导致在以后的文件操作中发生错误,尽量保证节点的正常。
解决办法一:
在配置文件时,节点的地址未识别到,导致节点的不正常
core-site.xml文件修改hadoop的tmp数据地址
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://test1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/modules/hadoop-2.7.1/tmp</value>
</property>
</configuration>
hdfs-site.xml文件修改name和data节点的地址位置
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/modules/hadoop-2.7.1/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/modules/hadoop-2.7.1/tmp/dfs/data</value>
</property>
</configuration>
解决办法二:
之所以会有 local-dirs are bad,log-dirs are bad 报错,是因为在我们集群的 yarn-site.xml 里参数 yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage 的默认值是 90%,到达到这个值会触发上述报错。
1.数据过多,删除部分没用的数据
2.在yarn-site.xml文件添加代码,扩大阈值,数值只要大于90,不健康状态解除就行
<property>
<name>yarn.nodemanager.disk-health-checker.max-disk-utilization-per-disk-percentage</name>
<value>98.5</value>
</property>
5. 启动Hadoop,却发现丢失datanode或者namenode
初始化Hadoop只执行了一次
一般都是Hadoop配置文件hdfs-site.xml出现了问题,导致地址不正确,使其无法启动。
初始化Hadoop执行了多次
可能是datanode和namenode 的ID不匹配,导致其无法启动。
查看(cat)hdfs-site.xml,找到 dfs.namenode.name.dir 和 dfs.datanode.data.dir 的value中显示的地址,进入该地址发现有data和name文件夹,寻 VERSION 这个文件,将其中 clusterID 都改为 name的clusterID
注意:三台虚拟机都是需要改clusterID,但因为test2、test3虚拟机 jps 中没有namenode,于是在修改文件时,是没有name文件夹的,只需要更改data文件夹下 VERSION 内容的 clusterID 为 test1虚拟机的clusterID
以上是关于Centos7普通用户安装Hadoop的主要内容,如果未能解决你的问题,请参考以下文章