我正在尝试设置一个环境来支持群集上的探索性数据分析.根据对该项目的初步调查,我的目标是使用Scala/Spark和Amazon EMR来配置群集.
目前我只想尝试一些基本的例子,以确认我已经正确配置了所有内容.我遇到的问题是我没有看到我期望从亚马逊机器实例上的Atlas BLAS库获得的性能.
下面是我简单基准测试的代码片段.它只是一个方形矩阵乘法,然后是短脂肪乘法和高瘦乘法,以产生一个可以打印的小矩阵(我想确保Scala不会因为懒惰的评估而跳过计算的任何部分).
我正在使用Breeze进行线性代数库和netlib-java来拉入BLAS/LAPACK的本地本机库
import breeze.linalg.{DenseMatrix, DenseVector}
import org.apache.spark.annotation.DeveloperApi
import org.apache.spark.rdd.RDD
import org.apache.spark.{Partition, SparkContext, TaskContext}
import org.apache.spark.SparkConf
import com.github.fommil.netlib.BLAS.{getInstance => blas}
import scala.reflect.ClassTag
object App {
def NaiveMultiplication(n: Int) : Unit = {
val vl = java.text.NumberFormat.getIntegerInstance.format(n)
println(f"Naive Multipication with vector length " + vl)
println(blas.getClass().getName())
val sm: DenseMatrix[Double] = DenseMatrix.rand(n, n)
val a: DenseMatrix[Double] = DenseMatrix.rand(2,n)
val b: DenseMatrix[Double] = DenseMatrix.rand(n,3)
val c: DenseMatrix[Double] = sm * sm
val cNormal: DenseMatrix[Double] = (a * c) * b …Run Code Online (Sandbox Code Playgroud) 我正在构建一个需要从S3加载数据集的应用程序.功能正常,但性能出乎意料地慢.
数据集采用CSV格式.每个文件中大约有7M条记录(行),每个文件大小为600-700MB.
val spark = SparkSession
.builder()
.appName("MyApp")
.getOrCreate()
val df = spark
.read
.option("header", "true")
.option("inferSchema", "true")
.csv(inFileName:_*)
// inFileName is a list that current contains 2 file names
// eg. s3://mybucket/myfile1.csv
val r = df.rdd.flatMap{ row =>
/*
* Discard poorly formated input records
*/
try {
totalRecords.add(1)
// this extracts several columns from the dataset
// each tuple of indexColProc specifies the index of the column to
// select from the input row, and a function to …Run Code Online (Sandbox Code Playgroud) 我需要运行一个需要GUI界面来启动和配置的应用程序.我还需要能够在亚马逊的EC2服务和EMR服务上运行此应用程序.EMR要求意味着它必须在亚马逊的Linux AMI上运行.
经过广泛搜索后,我一直无法找到任何现成的解决方案,特别是要求在亚马逊的AMI上运行.最接近的匹配和最常引用的解决方案在这里.不幸的是,它是在RHEL6实例上开发的,该实例与亚马逊的AMI有足够的不同,该解决方案不起作用.
我在下面发布我的解决方案.希望它可以节省一些其他人用于提出正确配方所需的数小时实验.
amazon-ec2 ×2
amazon-emr ×2
apache-spark ×2
amazon-s3 ×1
emr ×1
jblas ×1
scala-breeze ×1
xfce ×1