我在8核机器上以本地模式运行Spark作业。它有一个本地SSD和64GB的RAM。 HDFS在同一台机器上以伪分布式模式运行。运行以下作业时,我无法获得CPU利用率以超过单个核心。 RAM使用率保持在10GB以下。环回接口最大可达333MB / s。无论哪种方式,磁盘IO通常低于30MB / s。如何编写此代码以更好地利用我的硬件资源?
object FilterProperty {
def main(args:Array[String]) {
val conf = new SparkConf()
.setAppName("Filter Claims Data for Property")
.setMaster("local")
.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")
.set("spark.cores.max", "16")
conf.registerKryoClasses(Array(classOf[JsObject]))
val sc = new SparkContext(conf)
val filtered = sc.textFile("hdfs://localhost:9000/user/kevin/intermediate/claims.json", 48)
.filter(s => s != "")
.map(s => Json.parse(s).as[JsObject])
.filter(Util.property_filter)
filtered.saveAsTextFile("hdfs://localhost:9000/user/kevin/intermediate/property_claims.json" + fn)
sc.stop()
}
}
答案 0 :(得分:2)
您应该更改此行代码
.setMaster("local")
到
.setMaster("local[*]")
表示在计算机上使用尽可能多的线程。或者您可以设置一个数字而不是*
,这意味着使用该数量的线程。