将Tall数组部署到火花启用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属性。
使用一个
容器。地图
对象指定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部署应用.配置包含具有Spark参数的tall数组的MATLAB应用程序。
使用课程
matlab.mapreduce.DeploySparkMapReducer
以配置包含高数组的MATLAB应用程序,其中Spark参数为键值对。conf = 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') %数据存储(hdfs: / / / <用户名> /数据/ airlinesmall.csv ');ds。TreatAsMissing =“NA”;ds。SelectedVariableNames = {“年”,“月”,“ArrDelay”,“DepDelay”,“起源”,“桌子”};ds.SelectedFormats(5:6) = {“% C”,“% C”};%创建高阵列% Tall数组与普通的MATLAB数组类似,只是它们可以有任何%行数。的底层类|高|数组由|数据存储|支持时高数组基于数据存储的类型。Tt =高(ds);删除缺少数据或NaN值的行Idx = any(ismissing(tt),2);Tt (idx,:) = [];计算平均延迟meanArrivalDelay = mean(tt。DepDelay,“omitnan”);biggestdelay = topkrows(tt,10,“ArrDelay”);收集结果|gather|函数强制计算所有排队操作和%将结果输出带回内存。[meanArrivalDelay, biggestdelayed] = gather(meanArrivalDelay, biggestdelayed)删除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 . txt# #
/usr/local/MATLAB/MATLAB_Runtime /
参数是否指示的位置MATLAB运行时.<版本>
界面显示如下:
平均到达延迟= 7.1201最大延迟= 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 / <用户名> /结果”) >>读取(ds)
您可能需要设置环境变量HADOOP_PREFIX
使用函数setenv
方法,以防止无法查看结果数据存储
函数。
请注意
如果要部署的高数组应用程序是MATLAB函数,而不是MATLAB脚本,请使用以下执行语法:
$ ./run_.sh \ \ [Spark参数]\[应用程序参数]
$ ./run_myTallApp.sh \ /usr/local/ matlab / matlab_runtime /v92 \ yarn-client \ hdfs://host:54310/user//datasets/ airlinsmalll .csv \ hdfs://host:54310/user/ /result . txt \ hdfs://host:54310/user/ /result . txt \
代码: