在Hadoop YARN之上配置Spark集群(一)

本文详细介绍了如何在Ubuntu14.04环境下,基于Hadoop YARN配置Spark集群的过程,包括创建hadoop用户、安装SSH、网络配置、配置集群环境等关键步骤,并提供了遇到问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近刚接触Spark,想在实验室配一个小规模的Spark分布式集群做实验。虽说只配一个单机版(standalone)的伪分布式集群也可以做实验,但感觉意义不大,同时也为了逼真还原真实的生产环境,查阅了一番资料之后,知道Spark的运行需要外部的资源调度系统来支持,主要有:Standalone Deploy mode、Amazon EC2、Apache Mesos、Hadoop YARN。因为YARN比较流行的缘故,于是,我决定在Hadoop YARN之上配置Spark分布式集群。

对于Hadoop和Spark的一些比较浅显的,初步的认识,大家可以看我写的这篇博文《对于Hadoop和Spark的一些浅显认识》。说的不对的地方或有补充的地方还请各位博友多多提出~我也会在今后的学习当中不断地修改和更新。

本篇文章主要介绍的是在Ubuntu14.04下Hadoop2.7.2的集群配置。

环境介绍
  • 系统:Ubuntu14.04 64位
  • JDK版本:jdk 1.7
  • Hadoop版本:hadoop 2.7.2
  • 集群环境:

    角色hostnameIP
    masterwlw192.168.1.103
    slavezcq-pc192.168.1.105
创建hadoop用户

需要特别注意的是,hadoop集群要求每个master和slave节点上的用户名是相同的。在这里我统一使用名为“hadoop”的用户。

如果你的节点上用户还不统一,则可以使用如下命令来新建用户:

  • 创建用户,名为“hadoop”
    sudo adduser hadoop

  • 设置密码
    sudo passwd hadoop

  • 给hadoop用户创建目录,方可登陆
    sudo mkdir /home/hadoop

  • 将指定目录的拥有者改为hadoop用户
    sudo chown hadoop /home/hadoop

  • 可考虑为hadoop用户增加管理员权限,方便部署,避免一些权限不足的问题
    sudo adduser hadoop sudo

  • 切换到hadoop用户登录

安装ssh server、配置ssh无密码登陆
  • ubuntu默认安装好了ssh client,我们还需要安装ssh server。
    sudo apt-get install openssh-server

  • Hadoop集群需要用到ssh无密码登陆,我们进行设置
    cd ~/.ssh
    ssh-keygen -t rsa #一直按回车就可以
    cp id_rsa.pub authorized_keys

  • 设置完之后,我们无密码登录本机进行测试
    ssh localhost

网络配置
  • 在 /etc/hosts 中添加如下集群信息:

    192.168.1.103 wlw
    192.168.1.105 zcq-pc

    需要注意的是,该集群信息需要在所有主机(master和slave)上都添加

  • 常规的配置jdk就不说了,唯一需要注意的是在 /ect/environment 中添加JAVA_HOME,否则会出错:

    export JAVA_HOME=/opt/jdk1.7.0_75

    同样的,需要在所有主机(master和slave)上都添加

ssh无密码登录节点

只有在各节点之间设置了无密码登录,才能让hadoop实现master节点map任务给slave节点,进行分布式计算。
在上文中已经讲述过了,在master节点上生成公钥了,在这里仍然再赘述一遍。

  • 首先生成 Master 的公匙,在 Master 节点终端中执行:
    cd ~/.ssh
    ssh-keygen -t rsa # 一直按回车就可以

  • master节点需要无密码登录(ssh)本机,还是在master节点上执行命令:
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    完成之后可以用 ssh localhost 进行测试

  • 将公钥从master(wlw)节点上传输到slave(zcq-pc)节点中:
    scp ~/.ssh/id_rsa.pub hadoop@zcq-pc:/home/hadoop/

  • 在 slave(zcq-pc)节点 上将ssh公匙保存到相应位置:
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

    如果你还有其他slave节点的话,同样的道理也需要将master节点的公钥传输到其他的slave节点中去,步骤与上面的相同。或者你也可以在slave节点上生成公钥,将slave节点的公钥传输到master节点中,使他们之间能够互相无密码登录。

  • 最后在master(wlw)节点上测试一下,看能否无密码登录到slave(zcq-pc)节点上:
    ssh zcq-pc

配置集群/分布式环境(关键步骤)

