将应用部署到火花使用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集群上全面部署应用程序之前调试应用程序非常方便。
先决条件
通过创建一个对MATLAB搜索路径可见的新工作文件夹开始本示例。
创建helper函数
carrierToCount.m
上面提到的。
过程
指定Spark属性。
使用一个
容器。地图
对象指定Spark属性。sparkProp =容器。地图(...{“spark.executor.cores”,...“spark.matlab.worker.debug”},...{' 1 ',...“真正的”});
Spark属性指示正在部署的应用程序的Spark执行环境。每个应用程序都必须配置特定的Spark属性才能部署。
有关Spark属性的详细信息,请展开
道具
的值“SparkProperties”
属性中的名称-值对输入参数部份SparkConf
类。创建一个
SparkConf
对象。使用课程
matlab.compiler.mlspark.SparkConf
要创建SparkConf
对象。一个SparkConf
object存储部署到Spark的应用程序的配置参数。应用程序的配置参数通过SparkContext传递到Spark集群。conf = matlab.compiler.mlspark.SparkConf(...“浏览器名称”,“mySparkAppDepLocal”,...“大师”,“当地[1]”,...“SparkProperties”, sparkProp);
有关SparkConf的更多信息,请参见
matlab.compiler.mlspark.SparkConf
.创建一个
SparkContext
对象。使用课程
matlab.compiler.mlspark.SparkContext
与SparkConf
对象作为创建对象的输入SparkContext
对象。sc = matlab.compiler.mlspark.SparkContext(conf);
一个
SparkContext
通过初始化到Spark集群的连接,object作为Spark的入口点。它接受SparkConf
对象作为输入参数,并使用该对象中指定的参数来设置与Spark执行环境建立连接所需的内部服务。有关SparkContext的更多信息,请参见
matlab.compiler.mlspark.SparkContext
.创建一个
抽样
对象从数据中获取。使用MATLAB函数
数据存储
要创建数据存储
对象指向文件airlinesmall.csv
.然后使用SparkContext方法datastoreToRDD
要转换数据存储
Spark对象抽样
对象。创建MATLAB数据存储(LOCAL)数据存储(“airlinesmall.csv”,...“TreatAsMissing”,“NA”,...“SelectedVariableNames”,“UniqueCarrier”);将MATLAB数据存储转换为Spark RDDrdd = sc.datastoreToRDD(ds);
一般情况下,可以使用以下方法创建输入rdd
SparkContext
类:并行化
,datastoreToRDD
,文本文件
.执行操作
抽样
对象。使用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基础.
创建一个独立的应用程序。
使用
世纪挑战集团
命令使用- m
标志以创建独立应用程序。的- m
Flag创建一个可以从命令行运行的标准可执行文件。的——一个
标志包含依赖数据集airlinesmall.csv
从文件夹中< matlabroot > /工具箱/ matlab /演示
.的世纪挑战集团
命令自动拾取依赖文件carrierToCount.m
只要是在同一个工作文件夹里。>> mcc -m deployToSparkMlApiLocal。M -a
/toolbox/matlab/demos/ airlinsmall .csv 的
世纪挑战集团
命令创建shell脚本run_deployToSparkMlApiLocal.sh
运行可执行文件deployToSparkMlApiLocal
.有关更多信息,请参见
世纪挑战集团
.使用以下命令从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集群上的集群管理器。界面显示如下:
运营商名称:9E,计数:521运营商名称:AA,计数:14930运营商名称:AQ,计数:154运营商名称:AS,计数:2910运营商名称:B6,计数:806运营商名称:CO,计数:8138 ... ... ...运营商名称:US,计数:13997运营商名称:WN,计数:15931运营商名称:XE,计数:2357运营商名称:YV,计数:849总计数:123523
代码:
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的位置。
先决条件
通过创建一个对MATLAB搜索路径可见的新工作文件夹开始本示例。
安装MATLAB运行时在Hadoop集群中每个工作节点都可以访问的文件夹中。这个例子使用了
/ / MATLAB / MATLAB_Runtime /跟v91分享
作为位置的MATLAB运行时文件夹中。如果你没有MATLAB运行时,你可从以下网址下载:
//www.tianjin-qmedu.com/s manbetx 845products/compiler/mcr
.复制
airlinesmall.csv
进入HDFS文件夹/ user / <用户名> /数据集
.在这里<用户名>
指的是你在HDFS中的用户名。$ ./hadoop fs -copyFromLocal airlinsmalll .csv hdfs://host:54310/user/
/datasets .csv
过程
建立环境变量,
HADOOP_PREFIX
指向您的Hadoop安装文件夹。这些属性是向Hadoop集群提交作业所必需的。setenv (“HADOOP_PREFIX”,' /分享/ hadoop / hadoop-2.6.0 ')
的
HADOOP_PREFIX
使用MATLAB时必须设置环境变量数据存储
函数指向HDFS上的数据。设置此环境变量与Spark无关。看到Spark与Hadoop的关系获取更多信息。指定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
类。创建一个
SparkConf
对象。使用课程
matlab.compiler.mlspark.SparkConf
要创建SparkConf
对象。conf = matlab.compiler.mlspark.SparkConf(...“浏览器名称”,“myApp”,...“大师”,“yarn-client”,...“SparkProperties”, sparkProperties);
有关SparkConf的更多信息,请参见
matlab.compiler.mlspark.SparkConf
.创建一个
SparkContext
对象。使用课程
matlab.compiler.mlspark.SparkContext
与SparkConf
对象作为创建对象的输入SparkContext
对象。sc = matlab.compiler.mlspark.SparkContext(conf);
有关SparkContext的更多信息,请参见
matlab.compiler.mlspark.SparkContext
.创建一个
抽样
对象从数据中获取。使用MATLAB函数
数据存储
要创建数据存储
对象指向文件airlinesmall.csv
在HDFS。然后使用SparkContext方法datastoreToRDD
要转换数据存储
Spark对象抽样
对象。创建MATLAB数据存储(HADOOP)数据存储(...hdfs: / / / user / <用户名> /数据/ airlinesmall.csv ',...“TreatAsMissing”,“NA”,...“SelectedVariableNames”,“UniqueCarrier”);将MATLAB数据存储转换为Spark RDDrdd = sc.datastoreToRDD(ds);
一般情况下,可以使用以下方法创建输入rdd
SparkContext
类:并行化
,datastoreToRDD
,文本文件
.执行操作
抽样
对象。使用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基础.
创建一个独立的应用程序。
使用
世纪挑战集团
命令使用- m
标志以创建独立应用程序。的- m
Flag创建一个可以从命令行运行的独立应用程序。您不需要附加数据集airlinesmall.csv
因为它驻留在HDFS上。的世纪挑战集团
命令自动拾取依赖文件carrierToCount.m
只要是在同一个工作文件夹里。>> mcc -m deployToSparkMlApiHadoop.m
的
世纪挑战集团
命令创建shell脚本run_deployToSparkMlApiHadoop.sh
运行可执行文件deployToSparkMlApiHadoop
.有关更多信息,请参见
世纪挑战集团
.使用以下命令从Linux shell运行独立应用程序:
$ ./run_deployToSparkMlApiHadoop.sh /share/MATLAB/MATLAB_Runtime/v91 .sh
/ / MATLAB / MATLAB_Runtime /跟v91分享
参数是否指示的位置MATLAB运行时.在执行上述命令之前,请确保
javaclasspath.txt
文件与shell脚本和可执行文件在同一个文件夹中。如果找不到文件,应用程序将无法执行
javaclasspath.txt
.如果注释了包含Hadoop配置文件文件夹位置的可选行,则应用程序也可能无法执行。要在yarn-client集群管理器上执行应用程序,必须取消注释这一行。只有当您计划使用本地集群管理器运行应用程序时,才应该注释这一行。
界面显示如下:
运营商名称: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 \
代码: