zoukankan      html  css  js  c++  java
  • Spark on Yarn——spark1.5.1集群配置

    写在前面:

        spark只是一种计算框架,如果要搭建集群要依托与一定的组织模式。

     目前来说,Spark集群的组织形式有三种:

    1.      Standalone:使用akka作为网络IO组件,master和worker之间采用actor模型进行组织。简单说就是spark自己实现了集群中的各个节点上的服务。

    2.      Yarn:直接使用Yarn框架完成资源分配和分布式管理功能,spark只是简单地把任务提交给yarn框架。

    3.      Mesos:不太清楚。(好像比较古老了)

        因此,要搭建一个spark集群,首先要选择一种组织形式,对于我来说以前用过一点Hadoop+MapReduce,因此选择比较熟悉的基于Hadoop的yarn框架,现在网上也有一些教程可供参考。

    环境及软件版本型号列表:

    Ubuntu 14.04 64位

    JDK:jdk-7u80-linux-x64 (网址http://www.oracle.com/technetwork/java/javase/archive-139210.html)

    scala:scala-2.10.4 (网址http://www.scala-lang.org/download/2.10.4.html

    Hadoop:hadoop-2.6.2(网址https://hadoop.apache.org/#Download+Hadoop

    spark: sark-1.5.1(要求hadoop2.6+)(网址http://spark.apache.org/downloads.html)(最好是下载pre-built版本的,这样就不用自己额外编译了)

    配置集群的大体步骤:

    修改hosts文件,使节点时间互相ping通 --》建立ssh连接 --》 为每台机器装JDK与SCALA --》 主机装Hadoop并配置好 --》 通过主机将Hadoop发送至各个从节点 --》 主机配置spark --》 通过主机将配置好的spark发送至各个从节点 --》 完成

        通过以上的步骤可以看出,由于我们是把Hadoop及spark一起发送至子节点,因此要求我们的每台机器都有相同的文件路径结构(我的是在所有节点上新建了一个路径放置所有的jdk, scala, hadoop, spark文件,如:~/Downloads/spark_sdk),及相同的用户名(这里指Ubuntu系统admin@master, @前面的admin表示该机器的用户名,@后面的master表示该机器的名称)。

    --------------------------------------------------------------配置步骤正式开始---------------------------------------------------------------------------------------

    1. 修改每个节点的hosts文件: 

    sudo /etc/hosts  (每台主机操作)
    114.212.80.243     master
    114.212.81.244     slave1
    114.212.82.117     slave2
    (在不同机器上互相ping,看是否能够ping通)
    ping master
    ping slave1
    ping slave2

    2. ssh免密码登陆。

    (1) 为确保ssh可以互连,不会出问题,最好先把防火墙关闭或卸载(每台机器)。

    sudo apt-get remove iptables

    (2) 每台机器安装ssh server.

    sudo apt-get install openssh-server

    (3) 每台机器生产公钥和私钥。

    ssh-keygen -t rsa   (一路回车)

    (4) 每个从节点上的id_rsa.pub发给master节点。

    scp /home/master/.ssh/id_rsa.pub master@master:/home/master/.ssh/id_rsa.pub.slave1
    
    scp /home/master/.ssh/id_rsa.pub master@master:/home/master/.ssh/id_rsa.pub.slave2

    (5) 在master上,将所有公钥加到用于认证的公钥文件authorized_keys中.

    cat ./.ssh/id_rsa.pub* >> ./.ssh/authorized_keys (可以按照上面的路径写成绝对路径的形式)

     (6) 将公钥文件authorized_keys分发给每台slave.

    scp /home/master/.ssh/authorized_keys master@slave1:/home/master/.ssh/

    (7) 在每台机子上验证SSH无密码通信.(第一次通信时需要密码,以后则不需要)

    ssh master
    ssh slave1
    ssh slave2

    (8) 如果登陆测试不成功,则可能需要修改文件authorized_keys的权限。

    chmod 600 /home/master/.ssh/authorized_keys

     (现在,完成机器间的护筒之后,下面所有的jdk,scala等得安装可以通过Master用ssh来操控了。)

    2. 安装JDK

    我的是将JDK解压在 ~/Downloads/spark_sdk/文件夹下。

    tar zxvf jdk-7u80-linux-x64.tar.gz ~/Downloads/spark_sdk/

    然后配置bashrc文件。(bashrc与profile的区别:bashrc是指当前用户的环境变量的设置,profile是整个机器的环境变量的设置。对于单用户来说,我们设置bashrc即可。显然,bashrc优先级大于profile)。

    vim ~/.bashrc

    加入如下JDK的配置:

    export JAVA_HOME=~/Downloads/spark_sdk/jdk1.7.0_80
    export PATH=$PATH:$JAVA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    使bashrc生效:

    source ~/.bashrc

    测试JDK是否安装成功:

    java -version

    (所有机器一样,Slave机器可以通过Master操纵)

    3. 安装scala

     将scala解压在~/Downloads/spark_sdk/文件夹下。

    tar zxvf scala-2.10.4.tgz ~/Downloads/spark_sdk/

    然后配置bashrc文件。

    vim ~/.bashrc

    加入如下scala的配置:

    export SCALA_HOME=~/Downloads/spark_sdk/scala-2.10.4
    export PATH=$PATH:$SCALA_HOME/bin
    export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

    使bashrc生效:

    source ~/.bashrc

    测试scala是否安装成功:

    scala -version

    (所有机器一样,Slave机器可以通过Master机器操控,更简单的是,把文件用scp传送到相应位置后,直接把bashrc传送过去,避免所有机器配置)

     4. 配置Hadoop集群。

    在主节点上配置好了,直接发送至从节点即可。

    详细的配置过程见Jerk's blog http://wuchong.me/blog/2015/04/04/spark-on-yarn-cluster-deploy/

    5. 配置spark。

    如果Hadoop集群成功构建,则spark在Master上配置好后,发送给Slave节点即可。

    写在后面:

    配置环境永远是令程序员们最头疼的一件事,可是往往通过配置环境,我们才可以更加了解我们正在使用的这个工具,我们的机器,我们的架构的更底层工作方式。而不是只会使用,不知为何这样做的。

    在过程中也会遇到各种各样的问题,往往一个错误就会跳出一整个屏幕的提示信息,错误等,令人眼花缭乱。所以我的感想就是:

    • 要仔细阅读info提示信息;
    • 慢就是快;
    • 最好知道每个配置文件的信息代表的什么意思。
  • 相关阅读:
    linux 操作命令
    Linux 安装问题
    margin和text-align实现水平居中的区别
    javascript关键字typeof、instanceof、constructor判断类型
    jquery经常用到的代码段
    Ubuntu安装Chrome浏览器及解决启动no-sandbox问题
    github基本使用---从零开始
    Jquery的load加载本地文件出现跨域错误的解决方案
    meta标签中设置以极速模式打开网页
    原生js动态创建文本内容的几种方式
  • 原文地址:https://www.cnblogs.com/little-YTMM/p/4957309.html
Copyright © 2011-2022 走看看