集群/分布式模式需要修改 etc/hadoop 中的5个配置文件,后四个文件可点击查看官方默认设置值,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml

  1. slaves文件
    cd /opt/hadoop-2.7.2/etc/hadoop
    vim slaves

    将原来 localhost 删除,把所有slave的主机名写上,每行一个。因为我只有一个 slave(zcq-pc)节点,所以该文件中就只有一行内容: zcq-pc

  2. core-site.xml文件

    <property>
    </property>

    改为:

    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://wlw:9000</value>
    </property>
    <property>
    <name>hadoop.tmp.dir</name>
    <value>file:/opt/hadoop-2.7.2/tmp</value>
    <description>A base for other temporary directories.</description>
    </property>

    请参照我的配置信息,根据你自身的路径和master节点的hostname名进行更改

  3. hdfs-site.xml文件

    <property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>wlw:50090</value>
    </property>
    <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:/opt/hadoop-2.7.2/tmp/dfs/name</value>
    </property>
    <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:/opt/hadoop-2.7.2/tmp/dfs/data</value>
    </property>
    <property>
    <name>dfs.replication</name>
    <value>2</value>
    </property>

    其中,dfs.replication是设置备份文件的数量,默认为3,我这里将其设置为2

    同样的,请参照我的配置信息,根据你自身的路径和master节点的hostname名进行更改

  4. mapred-site.xml文件
    这个文件不存在,首先需要从模板中复制一份:

    • cp mapred-site.xml.template mapred-site.xml

    然后配置修改如下:

    <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
    </property>

    使Hadoop基于YARN资源调度系统

  5. yarn-site.xml文件

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

  • 配置好后,将 master(wlw)节点上的 Hadoop-2.7.2 文件打包复制到各个slave节点上:
    cd /opt
    sudo tar -zcf ./hadoop-2.7.2.tar.gz ./hadoop-2.7.2
    scp ./hadoop-2.7.2.tar.gz zcq-pc:/home/hadoop

  • 在slave(zcq-pc)节点上执行:
    sudo tar -zxf ~/hadoop-2.7.2.tar.gz -C /opt/
    sudo chown -R hadoop:hadoop /opt/hadoop-2.7.2

  • 如上都配置完成之后,在master节点上就可以启动hadoop了:
    cd /opt/hadoop-2.7.2
    ./bin/hdfs namenode -format # 首次运行需要执行初始化,后面不再需要
    ./sbin/start-dfs.sh
    ./sbin/start-yarn.sh

  • 通过 jps 命令查看master(wlw)节点的Hadoop进程:
    可以看到master节点启动了NameNodeSecondrryNameNodeResourceManager进程,此外还有jps命令的进程

    NameNode指的就是master节点

  • 通过 jps 命令查看slave(zcq-pc)节点的Hadoop进程:
    slave节点则启动了DataNodeNodeManager进程,此外还有jps命令的进程

    DataNode指的就是slave节点

  • 通过Web页面看到查看DataNode和NameNode的状态:

    http://wlw:50070/
    这里写图片描述


    或者你也也可以通过http://wlw:8088来查看:
    这里写图片描述

执行WordCount实例
  • 在本地硬盘上创建 file 文件夹:
    mkdir ~/file

  • 进入该目录,创建一个 file1.txt 文件:
    cd file
    echo “hello hadoop” > file1.txt

  • 在HDFS上创建输入文件夹目录 input :
    cd /opt/hadoop-2.7.2
    ./bin/hadoop fs -mkdir /input

  • 把本地硬盘上创建的 file1.txt 文件传进 input 里面:
    ./bin/hadoop fs -put ~/file/file1.txt /input

  • 用Hadoop自带的jar 包运行 wordcount 例子 :
    ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input/ /output/wordcount1

  • 查看运行结果:
    ./bin/hdfs dfs -cat /output/wordcount1/*

  • 最后,关闭Hadoop集群也是在Master节点上执行:
    ./sbin/stop-dfs.sh
    ./sbin/stop-yarn.sh


注意事项
  • 更改 /etc/profile 之后一定要让其生效
    source /etc/profile
  • 由于我的jdk是放在 /opt 目录下的,应给他赋予执行的权限
    sudo chmod u+x -R /opt/jdk1.7.0_75
在启动Hadoop中出现的问题

(1)Warning: the ECDSA host key for “zcq-pc”differs from the key for the IP address “192.168.1.105”
解决方案:remove the cached key for “192.168.1.105” on master machine

ssh-keygen -R 192.168.1.105

(2) WARNING: POSSIBLE DNS SPOOFING DETECTED!
解决方案:删除 .ssh/known_hosts文件中对应的行(“offending key in /home/wlw/.ssh/known_hosts:”行号)

vim 显示行号:
:set number


PS:在下一篇博文中我会真正讲到在Hadoop YARN之上配置Spark集群

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值