主要内容

将应用部署到火花使用MATLABAPI火花

万博1manbetx支持平台:Linux®只有。

此示例向您展示如何使用MATLAB将独立应用程序部署到Spark™®Spark的API。您的应用程序可以使用两种受支持的集群管理器之一部署在Spark上:本地和Hadoop万博1manbetx®纱线。这个示例向您展示了如何使用这两个集群管理器部署应用程序。有关集群管理器的讨论,请参见Spark支持的集群管理器万博1manbetx

目标:计算给定数据集中唯一航空公司的数量。

数据集: airlinesmall.csv
描述:

1987-2008年离港及抵港航班资料。

地点: /usr/local/MATLAB/R2022b/工具箱/ matlab /演示

Helper函数

创建一个名为carrierToCount.m使用以下代码:

函数results = carrierToCount(input) tbl = input{1};intermKeys = tbl.UniqueCarrier;[intermKeys, ~, idx] = unique(intermKeys);intermValues = num2cell(accumarray(idx, ones(size(idx))));结果= cellfun(@(x,y) {x,y},...intermKeys intermValues,...“UniformOutput”、假);
这个帮助函数作为函数句柄传递给示例中的一个方法。

请注意

如果您使用的是Spark 1.6或更高版本,则需要增加Java®堆大小在MATLAB中至少512MB。有关如何在MATLAB中增加Java堆大小的信息,请参见Java堆内存首选项

当地的

本地集群管理器表示一个伪Spark启用的集群,并在一台机器上以非分布式模式工作。它可以配置为使用一个工作线程,或者在多核机器上使用多个工作线程。在应用程序中,它用单词表示当地的.本地集群管理器对于在启用Spark的Hadoop集群上全面部署应用程序之前调试应用程序非常方便。

先决条件

  1. 通过创建一个对MATLAB搜索路径可见的新工作文件夹开始本示例。

  2. 创建helper函数carrierToCount.m上面提到的。

