Запуск простого Spark приложения на YARN
Для примера возмём это простое Spark приложение реализованное на Scala и Java: https://github.com/sryza/simplesparkapp
Делает оно следующее:
Вот код на Scala:
Перед запуском Spark на Yarn-e приложения нужно создать с исходников jar файл. Код Scala помещаем в директории src/main/scala а код Java помещаем в директории src/main/java. Далее директории создаются по аналогу названия пакета. К примеру название пакета "com.cloudera.sparkwordcount" означает, что файл "SparkWordCount.scala" лежит в директории src/main/scala/com/cloudera/sparkwordcount а файл "JavaWordCount.java" лежит в директории src/main/java/com/cloudera/sparkwordcount.
Jar файл создаём следующей командой:
У ползьователя должны быть права на создания папок. Jar файл будет создан в директории target
Запуск самого приложения нужно осуществлять от пользователя, который имеет право на запись в hdfs директорию "/user/spark/data/":
Делает оно следующее:
- Читает данные с текстового файла
- Считает кол. вхождений каждого слова
- Фильтрует слова, которые попадалсь мение 1 милиона раз
- Для оставшегося сета считает кол. вхождений каждой буквы
Вот код на Scala:
package com.cloudera.sparkwordcount
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SparkWordCount {
def main(args: Array[String]) {
val sc = new SparkContext(new SparkConf().setAppName("Spark Count"))
val threshold = args(1).toInt
// split each document into words
val tokenized = sc.textFile(args(0)).flatMap(_.split(" "))
// count the occurrence of each word
val wordCounts = tokenized.map((_, 1)).reduceByKey(_ + _)
// filter out words with less than threshold occurrences
val filtered = wordCounts.filter(_._2 >= threshold)
// count characters
val charCounts = filtered.flatMap(_._1.toCharArray).map((_, 1)).reduceByKey(_ + _)
System.out.println(charCounts.collect().mkString(", "))
}
}
Перед запуском Spark на Yarn-e приложения нужно создать с исходников jar файл. Код Scala помещаем в директории src/main/scala а код Java помещаем в директории src/main/java. Далее директории создаются по аналогу названия пакета. К примеру название пакета "com.cloudera.sparkwordcount" означает, что файл "SparkWordCount.scala" лежит в директории src/main/scala/com/cloudera/sparkwordcount а файл "JavaWordCount.java" лежит в директории src/main/java/com/cloudera/sparkwordcount.
Jar файл создаём следующей командой:
mvn package
У ползьователя должны быть права на создания папок. Jar файл будет создан в директории target
Запуск самого приложения нужно осуществлять от пользователя, который имеет право на запись в hdfs директорию "/user/spark/data/":
spark-submit --class com.cloudera.sparkwordcount.SparkWordCount --master yarn target/sparkwordcount-0.0.1-SNAPSHOT.jar /user/spark/data/inputfile.txt 2
Коментарі
Дописати коментар