• Spark on Mesos部署


    一.Mesos的安装和部署

    1.下载mesos源码和依赖包

    部署环境
    centOS 6.6
    mesos-0.21.0
    spark-1.4.1

    因为mesos官方只提供源码,所以必须要自己进行编译安装使用

    添加meven源

    sudo wget http://repos.fedorapeople.org/repos/dchen/apache-maven/epel-apache-maven.repo -O /etc/yum.repos.d/epel-apache-maven.repo

    下载mesos和依赖

    # download mesos
    $ wget http://www.apache.org/dist/mesos/0.21.0/mesos-0.21.0.tar.gz
    $ tar -zxf mesos-0.21.0.tar.gz
    # Install other Mesos dependencies
    $ sudo yum install -y apache-maven python-devel  zlib-devel libcurl-devel openssl-devel cyrus-sasl-devel cyrus-sasl-md5 apr-devel subversion-devel apr-util-devel

    2.编译&安装

    make的时间比较长

    $ mkdir build
    $ cd build
    $ ../configure --with-python-headers=/usr/include/python2.6 --with-java-home=$JAVA_HOME --with-java-headers=$JAVA_HOME/include --with-webui --with-included-zookeeper --prefix=/usr/install/mesos
    $ make
    $ make install

    3.配置mesos

    修改 / 创建 master列表文件

    vim /usr/install/mesos/etc/masters
    
    masterIP

    修改/创建 slave列表文件

    vim /usr/install/mesos/etc/slaves
    
    slaveIP1
    slaveIP2
    etc

    修改master配置文件

    vim /usr/install/mesos/etc/mesos-master-env.sh
    
    export MESOS_log_dir=/home/admin/mesos/logs
    export MESOS_work_dir=/home/admin/mesos/work

    修改slave配置文件

    vim /usr/install/mesos/etc/mesos-slave-env.sh
    
    export MESOS_master=masterIP:5050
    export MESOS_log_dir=/home/admin/mesos/logs
    export MESOS_work_dir=/home/admin/mesos/work
    export MESOS_resources="mem:8096;cpus:2"
    export MESOS_hadoop_home=/usr/install/hadoop
    export MESOS_switch_user=false
    export MESOS_gc_delay=1days

    启动mesos

    /usr/install/mesos/sbin/mesos-start-cluster.sh

    不需要配置文件的启动方式

    启动master

    nohup sudo -u admin /usr/install/mesos/sbin/mesos-master --log_dir=/home/admin/mesos/logs --work_dir=/home/admin/mesos/work >/dev/null 2>&1 &

    启动slave

    nohup sudo -u admin  /usr/install/mesos/sbin/mesos-slave --master=mesos://masterIP:5050 --log_dir=/home/admin/mesos/logs --work_dir=/home/admin/mesos/work --hadoop_home=/usr/install/hadoop --resources="men:100000;cpus:22" --gc_delay="1days" --switch_user="false" >/dev/null 2>&1 &

    tip1

    启动slave时默认使用所有资源,可以使用命令–resources来限制

    --resources="mem:8096;cpus:2"
    

    当你修改slave资源分配的时候,必须要删除原来的配置信息,然后重开slave

    rm -f /home/admin/mesos/work/meta/slaves/latest
    

    tip2

    启动slave时如不添加--hadoop_home参数,将会在系统的环境变量中寻找HADOOP_HOME,如果没有设置则无法从hdfs获取到framework executor包。

    tip3

    --gc_delay 参数控制定期删除work下的文件,你可以设置成
    3days,2weeks,etc.默认是1周删除,不过当work文件夹达到一定大小,将会提前删除该目录下的文件。详细计算公式可以去看--gc_disk_headroom 参数

    tip4

    ‘–switch_user’参数控制启动task的用户,默认为true,就是提交任务的用户,提交任务时,mesos会调用chown -R 来修改worker下executor的拥有者,权限不够就会报错。修改为false后,则使用启动slave的用户提交任务。

    报错提示一般是这样的

    Failed to execute chown -R 505:100 ...
    

    web UI

    可在5050端口查看mesos web UI
    web UI

    Mesos HA

    mesos也是使用zookeeper来实现HA的,更多zookeeper的信息可以去看其他文档。

    zookeeper部署

    修改conf/zoo.cfg里的内容

    server.1=192.168.6.55:2888:3888  
    server.2=192.168.6.56:2888:3888  
    server.3=192.168.6.57:2888:3888
    

    在三台机器上启动zookeeper

    $ZK_HOME/bin/zkServer.sh start 
    

    修改master配置文件

    master的数量一般为奇数
    quorum > (number of masters)/2.

    在mesos-master.env.sh中添加以下参数
    
    export MESOS_zk=zk://192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181/mesos
    export MESOS_quorum=1

    修改slave配置文件

    将mesos-slave-env.sh中的以下参数修改
    
    MESOS_master=zk://192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181/mesos

    不需要配置文件的启动方式

    启动master

    nohup sudo -u admin /usr/install/mesos/sbin/mesos-master --log_dir=/home/admin/mesos/logs --work_dir=/home/admin/mesos/work --cluster=td_mesos --zk://192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181/mesos --quorum=1 &

    启动slave

    nohup sudo -u admin  /usr/install/mesos/sbin/mesos-slave --master=zk://192.168.6.55:2181,192.168.6.56:2181,192.168.6.57:2181/mesos --log_dir=/home/admin/mesos/logs --work_dir=/home/admin/mesos/work --hadoop_home=/usr/install/hadoop --resources="men:100000;cpus:22" --gc_delay="1days" --switch_user="false" >/dev/null 2>&1 &

    进入192.168.6.52,显示不是leader,马上跳转回192.168.6.53
    不是leader

    kill掉53上的master进程后,再进入52,发现变为leader,说明HA已生效。

    HA生效

    二.Spark on mesos

    将编译过的spark包上传到hdfs

    hdfs dfs -put spark-1.4.1-bin-hadoop2.4.tgz /user/shiwei/

    在spark-env中添加

    export MESOS_NATIVE_JAVA_LIBRARY=/usr/install/mesos/lib/libmesos.so
    export SPARK_EXECUTOR_URI=hdfs://192.168.6.52:9000/user/shiwei/spark-1.4.1-bin-hadoop2.4.tgz

    同时也可在spark-default.conf中添加

    spark.executor.uri    hdfs://192.168.6.52:9000/user/shiwei/spark-1.4.1-bin-hadoop2.4.tgz
    spark.master    mesos://192.168.6.53:5050

    启动spark-shell

    ./bin spark-shell

    任务图片

    scala>val Data = sc.parallelize(1 to 100).count

    可以在mesos web ui 上看到任务运行情况
    这里写图片描述

    至此spark on mesos部署结束。

    FAQ

    1.`CXXABI_1.3.5’ not found

    报错提示

    Failed to load native Mesos library from /usr/install/mesos/lib/libmesos.so
    java.lang.UnsatisfiedLinkError: /usr/install/mesos/lib/libmesos.so: /usr/lib64/libstdc++.so.6: version `CXXABI_1.3.5' not found (required by /usr/install/mesos/lib/libmesos.so)

    查询版本

    strings /usr/lib64/libstdc++.so.6 |grep CXXABI
    
    CXXABI_1.3
    CXXABI_1.3.1
    CXXABI_1.3.2
    CXXABI_1.3.3

    升级 libstdc++.so.6 解决

    2. `GLIBCXX_3.4.14’ not found

    报错提示

    /usr/install/mesos/sbin/mesos-master: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by /usr/install/mesos/sbin/mesos-master)

    查看版本

    strings /usr/install/mesos-0.27.2/lib/libstdc++.so.6 | grep GLIBCXX
    
    ~GLIBCXX_3.4
    ~GLIBCXX_3.4.1
    ~GLIBCXX_3.4.2
    ~GLIBCXX_3.4.3
    ~GLIBCXX_3.4.4
    ~GLIBCXX_3.4.5
    ~GLIBCXX_3.4.6
    ~GLIBCXX_3.4.7
    ~GLIBCXX_3.4.8
    ~GLIBCXX_3.4.9
    ~GLIBCXX_3.4.10
    ~GLIBCXX_3.4.11
    ~GLIBCXX_3.4.12
    ~GLIBCXX_3.4.13
    ~GLIBCXX_FORCE_NEW
    ~GLIBCXX_DEBUG_MESSAGE_LENGTH
    sudo cp /usr/install/mesos/lib/libstdc++.so.6 /usr/lib64/libstdc++.so.6
  • 相关阅读:
    【转】In ASP.NET using jQuery Uploadify upload attachment
    golang 初体验
    Node.js(express) + MongoDB(mongoose) 简单开发(二)
    Node.js(express) + MongoDB(mongoose) 简单开发(一)
    windows下修改mysql的root密码
    新网站添加百度官方认证
    手写单例模式
    浏览器内核
    IE内核浏览器
    没有猜中开头,更加没有预料结尾的我,正努力走在向程序媛发展的道路上……
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6168188.html
Copyright © 2020-2023  润新知