过程

  1. 指定Spark属性。

    使用一个容器。地图对象指定Spark属性。

    sparkProp =容器。地图(...“spark.executor.cores”...“spark.matlab.worker.debug”},...' 1 '...“真正的”});

    Spark属性指示正在部署的应用程序的Spark执行环境。每个应用程序都必须配置特定的Spark属性才能部署。

    有关Spark属性的详细信息,请展开道具的值“SparkProperties”属性中的名称-值对输入参数部份SparkConf类。

  2. 创建一个SparkConf对象。

    使用课程matlab.compiler.mlspark.SparkConf要创建SparkConf对象。一个SparkConfobject存储部署到Spark的应用程序的配置参数。应用程序的配置参数通过SparkContext传递到Spark集群。

    conf = matlab.compiler.mlspark.SparkConf(...“浏览器名称”“mySparkAppDepLocal”...“大师”“当地[1]”...“SparkProperties”, sparkProp);

    有关SparkConf的更多信息,请参见matlab.compiler.mlspark.SparkConf

  3. 创建一个SparkContext对象。

    使用课程matlab.compiler.mlspark.SparkContextSparkConf对象作为创建对象的输入SparkContext对象。

    sc = matlab.compiler.mlspark.SparkContext(conf);

    一个SparkContext通过初始化到Spark集群的连接,object作为Spark的入口点。它接受SparkConf对象作为输入参数,并使用该对象中指定的参数来设置与Spark执行环境建立连接所需的内部服务。

    有关SparkContext的更多信息,请参见matlab.compiler.mlspark.SparkContext

  4. 创建一个抽样对象从数据中获取。

    使用MATLAB函数数据存储要创建数据存储对象指向文件airlinesmall.csv.然后使用SparkContext方法datastoreToRDD要转换数据存储Spark对象抽样对象。

    创建MATLAB数据存储(LOCAL)数据存储(“airlinesmall.csv”...“TreatAsMissing”“NA”...“SelectedVariableNames”“UniqueCarrier”);将MATLAB数据存储转换为Spark RDDrdd = sc.datastoreToRDD(ds);

    一般情况下,可以使用以下方法创建输入rddSparkContext类:并行化datastoreToRDD,文本文件

  5. 执行操作抽样对象。

    使用Spark RDD方法,例如flatMap类的所有元素应用函数抽样对象和扁平化的结果。这个函数carrierToCount作为将应用于RDD元素的函数。函数的函数句柄carrierToCount作为输入参数传递给flatMap方法。

    maprdd = rdd.flatMap(@carrierToCount);Redrdd = maprdd。(@(acc,value) acc+value);Countdata = reddrdd .collect();计数并显示载波出现次数计数= 0;I =1: count (countdata) count = count + countdata{I}{2};流(\n运营商名称:%s,计数:%d', countdata{i}{1}, countdata{i}{2});结束流(总计数:%d\n数);%删除Spark删除(sc)

    一般来说,您将提供MATLAB函数句柄或匿名函数作为Spark RDD方法的输入参数转换而且行动.这些函数句柄和匿名函数在已部署应用程序的worker上执行。

    有关支持的RDD转换和操作的万博1manbetx列表,请参见转换而且行动方法的“方法”部分抽样类。

    有关转换和操作的更多信息,请参见Apache Spark基础

  6. 创建一个独立的应用程序。

    使用世纪挑战集团命令使用- m标志以创建独立应用程序。的- mFlag创建一个可以从命令行运行的标准可执行文件。的——一个标志包含依赖数据集airlinesmall.csv从文件夹中< matlabroot > /工具箱/ matlab /演示.的世纪挑战集团命令自动拾取依赖文件carrierToCount.m只要是在同一个工作文件夹里。

    >> mcc -m deployToSparkMlApiLocal。M -a /toolbox/matlab/demos/ airlinsmall .csv

    世纪挑战集团命令创建shell脚本run_deployToSparkMlApiLocal.sh运行可执行文件deployToSparkMlApiLocal

    有关更多信息,请参见世纪挑战集团

  7. 使用以下命令从Linux shell运行独立应用程序:

    $ ./run_deployToSparkMlApiLocal.sh /share/MATLAB/MATLAB_Runtime/v91 . txt

    / / MATLAB / MATLAB_Runtime /跟v91分享参数是否指示的位置MATLAB运行时

    在执行上述命令之前,请确保javaclasspath.txt文件与shell脚本和可执行文件在同一个文件夹中。

    如果找不到文件,应用程序将无法执行javaclasspath.txt

    如果未注释包含Hadoop配置文件文件夹位置的可选行,则应用程序也可能无法执行。上执行应用程序当地的集群管理器,这一行必须被注释。只有当您计划使用yarn-client作为您在Spark支持的Hadoop集群上的集群管理器。

  8. 界面显示如下:

    运营商名称:9E,计数:521运营商名称:AA,计数:14930运营商名称:AQ,计数:154运营商名称:AS,计数:2910运营商名称:B6,计数:806运营商名称:CO,计数:8138 ... ... ...运营商名称:US,计数:13997运营商名称:WN,计数:15931运营商名称:XE,计数:2357运营商名称:YV,计数:849总计数:123523

代码:

deployToSparkMlApiLocal.m

Hadoop

yarn-client集群管理器代表一个启用Spark的Hadoop集群。Hadoop 2.0中引入了YARN集群管理器。它通常安装在与HDFS™相同的节点上。因此,在YARN上运行Spark可以让Spark轻松访问HDFS数据。在应用程序中,它用单词表示yarn-client

因为部署应用程序的步骤使用yarn-client由于您的集群管理器类似于使用上面所示的本地集群管理器,因此对这些步骤的讨论很少。有关每个步骤的详细讨论,请检查当地的上面的情况。

请注意

您可以按照相同的说明将使用Spark的MATLAB API创建的Spark应用程序部署到Cloudera®鼎晖。看一个例子MATLAB的答案™,点击在这里

要使用Cloudera CDH加密区域,请添加JAR文件commons-codec-1.9.jar的静态类路径MATLAB运行时.文件的位置:HADOOP_PREFIX / lib / commons-codec-1.9.jar美元,其中$HADOOP_PREFIX为安装Hadoop的位置。

先决条件

  1. 通过创建一个对MATLAB搜索路径可见的新工作文件夹开始本示例。

  2. 安装MATLAB运行时在Hadoop集群中每个工作节点都可以访问的文件夹中。这个例子使用了/ / MATLAB / MATLAB_Runtime /跟v91分享作为位置的MATLAB运行时文件夹中。

    如果你没有MATLAB运行时,你可从以下网址下载://www.tianjin-qmedu.com/s manbetx 845products/compiler/mcr

  3. 复制airlinesmall.csv进入HDFS文件夹/ user / <用户名> /数据集.在这里<用户名>指的是你在HDFS中的用户名。

    $ ./hadoop fs -copyFromLocal airlinsmalll .csv hdfs://host:54310/user//datasets .csv

过程

  1. 建立环境变量,HADOOP_PREFIX指向您的Hadoop安装文件夹。这些属性是向Hadoop集群提交作业所必需的。

    setenv (“HADOOP_PREFIX”' /分享/ hadoop / hadoop-2.6.0 '

    HADOOP_PREFIX使用MATLAB时必须设置环境变量数据存储函数指向HDFS上的数据。设置此环境变量与Spark无关。看到Spark与Hadoop的关系获取更多信息。

  2. 指定Spark属性。

    使用一个容器。地图对象指定Spark属性。

    sparkProperties =容器。地图(...“spark.executor.cores”...“spark.executor.memory”...“spark.yarn.executor.memoryOverhead”...“spark.dynamicAllocation.enabled”...“spark.shuffle.service.enabled”...“spark.eventLog.enabled”...“spark.eventLog.dir”},...' 1 '...2 g的...“1024”...“真正的”...“真正的”...“真正的”...hdfs: / / hadoop01glnxa64:54310 / user / <用户名> / sparkdeploy”});

    有关Spark属性的详细信息,请展开道具的值“SparkProperties”属性中的名称-值对输入参数部份SparkConf类。

  3. 创建一个SparkConf对象。

    使用课程matlab.compiler.mlspark.SparkConf要创建SparkConf对象。

    conf = matlab.compiler.mlspark.SparkConf(...“浏览器名称”“myApp”...“大师”“yarn-client”...“SparkProperties”, sparkProperties);

    有关SparkConf的更多信息,请参见matlab.compiler.mlspark.SparkConf

  4. 创建一个SparkContext对象。

    使用课程matlab.compiler.mlspark.SparkContextSparkConf对象作为创建对象的输入SparkContext对象。

    sc = matlab.compiler.mlspark.SparkContext(conf);

    有关SparkContext的更多信息,请参见matlab.compiler.mlspark.SparkContext

  5. 创建一个抽样对象从数据中获取。

    使用MATLAB函数数据存储要创建数据存储对象指向文件airlinesmall.csv在HDFS。然后使用SparkContext方法datastoreToRDD要转换数据存储Spark对象抽样对象。

    创建MATLAB数据存储(HADOOP)数据存储(...hdfs: / / / user / <用户名> /数据/ airlinesmall.csv '...“TreatAsMissing”“NA”...“SelectedVariableNames”“UniqueCarrier”);将MATLAB数据存储转换为Spark RDDrdd = sc.datastoreToRDD(ds);

    一般情况下,可以使用以下方法创建输入rddSparkContext类:并行化datastoreToRDD,文本文件

  6. 执行操作抽样对象。

    使用Spark RDD方法,例如flatMap类的所有元素应用函数抽样对象和扁平化的结果。这个函数carrierToCount作为将应用于RDD元素的函数。函数的函数句柄carrierToCount作为输入参数传递给flatMap方法。

    maprdd = rdd.flatMap(@carrierToCount);Redrdd = maprdd。(@(acc,value) acc+value);Countdata = reddrdd .collect();计数并显示载波出现次数计数= 0;I =1: count (countdata) count = count + countdata{I}{2};流(\nCarrier Code: %s, Count: %d, countdata{i}{1}, countdata{i}{2});结束流(总计数:%d\n数);将结果保存到MAT文件保存(“countdata.mat”“countdata”);%删除Spark删除(sc);

    有关支持的RDD转换和操作的万博1manbetx列表,请参见转换而且行动方法的“方法”部分抽样类。

    有关转换和操作的更多信息,请参见Apache Spark基础

  7. 创建一个独立的应用程序。

    使用世纪挑战集团命令使用- m标志以创建独立应用程序。的- mFlag创建一个可以从命令行运行的独立应用程序。您不需要附加数据集airlinesmall.csv因为它驻留在HDFS上。的世纪挑战集团命令自动拾取依赖文件carrierToCount.m只要是在同一个工作文件夹里。

    >> mcc -m deployToSparkMlApiHadoop.m

    世纪挑战集团命令创建shell脚本run_deployToSparkMlApiHadoop.sh运行可执行文件deployToSparkMlApiHadoop

    有关更多信息,请参见世纪挑战集团

  8. 使用以下命令从Linux shell运行独立应用程序:

    $ ./run_deployToSparkMlApiHadoop.sh /share/MATLAB/MATLAB_Runtime/v91 .sh

    / / MATLAB / MATLAB_Runtime /跟v91分享参数是否指示的位置MATLAB运行时

    在执行上述命令之前,请确保javaclasspath.txt文件与shell脚本和可执行文件在同一个文件夹中。

    如果找不到文件,应用程序将无法执行javaclasspath.txt

    如果注释了包含Hadoop配置文件文件夹位置的可选行,则应用程序也可能无法执行。要在yarn-client集群管理器上执行应用程序,必须取消注释这一行。只有当您计划使用本地集群管理器运行应用程序时,才应该注释这一行。

  9. 界面显示如下:

    运营商名称:9E,计数:521运营商名称:AA,计数:14930运营商名称:AQ,计数:154运营商名称:AS,计数:2910运营商名称:B6,计数:806运营商名称:CO,计数:8138 ... ... ...运营商名称:US,计数:13997运营商名称:WN,计数:15931运营商名称:XE,计数:2357运营商名称:YV,计数:849总计数:123523

    请注意

    如果要部署的应用程序是MATLAB函数,而不是MATLAB脚本,请使用以下执行语法:

    $ ./run_.sh \  \ [Spark参数]\[应用程序参数]
    例如:
    $ ./run_deployToSparkMlApiHadoop.sh.sh \ /usr/local/ matlab / matlab_runtime /v91 \ yarn-client \ hdfs://host:54310/user//datasets/ airlinsmalll .csv \ hdfs://host:54310/user//result .sh \ usr/local/ matlab_runtime /v91 \ yarn-client \ hdfs://host:54310/user//result .csv \

代码:

deployToSparkMlApiHadoop.m