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用户的操作

  1. 关闭防火墙
$sudo  systemctl  stop   firewalld.service
$sudo  systemctl  disable  firewalld.service 
$sudo  mkdir   /opt/softwares
$sudo  mkdir   /opt/modules
  1. 往资源目录(/opt/softwares)上传需要的软件(jdk,hadoop等)
    如果没有文件夹,可以先mkdir新建文件夹
$cd   /opt/softwares
$sudo  rz

如果提示没有rz命令,需要安装rz的软件

$ sudo  yum  install lrzsz

该命令需要Centos7中有网络

  1. 卸载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

  1. 关掉虚拟机,以该虚拟机克隆出(完整克隆)另外两台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用户)

  1. 解压hadoop文件,如果前面没有上传就参照第7点步骤上传文件
$sudo  tar -zxvf   /opt/softwares/hadoop-2.7.1.tar.gz  -C  /opt/modules/

注意:如果你的hadoop版不一致,上条命令的文件名改成你自己的文件名即可。

  1. 修改环境变量(增加hadoop-home变量),并让环境变量生效。
$sudo vim /etc/profile

$source  /etc/profile
  1. 将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的版本路径和你的是否一致,不一致就改成你们自己的版本。

  1. 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.dirdfs.datanode.data.dir 的value中显示的地址,进入该地址发现有data和name文件夹,寻 VERSION 这个文件,将其中 clusterID 都改为 name的clusterID

注意:三台虚拟机都是需要改clusterID,但因为test2、test3虚拟机 jps 中没有namenode,于是在修改文件时,是没有name文件夹的,只需要更改data文件夹下 VERSION 内容的 clusterID 为 test1虚拟机的clusterID

以上是关于Centos7普通用户安装Hadoop的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop-3.1.3高可用集群部署

centos 6.5怎么搭建hadoop2.7.3

CentOS7下Hadoop Single Node Cluster的安装

centos7 分布式集群hadoop与hive安装

Centos7完全分布式搭建Hadoop2.7.3

Centos7完全分布式搭建Hadoop2.7.3