集群配置,hadoop部分完整配置过程,细节满满!

Posted 酥悲清风

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了集群配置,hadoop部分完整配置过程,细节满满!相关的知识,希望对你有一定的参考价值。

做一个hadoop的配置流程的全记录,把遇到的问题和细节全都记录了下来。

文章中安装包的导入位置opt/software

          安装包的安装位置/usr/local/src

1.安装前准备

首先在开始安装hadoop前,准备好需要的相关安装包和配置

安装vim编辑器:
yum install -y vim
安装rsync远程同步工具
yum install -y rsync

(1)jdk,hadoop安装包:

我这里使用jdk 1.8 版本,hadoop 3.3.4版本

这是jdk的下载地址

https://www.oracle.com/java/technologies/downloads/#java8

 选择符合你电脑的版本(正常使用Windows的选择最下方即可)

hadoop的下载地址

https://hadoop.apache.org/releases.html

 选择下载hadoop的版本,下载对应版本的binary安装包

(2)如果你的集群虚拟机已经都创建完成,且确保网络,ssh密钥登陆 都做好了后,就可以开始安装jdk和hadoop了

如果网络还没有完成,可以看我的另一篇文章,把网络配置文件确保配置完成。

(后续会写)

如果ssh密钥连接还没有做好,可以参考我的另一篇文章。这一步是集群配置的关键

(后续会写)

2.开始安装jdk,hadoop

导入安装包到opt/software中解压

tar -zxvf  opt/software/jdk-8u341-linux-x64.tar.gz -C /usr/local/src

tar -zxvf /opt/software/hadoop-3.3.4.tar.gz -C /usr/local/src/

解压安装包到/usr/local/src

进入安装目录,修改对应安装包文件名,改成jdk,hadoop

(注意如果不修改文件名注意配置环境变量文件中对应文件名也要更改) 

修改jdk,hadoop文件用户所属

修改jdk,hadooop所在目录的所属用户
chown -R hadoop:hadoop /usr/local/src

 (1)配置jdk 环境变量,添加对应环境变量

#JAVA_HOME
export JAVA_HOME=/usr/local/src/jdk1
export PATH=$PATH:$JAVA_HOME/bin
保存后退出
:wq

(2)配置hadoop环境变量,添加对应环境变量

#HADOOP_HOME
export HADOOP_HOME=/usr/local/src/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后退出
:wq

重启配置文件,使其生效

source /etc/profile

(3)测试安装是否成功

如果没有打错字符的话不应该出错

java -version  #测试jdk

hadoop version   #测试hadoop

 3.hadoop 集群配置文件

(1) hadoop的部署规划,我使用3台虚假机搭建集群,

NameNode和SecondaryNameNode不要安装在同一台服务器(因为都耗内存)

ResourceManager很消耗内存,不要和NameNode,SecondaryNameNode配置在同一台机器上。

masterslave1slave2

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode
YARN

NodeManager

ResourceManager

NodeManager

NodeManager

(2)配置文件,

/usr/local/src/hadoop/etc/hadoop 中的对应配置文件中加入下面的相关参数

core-site.xml

<!-- 指定NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://master:9000</value>
    </property>

    <!-- 指定hadoop数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/src/hadoop/data</value>
    </property>

    <!-- 配置HDFS网页登录使用的静态用户为hadoop -->
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>hadoop</value>
    </property>

hdfs-site.xml

    <!-- nn web端访问地址-->
    <property>
        <name>dfs.namenode.http-address</name>
        <value>master:9870</value>
    </property>
	<!-- 2nn web端访问地址-->
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>slave2:9868</value>
    </property>

yarn-site.xml

  <!-- 指定MR走shuffle -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!-- 指定ResourceManager的地址-->
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>slave1</value>
    </property>

    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>

mapred-site.xml

	<!-- 指定MapReduce程序运行在Yarn上 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

