资讯专栏INFORMATION COLUMN

跟上大数据的步伐:快速搭建Spark集群

elina / 594人阅读

摘要:本文详细介绍了基于进行集群资源调度的数人云,如何部署集群。数人云集群正是通过进行集群资源调度,因此,数人云部署集群,有着天然的优势。

Spark 是 UC Berkeley AMP lab 开源的类 Hadoop MapReduce 的通用的并行计算框架,Spark 基于 map reduce 算法实现的分布式计算,拥有 Hadoop MapReduce 所具有的优点,并且 能更好地适用于数据挖掘与机器学习等需要迭代的 map reduce 的算法。本文详细介绍了基于Mesos 进行集群资源调度的数人云,如何部署Spark集群。

Spark 支持三种分布式部署方式,分别是 Standalone、Spark on Yarn 以及 Spark on Mesos。其中 Spark on Mesos 模式是很多公司采用的模式,并且 Spark 官方也推荐这种模式。正是由于 Spark 开发之初就考虑到支持 Mesos,因此,目前而言,Spark 运行在 Mesos 上会比运行在 Yarn 上更加灵活,更加自然。数人云集群正是通过 Mesos 进行集群资源调度,因此,数人云部署 Spark 集群,有着天然的优势。

接下来,我们就来体验一下用数人云部署 Spark 集群吧。

第一步 制作镜像

首先,我们需要在 Docker 环境下制作 Spark 的 Docker 镜像,并推送至可访问的 Docker 镜像仓库。

1. 编写如下配置文件

(1) mesos-site.xml

    
    
    
    
        
      
        mesos.hdfs.namenode.cpus
        0.25
      
    
      
        mesos.hdfs.datanode.cpus
        0.25
      
        
      
        mesos.hdfs.journalnode.cpus
        0.25
      
        
      
        mesos.hdfs.executor.cpus
        0.1
      
        
      
        mesos.hdfs.data.dir
        The primary data directory in HDFS
        /var/lib/hdfs/data
      
    
      
        mesos.hdfs.framework.mnt.path
        /opt/mesosphere
        This is the default for all DCOS installs
      
    
      
        mesos.hdfs.state.zk
        master.mesos:2181
        See the Mesos DNS config file for explanation for this
      
    
      
        mesos.master.uri
        zk://master.mesos:2181/mesos
        See the Mesos DNS config file for explanation for this
      
    
      
        mesos.hdfs.zkfc.ha.zookeeper.quorum
        master.mesos:2181
        See the Mesos DNS config file for explanation for this
      
    
      
        mesos.hdfs.mesosdns
          true
        All DCOS installs come with mesos DNS to maintain static configurations
      
    
      
        mesos.hdfs.native-hadoop-binaries
        true
        DCOS comes with pre-distributed HDFS binaries in a single-tenant environment
      
    
      
        mesos.native.library
        /opt/mesosphere/lib/libmesos.so
      
      
      
        mesos.hdfs.ld-library-path
        /opt/mesosphere/lib
      
    

(2) hdfs-site.xml

    
      
        dfs.ha.automatic-failover.enabled
        true
      
    
      
        dfs.nameservice.id
        hdfs
      
    
      
        dfs.nameservices
        hdfs
      
    
      
        dfs.ha.namenodes.hdfs
        nn1,nn2
      
    
      
        dfs.namenode.rpc-address.hdfs.nn1
        namenode1.hdfs.mesos:50071
      
    
      
        dfs.namenode.http-address.hdfs.nn1
        namenode1.hdfs.mesos:50070
      
    
      
        dfs.namenode.rpc-address.hdfs.nn2
        namenode2.hdfs.mesos:50071
      
    
      
        dfs.namenode.http-address.hdfs.nn2
        namenode2.hdfs.mesos:50070
      
    
      
        dfs.client.failover.proxy.provider.hdfs
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
      
    

注:对接 HDFS 时,需要将 dfs.namenode.http-address.hdfs.nn1 配置为 HDFS Namenode 地址;

(3) core-site.xml

    
    
    
    
      
        fs.default.name
        hdfs://hdfs
      
      
        hadoop.proxyuser.hue.hosts
        *
      
      
        hadoop.proxyuser.hue.groups
        *
      
      
        hadoop.proxyuser.root.hosts
        *
      
      
        hadoop.proxyuser.root.groups
        *
      
      
        hadoop.proxyuser.httpfs.hosts
        *
      
      
        hadoop.proxyuser.httpfs.groups
        *
      
    

(4) spark-env.sh

  export JAVA_HOME=$(readlink -f /usr/bin/java | sed "s:jre/bin/java::")
  export MASTER=mesos://zk://${ZOOKEEPER_ADDRESS}/mesos
  export SPARK_HOME=/opt/spark/dist
  export SPARK_LOCAL_IP=`ifconfig eth0 | awk "/inet addr/{print substr($2,6)}"`
  export SPARK_LOCAL_HOSTNAME=`ifconfig eth0 | awk "/inet addr/{print substr($2,6)}"`
  export LIBPROCESS_IP=`ifconfig eth0 | awk "/inet addr/{print substr($2,6)}"`

注1:数人云已经在 Master 节点预装了 Zookeeper,因此 MASTER 需要配置为数人云集群的zookeeper 地址;
注2:SPARK_LOCAL_IP、SPARK_LOCAL_HOSTNAME、LIBPROCESS_IP取值都为主机 IP,如果该主机使用的网卡不是 eth0 的话,注意修改这里的网卡名;

(5) spark-default.conf

  spark.mesos.coarse=true
  spark.mesos.executor.home /opt/spark/dist
  spark.mesos.executor.docker.image your.registry.site/spark:1.5.0-hadoop2.6.0

其中,spark.mesos.executor.docker.image 需要配置为 Spark 镜像在镜像仓库的地址;数人云已将该镜像推送至测试仓库 index.shurenyun.com

2. 编写 Dockerfile

    FROM mesosphere/mesos:0.23.0-1.0.ubuntu1404
    
    # Set environment variables.
    ENV DEBIAN_FRONTEND "noninteractive"
    ENV DEBCONF_NONINTERACTIVE_SEEN "true"
    
    # Upgrade package index and install basic commands.
    RUN apt-get update && 
        apt-get install -y openjdk-7-jdk curl
    
    ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
    
    ENV MESOS_NATIVE_JAVA_LIBRARY /usr/local/lib/libmesos.so
    
    ADD . /opt/spark/dist
    
    ADD hdfs-site.xml /etc/hadoop/hdfs-site.xml
    ADD core-site.xml /etc/hadoop/core-site.xml
    ADD mesos-site.xml /etc/hadoop/mesos-site.xml
    ADD spark-env.sh /opt/spark/dist/conf/spark-env.sh
    ADD spark-default.conf /opt/spark/dist/conf/spark-default.conf
    
    RUN ln -sf /usr/lib/libmesos.so /usr/lib/libmesos-0.23.1.so
    
    WORKDIR /opt/spark/dist

3. 创建并上传 Docker image:

    docker build -t your.registry.site/spark:1.5.0-hadoop2.6.0   
    docker push your.registry.site/spark:1.5.0-hadoop2.6.0  

需把 your.registry.site 换成你的镜像仓库地址;数人云已将该镜像推送至测试仓库 index.shurenyun.com

第二步 建立集群

请参见 创建/删除集群 来创建你的集群。

第三步 发布应用

部署 Spark on Mesos 的架构图如下所示:

其中,Cluster Manager 角色由 Mesos 承担,也就是数人云集群的 Master;Driver Program 用于下发 Spark 计算任务,需要在数人云集群内网的某个节点上手动启动,该节点可以是 Master 或 Slave,或者与数人云集群相通的内网机器;Woker Node 由 Mesos slave 承担,也就是数人云集群的 Slave。

登录到需要启动 Driver Program 的主机上,启动 Spark container:

