将高数组部署到火花启用Hadoop集群
支持平台:Linux®只有。
这个例子展示了如何部署一个MATLAB®包含高数组的应用程序到支持Spark™的Hadoop®集群。
目标:从给定的数据集中计算航空公司的平均到达延误和最大到达延误。
数据集: | airlinesmall.csv |
描述: | 1987-2008年的航班离港和抵达信息。 |
地点: | /usr/local/MATLAB/R2022b/工具箱/ matlab /演示 |
请注意
您可以按照相同的说明将高阵列Spark应用程序部署到Cloudera®鼎晖。查看示例MATLAB的答案™,点击在这里.
要使用Cloudera CDH加密区域,需要添加JAR文件commons-codec-1.9.jar
的静态类路径MATLAB运行时.文件的位置:HADOOP_PREFIX / lib / commons-codec-1.9.jar美元
,其中$HADOOP_PREFIX是安装Hadoop的位置。
请注意
如果您使用的是Spark 1.6或更高版本,则需要增加Java®堆大小在MATLAB中至少512MB。有关如何在MATLAB中增加Java堆大小的信息,请参见Java堆内存首选项.
先决条件
通过创建一个MATLAB搜索路径可见的新工作文件夹开始这个示例。
安装MATLAB运行时在Hadoop集群中的每个工作节点都可以访问的文件夹中。这个示例使用
/usr/local/MATLAB/MATLAB_Runtime /
作为位置MATLAB运行时文件夹中。<版本>
如果你没有MATLAB运行时,你可从以下网址下载:
//www.ru-cchi.com/2022世界杯八强谁会赢?products/compiler/mcr
.请注意
对象的所有引用MATLAB运行时版本
在这个例子中MATLAB运行时与您的MATLAB版本对应的版本号。和有关信息。MATLAB运行时版本号对应的MATLAB版本,见此列表.<版本>
复制文件
airlinesmall.csv
进入Hadoop分布式文件系统(HDFS™)文件夹/ user / <用户名> /数据集
.在这里<用户名>
是您在HDFS中的用户名。$./hadoop fs -copyFromLocal airlinsmalll .csv hdfs://host:54310/user/<用户名>/数据集
过程
设置环境变量,
HADOOP_PREFIX
指向Hadoop安装文件夹。这些属性是向Hadoop集群提交作业所必需的。setenv (“HADOOP_PREFIX”,“/ usr / lib / hadoop”)
的
HADOOP_PREFIX
在使用MATLAB时必须设置环境变量数据存储
函数指向HDFS上的数据。设置这个环境变量与Spark无关。看到Spark与Hadoop的关系为更多的信息。如果您计划使用本地机器上的数据集,而不是HDFS上的数据集,那么可以跳过此步骤。
请注意
这个示例使用
/usr/lib/hadoop
安装Hadoop的目录。您的Hadoop安装目录可能不同。指定引发属性。
使用一个
容器。地图
对象来指定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: / /主持人:54310 / user / <用户名> /日志”});
有关Spark属性的更多信息,请展开
道具
的价值“SparkProperties”
中的名称-值对输入参数部分的SparkConf
类。的SparkConf
类是用于Spark的MATLAB API的一部分,它提供了一种将MATLAB应用程序部署到Spark的替代方法。有关更多信息,请参见使用Spark的MATLAB API部署应用程序.配置您的MATLAB应用程序,包含带有Spark参数的高数组。
使用的类
matlab.mapreduce.DeploySparkMapReducer
配置您的MATLAB应用程序,该应用程序包含高数组,并将Spark参数作为键-值对。参看= matlab.mapreduce.DeploySparkMapReducer (...“浏览器名称”,“myTallApp”,...“大师”,“yarn-client”,...“SparkProperties”, sparkProperties);
有关更多信息,请参见
matlab.mapreduce.DeploySparkMapReducer
.定义Spark执行环境。
使用
mapreduce
函数定义Spark执行环境。mapreduce(配置)
有关更多信息,请参见
mapreduce
.包含包含高数组的MATLAB应用程序代码。
使用MATLAB函数
数据存储
创建一个数据存储
对象指向文件airlinesmall.csv
在HDFS。通过数据存储
对象的输入参数高
函数。这将创建一个高数组。您可以对tall数组执行操作来计算平均到达延迟和最大到达延迟。为表示航空公司数据的表格文本文件集合创建一个|数据存储|。选择感兴趣的变量,为对象指定分类数据类型|和|的起源|变量。% ds = datastore(' airlinsmall .csv') %如果使用本地计算机上的数据集ds =数据存储(hdfs: / / / <用户名> /数据/ airlinesmall.csv ');ds。TreatAsMissing =“NA”;ds。SelectedVariableNames = {“年”,“月”,“ArrDelay”,“DepDelay”,“起源”,“桌子”};ds.SelectedFormats (6) = {“% C”,“% C”};%创建高数组高数组就像普通的MATLAB数组,除了它们可以有任何%的行数。当|高|数组由|数据存储|支持时,的底层类高数组基于数据存储的类型。tt =高(ds);删除缺少数据或NaN值的行idx =任何(ismissing (tt), 2);tt (idx:) = [];%计算平均延迟meanArrivalDelay =意味着(tt。DepDelay,“omitnan”);biggestDelays = topkrows (tt 10“ArrDelay”);%收集结果|集合|函数强制计算所有排队操作和%将结果输出返回到内存中。[meanArrivalDelay, biggestDelays] =收集(meanArrivalDelay biggestDelays)删除mapreducer对象删除(设计);
创建Spark应用。
使用
世纪挑战集团
命令-vCW
选项,使用Spark 3.x创建应用程序。> > mcc -vCW“火花:myTallApp 3”deployTallArrayToSpark.m
创建以下文件。
文件 描述 run_myTallApp.sh
运行应用程序的Shell脚本。脚本调用 spark-submit
在集群上启动应用程序。myTallApp.jar
应用程序JAR。应用程序JAR包含打包的MATLAB代码和其他依赖项。 固定
自述文件,包含如何运行应用程序的详细信息。 requiredMCR2022世界杯八强谁会赢?Products.txt
mccExcludedFiles.log
有关更多信息,请参见
世纪挑战集团
.在Linux shell中使用以下命令运行应用程序:
美元。/ run_myTallApp.sh /usr/local/MATLAB/MATLAB_Runtime / v# #
/usr/local/MATLAB/MATLAB_Runtime /
参数是否指示MATLAB运行时.<版本>
您将看到以下输出:
meanArrivalDelay = 7.1201 biggestdelay = 10x5表年月ArrDelay Origin Dest ____ _____ ________ ______ ____ 1995 11 1014 HNL LAX 2007 4 914 JFK DTW 2001 4 887 MCO DTW 2008 7 845 CMH ORD 1988 3 772 ORD LEX 2008 4 710 EWR RDU 1998 10 679 MCI DFW 2006 6 603 ABQ PHX 2008 6 586 PIT LGA 2007 4 568 RNO SLC
或者,如果您想要在MATLAB中分析或查看应用程序生成的结果,您需要使用写
用于高数组的函数。方法读取该文件数据存储
函数。
要将结果写入HDFS上的文件,在MATLAB应用程序之前添加以下代码行删除(配置)
语句,然后打包应用程序:
写(hdfs: / / / user / <用户名> /结果”高(biggestDelays));
取代<用户名>
用您的用户名。
方法只能将一个变量保存到文件中写
用于高数组的函数。因此,如果要保存多个变量,就需要写入多个文件。
在针对Spark启用的集群执行应用程序后,要在MATLAB中查看结果,请使用数据存储
函数如下:
>> ds =数据存储(hdfs: / / / user / <用户名> /结果”) > > readall (ds)
您可能需要设置环境变量HADOOP_PREFIX
使用函数setenv
方法无法查看结果数据存储
函数。
请注意
如果正在部署的高数组应用程序是一个MATLAB函数,而不是MATLAB脚本,则使用以下执行语法:
$ ./run_.sh \ \ [Spark参数]\[应用程序参数]
$ ./run_myTallApp.sh \ /usr/local/ matlab_runtime /v92 \ yarn-client \ hdfs://host:54310/user// datassets / airlinsmalll .csv \ hdfs://host:54310/user/ /result .sh \ /usr/local/ matlab_runtime /v92 \ yarn-client \ hdfs://host:54310/user/ /result .csv \
代码: