2015-05-06 6 views
0

Я запускаю работу Spark в локальном режиме на 8-ядерном компьютере. Он имеет локальный SSD и 64 ГБ оперативной памяти. HDFS запускается в псевдораспределенном режиме на одном компьютере. При выполнении нижеуказанного задания я не могу получить загрузку процессора, чтобы получить максимальную отдачу от одного ядра. Объем использования ОЗУ составляет менее 10 ГБ. Интерфейс loopback достигает около 333 МБ/с. Обычно диск IO составляет менее 30 МБ/с. Как я могу написать это, чтобы лучше использовать мои аппаратные ресурсы?Низкое использование ЦП в Spark

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() 
    } 
} 

ответ

2

Вы должны изменить эту строку кода

.setMaster("local") 

в

.setMaster("local[*]") 

, что означает, используя столько потоков, сколько ядер на вашей машине. Или вы можете установить число вместо *, что означает использование этого количества потоков.

+0

Удивительно, что дает мне до 90% общего использования. Благодарю. – Kevin