'분류 전체보기'에 해당되는 글 648건

  1. 2015/04/17 용비 맨몸으로 세상 앞에 서다(?)
  2. 2015/04/08 용비 (Chapter 3) 16. RDD Operations
  3. 2015/04/08 용비 (Chapter 3) 15. Creating RDDs
  4. 2015/04/08 용비 14. 결론
  5. 2015/04/08 용비 13. Step-11. Declarative configuration
삶이란 선택의 연속이다.
다른 이들과의 관계 속에서 이루어지기 때문에 그만큼 주변에 영향을 받기도 한다.

kt에서의 지난 3년간은 최대한 선택의 순간에 따른 고민,
주변 상황의 변화에 따라 내가 받는 영향을 최소화하기 위해서 "숨어 있으려고" 많은 노력을 했다.
그래서 나름 평온한 한 세월을 보냈다고 말할 수 있을 것 같다.

그런데, 오늘로 다시 세상 앞에 맨몸으로 나서게 되었다.
뒤에 숨어 있을 수 있는 상황을 만들어 주던 주변 환경이 없어졌기 때문이다.

그래서 이제 다시 몇가지 고민을 시작하게 된다.

- 앞으로 무엇을 할 것인가?
- 어떻게 해야 담당, 단 평가에 이바지를 하면서 보람찬(?) 일을 할 수 있을까?
- 앞으로 닥칠 많은 상황, 많은 커뮤니케이션에서 우리에게 유익한 최고, 최선의 결과를 얻으려면?

사람은 지난 후에 후회하는 경우가 많다.
나도 물론 그렇다.

- 조금 더 일찍 좀 더 적극적으로 움직이려고 할 걸 그랬나?
- 조금 더 내 시간을 투자해 미리 고민해 볼 것을 그랬나?

어찌 되었든, 작년 말 조직개편 이후로 앞으로 하게 될 것이라는 생각을 하긴 했지만,
시작은 우리 팀장님이 퇴사를 했는데, 팀은 없어지지 않아서 시작되었다.

아, 숨어 있고 싶은데 숨어 있을 데가 없다.
이제 내가 다른 사람들이 숨어 있을 수 있도록 해야 할 때인가?
하지만, 숨어서 하고 싶은 일들이 많은데....ㅠ.ㅠ

아, 심란하다, 심란해.
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/682

(Chapter 3) 16. RDD Operations

Spark 2015/04/08 13:21 용비

RDD 다음 2가지 형태의 Operation 지원한다.

  • Transformation
  • Action

Transformation map, filter 같은 새로운 RDD return하는 RDD상의 operation이다. Action driver program으로 결과를 return하거나 storage 결과를 write하고, count first 같은 연산을 시작하는 operation이다. Spark에서는 transformation action 아주 다르게 취급한다. 따라서, 여러분이 수행하고자 하는 작업의 형태에 대해서 이해하는 것이 아주 중요하다. 만약 여러분이 여전히 주어진 기능에 대해서 transformation인지, action인지 혼란스럽다면 return 타입을 통해 있다. Transformation 새로운 RDD return하지만, action 다른 data type return한다.


Transformations


Transformation 새로운 RDD return하는 operation이다. Lazy evaluation section에서 논의되겠지만, transformed RDD 단지 여러분이 action에서 사용할 , 느긋하게(lazily) 계산된다. 많은 transformation(변형) element측면에서 일어난다. Transformation 한번에 하나의 element상에서 동작하지만, 모든 transformation 그런 것은 아니다.


예를 들면, 수많은 메시지를 담고 있는 log.txt라는 로그 파일을 가지고 있다고 생각해보자. 그리고 중에서 error 메시지만을 추출하고 싶다. 여기에 앞에서 보았던 filter transformation 사용할 있다. Spark 3가지 언어로 filter API 살펴보면 다음과 같다.


Example 3-8. Python filter example

inputRDD = sc.textFile("log.txt")

errorsRDD = inputRDD.filter(lambda x:"error" in x)


Example 3-9. Scala filter example

var inputRDD = sc.textFile("log.txt")

var errorsRDD = inputRDD.filter(line => line.contains("error"))


Example 3-10. Java filter example

JavaRDD<String> inputRDD = sc.textFile("log.txt");

JavaRDD<String> errorsRDD = inputRDD.filter(

    new Function<String, Boolean>() {

         public Boolean call (String x) {return x.contains("error");}

    }

);


Filter operation 기존의 inputRDD 대한 돌연변이가 아님에 주의하라. 전혀 새로운 RDD 대한 포인터를 return한다. inputRDD 프로그램내에서-예를 들어, 다른 단어들을 검색하는데-나중에 재사용할 있다. Warning이라는 단어를 검색하는데 inputRDD 사용해보자. , 새로운 transformation union 사용하여 error warning 단어를 포함하고 있는 모든 line 출력할 있다. 이에 대한 Python code 있지만, union() function 3가지 언어에서 모두 동일하다.


Example 3-11. Python union example

errorsRDD = inputRDD.filter(lambda x:"error" in x)

warningsRDD = inputRDD.filter(lambda x:"warning" in x)