docker run -it --net host -e ZOOKEEPER_ADDRESS=10.3.10.29:2181,10.3.10.63:2181,10.3.10.51:2181 index.shurenyun.com/spark:1.5.0-hadoop2.6.0 bash 

注1:Spark 启动需要足够的资源,建议 CPU 数最小为1,内存最低1G;
注2:Spark 节点间需要通信,所以选择 HOST 模式部署,避免端口隐射导致而节点间无法通信;
注3:请将ZOOKEEPER_ADDRESS的取值换成你的数人云集群的 Master 地址,端口为2181。

第四步 测试

启动Spark shell

  bin/spark-shell

运行demo

  sc.parallelize(1 to 1000) count

若看到名为 test 的 keyspace 已经添加成功,如下图所示:

恭喜,现在你的 Spark 集群已经正常运作了!如果觉得这种方式使用 Spark 仍觉得不方便,想要更直观的方法,比如在浏览器上编写和测试 Spark 算法,可以尝试使用 Zeppelin 编写和运行 Spark 任务,稍后数人云会为您提供在数人云上玩转 Zeppelin 的最佳实践,敬请期待!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/8194.html

相关文章

  • 智能数据平台 USDP

    摘要:用户可以根据自身业务特点和需求,从中选择相应的组件来搭建自己的大数据处理平台。专业的技术支持大数据团队积淀了多年公有云大数据运维和业务调优经验,通过持续更新的知识库,可以为用户提供专家级的技术支持,解决大数据平台使用和维护的后顾之忧。智能大数据平台 USDPUCloud Smart Data Platform(简称 USDP),是 UCloud 推出的智能化、轻量级的大数据基础服务平台,通过...

    Tecode 评论0 收藏0
  • UCloud一站式智能数据平台USDP免费版正式发布!

    摘要:企业微信截图企业微信截图兼容最广的一站式智能大数据平台涵盖了等众多开源大数据组件,支持对这些组件进行运维中台建设数据开发业务可视化等全栈式大数据开发运维管理。通过一站式智能大数据平台支持的等分布式运算框架,可以高效的进行机器学习应用开发。背景在大数据业务系统中,所有技术栈生态均是围绕着存储进行扩展的,目前开源的主流存储技术栈主要包含如下 3 种类型:· HDFS:Hadoop 系列套件,包含...

    Tecode 评论0 收藏0
  • UCloud发布一站式智能数据平台USDP免费版附USDP资源下载地址

    摘要:机器学习机器学习通过算法对大量数据进行分析,挖掘出其中蕴含的规律,并用于事物预测或者分类,有大量的计算需求。通过一站式智能大数据平台支持的等分布式运算框架,可以高效的进行机器学习应用开发。在大数据业务系统中,所有技术栈生态均是围绕着存储进行扩展的,目前开源的主流存储技术栈主要包含如下 3 种类型:· HDFS:Hadoop 系列套件,包含 Hive、Hbase、Phoenix 等;· Ela...

    Tecode 评论0 收藏0
  • Spark 快速入门

    摘要:数据科学任务主要是数据分析领域,数据科学家要负责分析数据并建模,具备统计预测建模机器学习等方面的经验,以及一定的使用或语言进行编程的能力。监控运行时性能指标信息。 Spark Spark 背景 什么是 Spark 官网:http://spark.apache.org Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,20...

    wangshijun 评论0 收藏0
  • UCloud智能数据平台USDP上线,助力企业快速构建数据服务

    在互联网市场的头部效应下,企业所面临的竞争压力越来越大,如何有效解决获客成本高、用户黏性低、变现能力弱等问题,正是越来越多的企业开始构建大数据平台的初衷。但由于大数据解决方案所涉及的组件错综复杂、技术门槛较高,且初期投入的资源和后期的维护成本较大,十分考验企业的大数据平台组建和运维能力。因此,UCloud大数据团队于近期上线了大数据智能平台(UCloud Smart Data Platform,下...

    Tecode 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<