Hadoop分布式集群搭建

Hadoop分布式集群搭建

环境说明:

Hadoop分布式集群架构是主从架构,这里要搭建一个3台服务器的集群

三台centos7主机,其中一个主节点master,两个从节点服务器slave

用户名都为root,主机名分别为master,slave1,slave2

步骤如下:

1.安装CentOS7

    • 创建虚拟机

单击左上角文件→新建虚拟机,创建虚拟机

    • 选择指定的Centos7系统镜像文件

    • 填写虚拟机信息

    • 默认一直下一步即可,之后点击完成系统会自动重启,等待安装

    • 安装完成,进行登入

出现此界面,说明安装成功

2.配置master主机

更改主机名为master

date命令查看时间,发现时间不同步

同步时间

方法1:进入root用户,执行以下命令

配置防火墙设置

查看防火墙状态:

systemctl status firewalld.service

关闭防火墙

systemctl stop firewalld.service

开机禁用防火墙

systemctl disable firewalld.service

配置selinux设置

查看selinux状态

getenforce

临时关闭selinux

setlinux 0

永久关闭

vim /etc/sysconfig/selinux

更改内容为SELINUX=disable

3.配置salve主机

将刚配置好的master节点通过VMware克隆两台主机

.

4. master网络配置

先查看本机的网关地址,这里网关为192.168.111.2

配置网络ip(三台主机要配置不同的ip)

vim /etc/sysconfig/network-scripts/ifcfg-ens33

使用 service network restart 命令重启网络

service network restart

设置完master主机的网络之后,随即配置两台slave的网络

这里我将ip网络配置为

master 192.168.111.100

slave1 192.168.111.101

slave2 192.168.111.102

根据自己的网络IP进行配置

.

5.slave1网络配置

同master方法一致

6.slave2网络配置

7.配置hosts

三台机器都要进行配置IP地址和主机的映射关系

vim /etc/hosts

将IP地址和主机名相映射,目的是为了方便三台主机相互通信

能够相互ping通即可

8.配置三台主机的免密登录

可以看出每次要与slave建立连接每次都需要输入密码,则需要配置ssh免密登录操作

依次执行以下命令

ssh-keygen -t rsa                 #然后按四下回车

cd .ssh                  #进入ssh目录

cat id_rsa.pub >> authorized_keys           #将master密钥追加authorized_keys文件中

将master的authorized_keys复制到slave1中,以下命令完成

scp authorized_keys root@slave1:/root/.ssh/ authorized_keys

scp authorized_keys root@slave2:/root/.ssh/ authorized_keys

配置好效果如下

9.安装Java环境和Hadoop前提准备

进入jdk和hadoop官网,在分别下载好Linux版的压缩包

yum -y install lrzsz     #安装lrzsz,用于文件的上传下载

通过xshell远程连接,输入rz -E命令将本地下载好的jdk和hadoop文件压缩包上传至服务器master

rz -E

查看文件是否上传成功

10.安装并配置Java环境

(三台机器都需要)

删除原有的jdk

查询系统是否已安装java

rpm -qa | grep java

如果存在,删除卸载

yum remove jdk名称

验证是否还存在jdk

java -version

出现以下情况说明卸载完成

使用tar解压命令对jdk进行解压

tar -zxvf jdk-8u162-linux-x64.tar.gz -C /usr/local/

Java环境变量的配置

进入root家目录,编辑.bashrc配置文件

命令:vim ~/.bashrc

vim ~/.bashrc

配置完之后,ESC+:wq保存退出

使用source ~/.bashrc命令使配置好的环境变量立即生效

source ~/.bashrc

依次使用java,javac,java -version命令检查是否安装成功

将配置好的java拷贝到两台slave上

使用scp命令

scp -r /usr/local/java/ root@slave1:/usr/local

scp -r /usr/local/java/ root@slave2:/usr/local

分别在slave1和slave2检验java环境是否配置好

11.安装并配置Hadoop

将下载好的hadoop压缩文件进行解压

我们的hadoop压缩文件放在Downlodas

解压

tar -zxvf Downloads/hadoop-3.1.3.tar.gz -C /usr/local

同java配置环境一样,对hadoop进行配置

vim ~/.bashrc

配置完成进行source命令使其生效

source ~/.bashrc

之后使用hadoop version查看是否安装成功

hadoop version

修改文件workers

将之前的内容localhost改成slave1和slave2

修改文件core-site.xml

请把core-site.xml文件修改为如下内容:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

修改文件hdfs-site.xml

对于Hadoop的分布式文件系统HDFS而言,一般都是采用冗余存储,冗余因子通常为3,也就是说,一份数据保存三份副本。但是,这里只有两个Slave节点作为数据节点,即集群中只有两个数据节点,数据保存两份,所以 ,dfs.replication的值还是设置为 2。hdfs-site.xml具体内容如下:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

修改文件mapred-site.xml

“/usr/local/hadoop/etc/hadoop”目录下有一个mapred-site.xml.template,需要修改文件名称,把它重命名为mapred-site.xml,然后,把mapred-site.xml文件配置成如下内容:

<configuration>
        <property>
                <name>mapreduce.framework.name</name>
                <value>yarn</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.address</name>
                <value>master:10020</value>
        </property>
        <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
        </property>
        <property>
                <name>yarn.app.mapreduce.am.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.map.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property>
        <property>
                <name>mapreduce.reduce.env</name>
                <value>HADOOP_MAPRED_HOME=/usr/local/hadoop</value>
        </property> 
</configuration>

修改文件 yarn-site.xml

请把yarn-site.xml文件配置成如下内容:

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>
 

将Hadoop分发至各个节点

上述5个文件全部配置完成以后,需要把master节点上的“/usr/local/hadoop”文件夹复制到各个节点上。如果之前已经运行过伪分布式模式,建议在切换到集群模式之前首先删除之前在伪分布式模式下生成的临时文件。具体来说,需要首先在master节点上执行如下命令:

cd /usr/local

sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件

sudo rm -r ./hadoop/logs/*   # 删除日志文件

tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制

cd ~

scp ./hadoop.master.tar.gz slave1:/root/hadoop

scp ./hadoop.master.tar.gz slave1:/root/Hadoop

在两台slave中解压hadoop至/usr/local下

tar -zxvf hadoop -C /usr/local

再将master上配置好的.bashrc文件一并分发给slave上,并分在slave1和slave2使用source命令使其生效

之后分别在slave1和slave2依次执行java -version和hadoop version命令,检验是否安装并配置成功.

准备启动Hadoop

第一次完成安装配置需要在master使用hdfs namenode -format命令进行格式化,之后启动hadoop不需要再进行格式化操作

依次使用以下命令启动Hadoop服务

start-dfs.sh

start-yarn.sh

mr-jobhistory-daemon.sh start historyserver

启动完成使用jps查看进程,分别在三台服务器jps查看进程

通过命令jps可以查看各个节点所启动的进程。如果已经正确启动,则在master节点上可以看到NameNode、ResourceManager、SecondrryNameNode和JobHistoryServer进程,如下图所示。在slave节点可以看到DataNode和NodeManager进程,如下图所示。

缺少任一进程都表示出错。另外还需要在master节点上通过命令“hdfs dfsadmin -report”查看数据节点是否正常启动,如果屏幕信息中的“Live datanodes”不为 0 ,则说明集群启动成功。由于本教程只有1个Slave节点充当数据节点,因此,数据节点启动成功以后,会显示如下图所示信息。

hdfs dfsadmin -report

也可以在Linux系统的浏览器中输入地址“http://master:9870/”,通过 Web 页面看到查看名称节点和数据节点的状态。

出现的问题

配置好静态ip重启网络出现

Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.

解决方案

systemctl stop NetworkManager

systemctl disable NetworkManager

然后再重启命令就可以了

出现右上角没有网络图标

解决:

依次执行以下命令

mv /var/lib/NetworkManager /var/lib/NetworkManager.bak

systemctl stop NetworkManager

systemctl start NetworkManager

启动Hadoop出错

[root@master ~]# start-dfs.sh

Starting namenodes on [master]

ERROR: Attempting to operate on hdfs namenode as root

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Starting datanodes

ERROR: Attempting to operate on hdfs datanode as root

ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.

Starting secondary namenodes [master]

ERROR: Attempting to operate on hdfs secondarynamenode as root

ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

解决方法:

在Hadoop安装目录下找到sbin文件夹

在里面修改四个文件

对于start-dfs.sh和stop-dfs.sh文件,添加下列参数: 

vim start-dfs.sh

vim stop-dfs.sh

添加下列参数: 

#!/usr/bin/env bash

    HDFS_DATANODE_USER=root

    HADOOP_SECURE_DN_USER=hdfs

    HDFS_NAMENODE_USER=root

    HDFS_SECONDARYNAMENODE_USER=root

对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

vim start-yarn.sh

vim stop-yarn.sh

添加下列参数:
   

 #!/usr/bin/env bash

    YARN_RESOURCEMANAGER_USER=root

    HADOOP_SECURE_DN_USER=yarn

    YARN_NODEMANAGER_USER=root

修改完成后复制到slave上

再重新启动Hadoop

在 master主机上远程拷贝 /etc/hosts 文件到 slave1 主机上,出现下面的错误提示:

Permission denied, please try again.

解决方法

sudo gedit /etc/ssh/sshd_config

注释掉 PermitRootLogin without-password,添加 PermitRootLogin yes: 

# PermitRootLogin without-password

PermitRootLogin yes 

保存,退出

 重启 ssh 服务   

sudo service ssh restart 

出现权限问题

visudo:编辑sudo命令的配置
        编辑第98行
        ## Allow root to run any commands anywhere
            root    ALL=(ALL)                               ALL
            用户名  登录的主机=(以什么样的身份运行)  可以执行什么命令
        如果想让ghh用户也居于root相关权限。。
            ghh  ALL=(root)  NOPASSWD:service iptables status
            ghh ALL=(root)  NOPASSWD:service iptables start
        推荐用法    
            ghh  ALL=(root)  NOPASSWD:ALL
 

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bug智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值