대용량의 데이터 수집이 하둡또는 카산드라에서 이루어지고

Spark의 분석엔진을 사용하여 검색 API를 제공한다고 가정해봅시다.

Spark와 하둡은 웹전용 플랫폼이 아니기때문에 서비스 API를 제공하기에는

한계가 있다고 합시다. 이때 웹을 어떻게 상호운영을 하면 좋은지 몇가지 선택지를 살펴보겠습니다.

이 선택전략의 포인트는 익숙한 웹프레임워크를 선택하고 Spark엔진을 활용하는것입니다.


PlayFrameWork With Spark

Palyframework는 스칼라혹은 자바기반으로 작성이되는 풀스택 웹프레임워크 입니다.

Scala 코드를 바로 사용할수 있기때문에 Spark와의 운영시 가장 이질성없이 상호운영가능합니다.

물론 Java에서 잘나가고있는 Spring을 선택하고 Java코드를 통해 Spark 이용이가능하지만

데이터분석의 장점인, 쉘을 통해  런타임으로 수정하고 확인하고 테스트완료된 코드를 그대로 서비로 코드로 사용한다란 중요한 방법을

사용할수 없습니다. Spark가 Java언어를 지원하지만 Java는 컴파일언어이기때문에 쉘을 지원하지 않기떄문입니다.

libraryDependencies ++= Seq(
 "org.apache.spark" %% "spark-core" % "0.9.1",
 "com.typesafe.akka" %% "akka-actor" % "2.2.3",
 "com.typesafe.akka" %% "akka-slf4j" % "2.2.3"
)


package controllers
 
import play.api._
import play.api.mvc._
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
 
object Application extends Controller {
 
 def index = Action {
 val logFile = "public/data/README.md" // Should be some file on your system
 val sc = new SparkContext("local", "Application", "/path/to/spark-0.9.0-incubating", List("target/scala-2.10/playsparkapp_2.10-1.0-SNAPSHOT.jar"))
 val logData = sc.textFile(logFile, 2).cache()
 val numSparks = logData.filter(line => line.contains("Spark")).count()
 Ok(views.html.index("Lines with Spark: " + numSparks))
 }
}



Python Danggo With Park

Spark에서 파이썬 모듈을 제공 해주기때문에 Python에서 활용가능한 웹프레임워크를 선택해주면 됩니다.

from pyspark_cassandra import CassandraSparkContext

from pyspark import SparkContext, SparkConf

from pyspark.sql import SQLContext

import socket

import os
class SparkCassandra:

    appNameCassandra = "WikiOlapCassandra"

    appNameSQL = "WikiOlapSQL"

    master = "spark://"+socket.gethostname()+":7077"
    confCassandra = SparkConf() \

        .setAppName(appNameCassandra) \

        .setMaster(master) \

        .set("spark.cassandra.connection.host", os.environ['CASSANDRA_PORT_9042_TCP_ADDR'])

    sc = CassandraSparkContext(conf=confCassandra)

    sqlContext = SQLContext(sc)


Asp.net(IronPython) With Spark 

약간 변칙적인 조합이지만, IronPython을 이용하면  IronPython 내부에서 닷넷코드를 실행하고

그반대로도 가능합니다. IronPython이 MS 오픈진영에서 파이썬 연동모듈로 지원을 해주기 때문에

선택하였으며, Spark 모듈은 py으로 작성하고  그외 코드처리는 c#으로 진행하여 asp.net을 활용하는

방식입니다.  

using System;
using IronPython.Hosting;
using Microsoft.Scripting.Hosting;

public class dynamic_demo
{
    static void Main()
    {
        var ipy = Python.CreateRuntime();
        dynamic test = ipy.UseFile("Test.py");
        test.Simple();
    }
}








  • No labels