(3)配置workers文件 (也在/usr/local/src/hadoop/etc/hadoop

(如果没有创建即可)

(注意不要有空行,最后一行不要留有空格)

4.创建xsync集群群发脚本

(1)选择你hadoop的安装虚拟机

在根目录中创建xsync脚本文件

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
    echo Not Enough Arguement!
    exit;
fi
#2. 遍历集群所有机器
for host in master slave1 slave2
do
    echo ====================  $host  ====================
    #3. 遍历所有目录,挨个发送
    for file in $@
    do
        #4. 判断文件是否存在
        if [ -e $file ]
            then
                #5. 获取父目录
                pdir=$(cd -P $(dirname $file); pwd)

                #6. 获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
            else
                echo $file does not exists!
        fi
    done
done

(2)修改xsync脚本权限

#我这图省事直接赋予了777权限
chmod 777 xsync

5.同步jdk,hadoop到集群

xsync /etc/profile  #同步环境变量
xsync /usr/local/src  #同步jdk,hadoop

6.启动hadoop,测试集群

因为我们把namenodeResourceManager放在了不同的虚拟机上

所以start-all.sh启动hadoop集群时,会发现slave1上的ResourceManager无法启动

#在master虚拟机上启动namenode
start-dfs.sh
#在slave1虚拟机上启动ResourceManager
start-yarn.sh

或者 

#在master启动所有
start-all.sh
#在slave1上重新启动yarn配置文件
start-yarn.sh

制作不易,您的支持是我最大的动力。

 

Hadoop完全分布式安装配置完整过程

一. 硬件、软件准备

1. 硬件设备

为了方便学习Hadoop,我采用了云服务器来配置Hadoop集群。集群使用三个节点,一个阿里云节点、一个腾讯云节点、一个华为云节点,其中阿里云和腾讯云都是通过使用学生优惠渠道购买了一年的云服务,华为云使用免费7天或15天的云服务器。我决定使用腾讯云节点作为Master节点,阿里云节点和华为云节点作为Slave节点。集群基本结构如下图:

image

云服务器配置信息如下:

 

image

 

       集群网络环境:

image

      分别在每台机器上创建了用户hadoop,并且全部禁用了防火墙。

     2. 软件

     由于Hadoop需要JVM环境,所以需要下载JDK。需要的软件清单如下图所示。

image

二、环境搭建

1. JAVA安装

  • 解压

    我们下载软件jdk-8u61-linux-x64.tar.gz放在了 /home/install-package 下。先在 /home 下创建了java目录,并将jdk压缩文件解压到该目录下,命令如下。

[root@libaoshen_tencent java]# tar -zxvf /home/install-package/jdk-8u161-linux-x64.tar.gz -C java
  • 建立软连接

    和window上的快捷方式一样,我们为jdk安装的长路径建立一个短路径,方便我们后面设置环境变量。

[root@libaoshen_tencent java]# ln -s /home/java/jdk1.8.0_161/ /home/jdk
  • 配置环境变量

在 /etc/profile 中添加环境变量。

[root@libaoshen_tencent home]
# vim /etc/profile

添加内容:

JAVA_HOME=/home/jdk
CLASSPATH=$JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH

 

随后使用 source /etc/profile 命令使配置生效,最后通过执行 java –version 查看java是否安装配置成功。看到输出的结果是我们安装的内容,说明安装配置成功。

[root@libaoshen_tencent home]# source /etc/profile [root@libaoshen_tencent home]# java -version java version "1.8.0_161"

Java(TM) SE Runtime Environment (build 
1.8.0_161-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.161-b12, mixed mode)

2. SSH配置

  Hadoop控制脚本依靠SSH来进行集群的管理,为了方便操作,设置SSH为免密访问。

  • 进入创建的用户hadoop的工作目录下
[root@libaoshen_tencent ~]# su hadoop [hadoop@libaoshen_tencent root]$ cd ~
  • 执行ssh创建密钥命令
[hadoop@libaoshen_tencent ~]$ ssh-keygen -t rsa

  进入hadoop用户的工作目录,查看目录下的文件,发现出现了一个 .ssh 文件夹。打开 .ssh 文件夹,我们看到了生成的 公钥 id_rsa.pub 和私钥 id_rsa 两个文件。

[hadoop@libaoshen_tencent ~]$ ls -
al
total 28
drwx
------ 3 hadoop hadoop 4096 Mar 16 23:49 . drwxr-xr-x. 5 root root 4096 Mar 16 23:48 .. -rw------- 1 hadoop hadoop 63 Mar 16 23:49 .bash_history -rw-r--r-- 1 hadoop hadoop 18 Aug 3 2016 .bash_logout -rw-r--r-- 1 hadoop hadoop 193 Aug 3 2016 .bash_profile -rw-r--r-- 1 hadoop hadoop 231 Aug 3 2016 .bashrc drwx------ 2 hadoop hadoop 4096 Mar 16 23:49 .ssh [hadoop@libaoshen_tencent ~]$ cd .ssh/

[hadoop
@libaoshen_tencent .ssh]$
 ls
id_rsa  id_rsa.pub
  • 将生成的公钥覆盖到authorized_keys
[hadoop@libaoshen_tencent .ssh]$ cp id_rsa.pub authorized_keys
  • 通过再这三台机器上分别执行上面的步骤,将三台机器上hadoop用户 ~/.ssh/authorized_keys 中的内容合成一个authorized_keys文件,并使用 scp 命令将该文件复刻到其余两台机器上对应的目录中。并且同时要设置 .ssh 目录的访问权限为700,设置 .ssh/authorized_keys 的权限为600。具体操作如下。

    a.合成后的authorized_keys文件

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC2XHqv9F0+ueiDlBqV7M2yKRdtDRmV7OgW7WFOmcN9abkBAumDM4+vZ6fFkHlmPcUcskm7HFiQ4BEZep8NdaZ8kRr2V4dSy0T8IidXgPL6Mc8UH+e5h+VOaelfmBprb8oo0vmdJ73rAn4bswx9FW/4Rm/mTG0ZXuE288LEXktKxQEz31sH8HBDKt+uEjYq9SDiPEnE8Dg85WMHLDdTwrNH7okMrskeetXBhcacp28PXuneEB5fCOu02CdPsQ7LmJZpEt4rSGHa3f/m75jGGKlvK5+g+jGO7SXuipWaogQIVxb6xusKl0qm5YwR9uVB5I3Yy7FpFJjJMvEf78bbHYHR hadoop@libaoshen_tencent ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDUqHX/2CTD9hJa+qyoEIq3juAXTXr1dBxQpsfySOA1VbKZkyzxJVGlFae9YmHrOOrnWTRFiDGrfJL/KxO7Kt1mpJFYivhAkORGgNWAf6KpjCb0ScRUqp/7aUYMjUv7a8nX0wALHURtoViLmI6A21CWuF9tuIbu5FOpquCV4Vz7z32PFNkHiG2l/mfWGzV+1R8bgkCP7JvBZnB4/4bJ+6mzmTyhiQ5VBnbBzF0IH3kCWeCY7B+XHjrW2iaCEv1mCFrBun0J7ojZYr9tv7FXgr1+B0nr3cDP2parcVPY0BdLDz+sRNVUeczQZfcVypQxfNtdCQ+6pcazBLfgL7cwZ8ab hadoop@libaoshen_ali ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA0fq+6HJ72U4S/+FCijVrp6xhKlTOfajQRHISa3+sH3+wQgHzk3OXGYPJC0snkUN5fot+AQcY2n1sc2l+VItRgjxaISXseUjntAG5N0EQb8wjidPaDTYTbcFefc0aHStHJCKH800yoz7Y7DN+Z84G2Lzp7XK+m8zIBuiMpKjrGE77qGd/UmQcQ4Zk1PxWtWogs0xyrjMr3Y3t57r8xMgqPs2lIb2rlYJ3H26q5YAE6XwaNnjogRh1oM0jakEBlKl4jrFMozUQulwabjT+0gfGezXHie4dmrLPesXjGE7cs+hjUEmzYKPZAIK8i0b+YAEw3i/kr0kDWmNOP/JdgQJcEQ==
hadoop@libaoshen.novalocal

    b.为 .ssh 和 .ssh/authorized_keys 分别设置权限为 700 和 600(很关键)

[hadoop@libaoshen_tencent ~]$ chmod 700 .ssh/

[hadoop
@libaoshen_tencent ~]$ chmod 600 .ssh/authorized_keys

   c.libaoshen_tencent 节点上测试是否能免密登录,通过输出结果看到,可以成功免密登录

[hadoop@libaoshen_tencent ~]$ ssh hadoop@
libaohshen_tencent
Last login: Sat Mar 17 13:24:42 2018 from 127.0.0.1

   d.随后分别使用 scp 命令将该authorized_keys 复制到其他两个节点上,同时设置文件权限以及分别测试是否能免密登录

[hadoop@libaoshen_tencent ~]$ scp ~/.ssh/authorized_keys hadoop@39.*.*.*:~/.ssh/

[hadoop@libaoshen_tencent ~]$ scp ~
/.ssh/authorized_keys hadoop@114.*.*.*:~/.ssh/

e.最后,在libaoshen_tencent节点上,即Master节点上尝试免密连接其余的节点,测试ssh是否配置正确。看输出结果,我们已经可以免密连接Slave节点了,说明ssh配置成功

[hadoop@libaoshen_tencent .ssh]$ ssh hadoop@39.*.*.*

Last failed login: Sat Mar 
17 13:31:38 CST 2018 from 193..*.*.* on ssh:notty There were 2 failed login attempts since the last successful login. Last login: Sat Mar 17 13:07:31 2018


Welcome to Alibaba Cloud Elastic Compute Service 
!


[hadoop
@libaoshen_ali ~]$

3. Hadoop安装和配置

  • Master节点安装Hadoop

a. 我们已经将下载好的hadoop-2.7.5.tat.gz放在了 /home/install-package 中。首先使用root身份登录,再将 hadoop-2.7.5.tar.gz压缩包解压到 /home/hadoop 中,然后要么设置link,要么修改hadoop-2.7.5 目录为hadoop,缩短hadoop安装目录名。操作命令如下。

[root@libaoshen_tencent hadoop]# tar -zxvf hadoop-2.7.5.tar.gz -C ../hadoop/ [root@libaoshen_tencent hadoop]# mv hadoop-2.7.5 hadoop [root@libaoshen_tencent hadoop]# chown -R hadoop:hadoop hadoop

b. 配置hadoop环境变量

[root@libaoshen_tencent hadoop]# vi /etc/profile

添加如下内容

HADOOP_HOME=/home/hadoop/
hadoop
PATH=
$PATH:$HADOOP_HOME/
bin
export PATH HADOOP_HOME

再执行source /etc/profile 让环境变量配置生效。同时在 /home/hadoop/hadoop/etc/hadoop/hadoop-env.sh 修改java路径。如下所示。

[root@libaoshen_tencent hadoop]# vim /usr/hadoop/hadoop/etc/hadoop/hadoop-env.sh

修改java路径为上面我们所配置的路径,再执行 source hadoop-env.sh 使其生效。

image

修改后,执行hadoop version, 我们可以看到hadoop的版本号和其他信息。

image

c. 配置hadoop中的配置文件

image

 

    i.core-site.xml: hadoop 的核心配置文件,添加设置为namenode节点的地址,端口号一般为9000

 

     ii.hdfs-site.xml:设置备份数量,由于我们有两个datanode,所以设置为2

image

     iii.mapred-site.xml:设置jobtracker对应的节点地址,端口号一般为9001

 

     iv.masters和slaves:masters修改为设置为master的那个节点的ip,slaves修改为设置为slave的节点的ip

 

       v.在master上配置完成后,再使用scp命令将java、hadoop及其配置复制到其他的两个节点上

        复制hadoop

[hadoop@libaoshen_tencent hadoop]$ scp -r /usr/hadoop/hadoop hadoop@39.*.*.*:/usr/hadoop [hadoop@libaoshen_tencent hadoop]$ scp -r /usr/hadoop/hadoop hadoop@114.*.*.*:/usr/hadoop

           复制配置,由于我们的配置是在root用户下的,所以需要su root后输入密码才能scp

[root@libaoshen_tencent hadoop]# scp -r /etc/profile root@39.*.*.*:/etc [root@libaoshen_tencent hadoop]# scp -r /etc/profile root@114.*.*.*:/etc

三. 启动

  • 格式化

    运行 hadoop namenode –format,会初始化namenode,记录集群元数据,即datanode的信息等。

  • 启动

    在目录 /usr/hadoop/hadoop/sbin 目录中执行 ./start-all.sh 即可以启动,执行 ./stop-all.sh 即可停止

    启动后可以使用 jps 命令查看hadoop后台进程是否已经启动

Master节点

image

Slave节点

image

 

可以在浏览器中输入 namenode 的ip + 8088/50070 查看集群状态

imageimage

安装过程中遇到的问题

1. 配置不正确,导致分发给其他节点的配置也有问题,最后发现更正的成本比较高。所以一定要仔细检查,确认配置无误后,在复制到每个其他的节点;

2. hostname配置不正确,一定要确保 ip 和 hostname 对应,否则就可能出现 hostname unknown等报错;

3. 在启动过程中,hadoop会打印日志,当出现问题时,可以查看日志信息,准确定位错误位置。

以上是关于集群配置,hadoop部分完整配置过程,细节满满!的主要内容,如果未能解决你的问题,请参考以下文章

vmware搭建hadoop集群完整过程笔记

centos安装配置hadoop超详细过程(含故障排除)

centos安装配置hadoop超详细过程(含故障排除)

Hadoop集群配置

Hadoop集群(第5期)_Hadoop安装配置

Hadoop全分布式集群环境配置