zoukankan      html  css  js  c++  java
  • Hadoop集群(双节点)安装配置

    集群安装前置条件

    已掌握Hadoop单机伪分布式安装配置,否则先查看Hadoop伪分布式安装与配置

    环境

    Ubuntu 18.04 + JDK 1.8 + Hadoop 2.10 + SSH

    本教程简单的使用两个节点作为集群环境:一个Master节点,一个Slave节点。

    准备工作

    Hadoop 集群的安装配置大致为如下流程:

    1. 选定一台机器作为 Master
    2. 在 Master 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
    3. 在 Master 节点上安装 Hadoop,并完成配置
    4. 在其他 Slave 节点上配置 hadoop 用户、安装 SSH server、安装 Java 环境
    5. 将 Master 节点上的 /usr/local/hadoop 目录复制到其他 Slave 节点上
    6. 在 Master 节点上开启 Hadoop

    如果你已按照Hadoop伪分布式安装与配置进行过单机伪分布式安装,且能正常运行,将此虚拟机实例进行克隆即可。

    先关闭当前虚拟机实例。

    选择创建完整克隆,此时你就创建了一个跟前者功能完全相同的虚拟机实例(SSH+Java+Hadoop已拥有),就不用再重新配置了。

    网络配置

    两个虚拟机实例的网络适配器选用NAT模式即可。

    查看Linux的几点IP地址(命令为ifconfig),即inet地址。

    Master节点IP

    Slave节点IP

    首先在Master节点上关闭Hadoop(/usr/local/hadoop/sbin/stop-dfs.sh),在进行后续进群配置。

    为了便于区分,我们修改一下各个节点的主机名

    sudo vim /etc/hostname
    

    然后根据上述我们查到的两个节点的IP地址修改自己所用节点的IP映射

    sudo vim /etc/hosts

    在 Master与Slave1节点的/etc/hosts 中将该映射关系填写上去即可(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录):

    修改完成后需要重启一下,重启后在终端中才会看到机器名的变化接下来的操作中请注意区分 Master 节点与 Slave 节点的操作。

    配置好后需要在各个节点上测试是否相互 ping 得通,如果ping不通,后面的步骤无法执行

    ping Master -c 3       # 在Slave1节点上测试
    ping Slave1 -c 3       # 在Master节点上测试

    例如我在Master节点上ping Slave1,显示如下

    牢记:继续下一步配置前,请先完成所有节点的网络配置,修改过的主机名需重启才能生效

    SSH无密码登陆节点

    此操作是要让 Master 节点可以无密码 SSH 登陆到各个 Slave 节点上。

    首先生成 Master 节点的公匙,在 Master 节点的终端中执行(因为改过主机名,所以还需要删掉原有的再重新生成一次):

    cd ~/.ssh               # 如果没有该目录,先执行一次ssh localhost
    rm ./id_rsa*            # 删除之前生成的公匙(如果有)
    ssh-keygen -t rsa       # 一直按回车就可以

    让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行

    cat ./id_rsa.pub >> ./authorized_keys

    完成后可执行 ssh Master 验证一下(可能需要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点:

    scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

    scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,如下图所示:

    接着在 Slave1 节点上,将 ssh 公匙加入授权

    mkdir ~/.ssh                                   # 如果不存在该文件夹需先创建,若已存在则忽略
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    rm ~/id_rsa.pub                                # 用完就可以删掉了

    如果有其他 Slave 节点,也要执行将 Master 公匙传输到 Slave 节点、在 Slave 节点上加入授权这两步。

    这样,在 Master 节点上就可以无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行如下命令进行检验

    ssh Slave1

    配置PATH变量,

    将 Hadoop 安装目录加入 PATH 变量中,这样就可以在任意目录中直接使用 hadoo、hdfs 等命令了,需要在 Master 节点上进行配置

    vim ~/.bashrc

    在文件中添加下面一行

    export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

    保存后执行 source ~/.bashrc ,使配置生效

    source ~/.bashrc

    配置集群/分布式环境

    集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slavescore-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml

    1, 文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。

    此教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加一行内容:Slave1。

    2、文件 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>

    3、文件 hdfs-site.xml,dfs.replication 一般设为 3,但我们只有一个 Slave 节点,所以 dfs.replication 的值设为 1

    <configuration>
            <property>
                    <name>dfs.namenode.secondary.http-address</name>
                    <value>Master:50090</value>
            </property>
            <property>
                    <name>dfs.replication</name>
                    <value>1</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>

    4、文件 mapred-site.xml (先重命名,默认文件名为 mapred-site.xml.template),然后配置修改如下:

    <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>
    </configuration>

    5、文件 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>

    配置好后,将 Master 上的 /usr/local/hadoop 文件夹复制到各个节点上。

    因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。

    在 Master 节点上执行如下操作

    cd /usr/local    
    sudo rm -r ./hadoop/tmp                            # 删除 Hadoop 临时文件
    sudo rm -r ./hadoop/logs/*                         # 删除日志文件
    tar -zcf hadoop.tar.gz hadoop                      # 先压缩再复制
    cd ~
    scp ./hadoop.tar.gz Slave1:/home/hadoop

    在 Slave1 节点上执行(可不用命令解压,直接在文件系统中提取,解压或提取时间较长,耐心等待)

    sudo rm -r /usr/local/hadoop                # 删掉旧的(如果存在)
    tar -zxf hadoop.tar.gz -C /usr/local
    sudo chown -R hadoop /usr/local/hadoop

    PS:压缩和解压过程可能会出现重目录现象(解压后hadoop文件夹里面套了一个hadoop文件夹,而第二个文件夹里面才是我们要用到的hadoop环境),此过程自己查看不在赘述

    同样,如果有其他 Slave 节点,也要执行将 hadoop.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。

    首次启动需要先在 Master 节点执行 NameNode 的格式化

    hdfs namenode -format       # 首次运行需要执行初始化,之后不需要
    

    接着可以启动 hadoop 了,在 Master 节点上进行

    start-dfs.sh
    start-yarn.sh
    mr-jobhistory-daemon.sh start historyserver

    通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNodeResourceManagerSecondrryNameNodeJobHistoryServer 进程

    在 Slave 节点可以看到 DataNode 和 NodeManager 进程

    缺少任一进程都表示出错。另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。例如我这边一共有 1 个 Datanodes:

    hdfs dfsadmin -report
    

    也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态http://master:50070/

    执行分布式实例

    执行分布式实例过程与伪分布式模式一样,首先创建 HDFS 上的用户目录

    hdfs dfs -mkdir -p /user/hadoop

    将 /usr/local/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中

    hdfs dfs -mkdir input
    hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
    

    通过查看 DataNode 的状态(占用大小有改变),输入文件确实复制到了 DataNode 中

    关闭 Hadoop 集群也是在 Master 节点上执行的

    stop-yarn.sh
    stop-dfs.sh
    mr-jobhistory-daemon.sh stop historyserver

    初学Hadoop,有什么地方不对望指正!

  • 相关阅读:
    Ecshop去掉模版中随机出现Ecshop版权的方法
    ecshop邮件订阅按“订阅”没反应
    ecshop开发帮助
    ecshop循环计数
    ECSHOP购物车页面显示商品简单描述
    ecshop 函数列表大全
    ecshop 商品分类页 取得当前分类下的子分类方法
    ecshop调用指定分类和个数的文章列表
    thymeleaf中的th:assert用法
    thymeleaf中的模板布局
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181241.html
Copyright © 2011-2022 走看看