2015-06-05 7 views
1

Я совершенно новый Спарк и искал некоторые руководства :-)Java - Apache Spark связи

Каков типичный способ, в котором приложение Java MVC взаимодействует с искрой? Чтобы упростить, скажем, я хочу подсчитать слова в определенном файле, чье имя предоставляется с помощью запроса GET на мой сервер.

Мой первоначальный подход состоял в том, чтобы открыть контекст и реализовать преобразования/вычисления в классе внутри моего приложения MVC. Это означает, что во время выполнения я должен был бы придумать uber jar из искрового ядра. Проблема заключается в том, что:

  • убер веса баночки 80Mb
  • Я сталкиваюсь с той же проблемой (akka.version), чем в: apache spark: akka version error by build jar with all dependencies
  • я могу идти с абажуром, чтобы решить эту проблему, но есть чувствуя, что это не путь.

Возможно, «предоставленная» область в Maven поможет мне, но я использую муравей.

Если моя заявка, как предлагается на странице, уже имеет одну банку с реализацией (без каких-либо искровых библиотек) и использует искру-submit каждый раз, когда я получаю запрос. Думаю, это оставит результаты где-то.

Я пропустил какой-либо подход в середине дороги?

ответ

2

Использование искра-подача каждый раз имеет большой вес, я бы рекомендовал использовать длинный контекст Spark. Я думаю, что вариант «середины дороги», который вы, , может найти, - это ваша работа, использующая что-то вроде ядра IBM Spark, Zepplin или Spark Job Server от Ooyala.

+0

Спасибо. Я думаю, что мы собираемся использовать Spring XD для интеграции с Spark и другими технологиями. –

2

Существует хорошая практика использования промежуточного сервиса, развернутого на вершине Spark, который управляет его контекстами, ошибками с ошибками работы и множеством других вещей, которые следует учитывать.

Я бы порекомендовал Mist. Он реализует Spark как услугу и создает единый уровень API для создания корпоративных решений и сервисов поверх озера Big Data.

Mist поддерживает выполнение заданий Scala и Python.

Быстрый старт следующее:

  1. Добавить Mist обертку в искру работы:
    Scala пример:

    object SimpleContext extends MistJob { 
        override def doStuff(context: SparkContext, parameters: Map[String, Any]): Map[String, Any] = { 
         val numbers: List[BigInt] = parameters("digits").asInstanceOf[List[BigInt]] 
         val rdd = context.parallelize(numbers) 
         Map("result" -> rdd.map(x => x * 2).collect()) 
        } 
    } 
    

    Python Пример:

    import mist 
    class MyJob: 
        def __init__(self, job): 
         job.sendResult(self.doStuff(job)) 
        def doStuff(self, job): 
         val = job.parameters.values() 
         list = val.head() 
         size = list.size() 
         pylist = [] 
         count = 0 
         while count < size: 
          pylist.append(list.head()) 
          count = count + 1 
          list = list.tail() 
         rdd = job.sc.parallelize(pylist) 
         result = rdd.map(lambda s: 2 * s).collect() 
         return result 
    
    if __name__ == "__main__": 
        job = MyJob(mist.Job()) 
    
  2. Run Mist обслуживание:

    Постройте Mist

    git clone https://github.com/hydrospheredata/mist.git 
    cd mist 
    ./sbt/sbt -DsparkVersion=1.5.2 assembly # change version according to your installed spark 
    

    Создайте конфигурационный файл

    mist.spark.master = "local[*]" 
    mist.settings.threadNumber = 16 
    
    mist.http.on = true 
    mist.http.host = "0.0.0.0" 
    mist.http.port = 2003 
    
    mist.mqtt.on = false 
    
    mist.recovery.on = false 
    
    mist.contextDefaults.timeout = 100 days 
    mist.contextDefaults.disposable = false 
    
    mist.contextDefaults.sparkConf = { 
        spark.default.parallelism = 128 
        spark.driver.memory = "10g" 
        spark.scheduler.mode = "FAIR" 
    } 
    

    Run

    spark-submit --class io.hydrosphere.mist.Mist \ 
           --driver-java-options "-Dconfig.file=/path/to/application.conf" \ target/scala-2.10/mist-assembly-0.2.0.jar 
    
  3. Try завиток из терминала:

    curl --header "Content-Type: application/json" -X POST http://192.168.10.33:2003/jobs --data '{"jarPath":"/vagrant/examples/target/scala-2.10/mist_examples_2.10-0.2.0.jar", "className":"SimpleContext$","parameters":{"digits":[1,2,3,4,5,6,7,8,9,0]}, "external_id":"12345678","name":"foo"}' 
    
Смежные вопросы