badLinesRDD = errorsRDD.union(warningsRDD)


union filter와는 약간 다르다. 하나의 RDD 아니라 2개의 RDD 가지고 동작하기 때문이다. Transformation 복수 개의 input RDD 가지고 동작할 있다.


끝으로, transformation 사용하여 서로 다른 새로운 RDD 이끌어낼 , Spark 다른 RDD 사이의 dependency 집합을 추적하고 유지한다. 그것을 lineage graph라고 한다. Spark 요구에 맞춰 RDD 계산할 , 정보를 이용하고 Persistent RDD 일부 정보가 유실되었을 , 이를 이용해 복구한다.



<Figure 3-1. RDD lineage graph created during log analysis>

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/681

(Chapter 3) 15. Creating RDDs

Spark 2015/04/08 13:20 용비

Spark RDD 생성하는 다음 2가지 방법을 제공한다.

  • Loading external dataset
  • Parallelizing collection in driver program

RDD 생성하기 위한 가장 간단한 방법은 memory 있는 collection 가져다가 parallelize method 통해 SparkContext 전달하는 방법이다. 방법은 Spark 공부할 , 아주 유용하다. Shell에서 간단하게 RDD 빠르게 생성하여 여러 operation 수행할 있기 때문이다. 그러나, prototyping이나 testing 목적이 아니라면, 하나의 machine에서 메모리에 전체 dataset 가지고 있는 형태이므로 폭넓게 사용되는 것이 아니라는 점에 주의하라.


(Example 3-2. Python Parallelize Example)

lines = sc.parallelize(["pandas", "I like pandas"])


(Example 3-3. Scala Parallelize Example)

var lines = sc.parallelize(List("pandas", "I like pandas"))


(Example 3-4. Java Parallelize Example)

JavaRDD<String> lines = sc.parallelize(Array.asList("pandas", "I like pandas"));


RDD 생성하는 일반적인 방법은 external storage로부터 data loading하는 것이다. External dataset loading하는 것은 Chapter 5에서 상세히 다룰 것이다. 그러나 우리는 이미 text file로부터 SparkContext.textFile(…) 이용하여 String 포함하는 RDD 생성하기 위해 data loading하는 것을 이미 살펴보았다.


(Example 3-5. Python textFile Example)

lines = sc.textFile("/path/to/README.md")


(Example 3-6. Scala textFile Example)

var lines = sc.textFile("/path/to/README.md")


(Example 3-7. Java textFile Example)

JavaRDD<String> lines = sc.textFile("/path/to/README.md");

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/680

14. 결론

Infinispan/01. Embedded Guide 2015/04/08 13:14 용비
이제 우리는 tutorial 마지막에 도달했다.
여러분은 어떻게 여러분의 application infinispan embedd하여 단순한 data cache 뿐만 아니라, 분산 처리와 clustering 구성하여 사용할 있는지를 배웠다.

Infinispan 다른 많은 흥미로운 기능들을 제공한다.
기능들을 배우려면 폭넓게 다루고 있는 documentation (http://infinispan.org/documentation) 으로 건너가면 자세히 배울 있다.

(현재 7.1.1.Final 버전에서는 Replication Mode로 Clustering 설정하는 부분에 버그가 있다.
Map/Reduce와 비슷한 기능을 제공함으로 분산 환경에서 데이터 분석 기능까지 일부 처리할 수 있도록 아키텍쳐가 변경된 것 같은데, 단순히 메모리 그리드로 사용하기 이해서는 6.0.2.Final만으로도 충분하리라 생각한다.)
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/679

지금까지 우리는 programmatic API 통해서 infinispan 설정하는 것에 대해서 알아보았다. 그러나 code에서 configuration 분리하여 구성할 있다. 이런 목적으로 우리는 declarative configuration 사용할 있다. Infinispan 모든 항목들은 external XML file 사용하여 설정할 있다. 무엇보다도 XML format으로 configuration 변환해 보자.


<?xml version="1.0" encoding="UTF-8"?>

<infinispan xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:infinispan:config:7.1 http://www.infinispan.org/schemas/infinispan-config-7.1.xsd" xmlns="urn:infinispan:config:7.1">

<cache-container default-cache="default">

<transport cluster="WeatherApp"/>

<distributed-cache name="default" mode="SYNC">

<expiration lifespan="5000"/>

<groups enabled="true">

<grouper class="org.infinispan.tutorial.embedded.LocationWeather$LocationGrouper"/>

</groups>

</distributed-cache>

</cache-container>

</infinispan>


이 파일을 maven src/main/resources 폴더에 위치시키면, classpath에서 사용할 있다. 그리고 DefaultCacheManager 설정으로 다음과 같이 사용할 있다.


cacheManager = new DefaultCacheManager(WeatherApp.class.getResourceAsStream("/weatherapp-infinispan.xml"));


이제 코드를 실행해 보자.


git checkout -f step-11

mvn clean package exec:exec # from terminal 1

mvn exec:exec # from terminal 2


우리가 무엇을 기대했건 간에, 출력 결과는 이전과 같을 것이다.

받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://www.yongbi.net/rss/response/678