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

  1. 2015/03/01 용비 (Chapter 2) 10. Python and Scala Shell
  2. 2015/02/17 용비 (Chapter 2) 09. Downloading Spark
  3. 2015/02/10 용비 사람의 양면성
  4. 2015/01/30 용비 (Chapter 1) 08. Who, What
  5. 2015/01/30 용비 (Chapter 1) 07. Cluster Manager
Introduction to Spark's Python and Scala Shells

Spark는 즉각적인 Data Analysis를 쉽게 할 수 있는 interactive shell을 제공한다. Spark shell R, Python, Scala와 같은 다른 형태의 shell이나 Bash, windows command prompt와 같은 OS시스템의 shell을 사용해본 경험이 있다면 쉽게 익숙해질 수 있을 것이다.

 

하지만, 하나의 machine에 있는 disk memory에 있는 데이터를 취급하는 대부분의 다른 shell들과는 다르게 Spark shell은 여러 machine disk memory에 분산되어 있는 데이터로 작업할 수 있도록 한다. 그리고 SparkData 처리 process를 자동으로 분산처리하고 보호한다.

 

Spark memory Data load할 수 있기 때문에, 많은 분산 컴퓨팅 환경에서 수초안에 - 심지어 수십대의 machine에서 테라바이트 단위의 data를 처리하는 경우에도 - 처리를 완료할 수 있다. 그러므로 shell을 이용해 sort of iterative, ad-hoc, exploratory analysis를 처리하는 경우에 Spark를 이용해서 처리하는 것이 적합하다. Spark Cluster에 연결하는 것을 지원하기 위해 많이 사용하는 Python, Scala shell 모두 지원한다.

 

[NOTE]

이 책의 대부분의 코드는 Spark에서 지원하는 모든 language로 이루어져 있지만, interactive shell Python Scala만 이용가능하다. Shell API를 배우는데 아주 유용하기 때문에 Java 개발자들도 Python이나 Scala 언어로 모든 example을 사용해 보기를 추천한다. API는 모든 언어에서 동일하다.

 

Spark's Shell power를 설명하는 가장 쉬운 방법은 간단한 data analysis에 사용해 보는 것이다. 공식적인 Spark document에 있는 Quick Start Guide에 있는 example을 돌려보자.

 

첫번째로 Spark's Shell Open한다.

Python version Spark Shell open하기 위해서는(우리는 PySpark Shell이라고도 부른다.) Spark directory로 들어가서 다음을 치면 된다.

 

bin/pyspark (윈도우 시스템에서는 bin\pyspark)

 

Scala versionShell open하기 위해서는 다음을 친다.

 

bin/spark-shell

 

Shell prompt는 몇 초 안에 나타날 것이다. Shell을 시작할 때, 많은 log message를 볼 수 있을 것이다. Log output을 깨끗하게 하기 위해서 [Enter] 키보드를 치면 shell prompt를 볼 수 있다. PySpark Shell을 실행하고 난 후의 화면은 다음 그림과 같다.

사용자 삽입 이미지

[The PySpark Shell With Default Logging Output]


Shell 내에 주의를 산만하게 하는 화면에 출력된 logging statements를 볼 수 있을 것이다. Logging에 대한 길이를 조절할 수 있다. 이렇게 하기 위해서 conf directory log4j.properties 파일을 만들수 있다. Spark 개발자에게는 이미 log4j.properties.template 파일이 포함되어 있다. Logging을 덜 나오게 하려면 conf/log4j.properties.template 파일을 conf/log4j.properties 파일로 복사하고 다음 라인을 찾는다.

 

log4j.rootCategory=INFO, console

 

다음과 같이 변경하여 WARN에 대한 message만 보도록 log level을 낮출 수 있다.

 

log4j.rootCategory=WARN, console

 

Shell을 다시 open했을 때, 이제는 output이 다음과 같이 나타날 것이다.

사용자 삽입 이미지

[The PySpark Shell With Less Logging Output]


[IPYTHON 사용]

Ipython은 많은 사용자들이 애용하고 있는 tab 키보드를 치면 이후 문장을 자동으로 완성시켜주는  Python Shell의 확장판이다. 설치에 대한 안내는 http://ipython.org 에서 찾아볼 수 있다. 변수 1 IPYTHON 환경 설정을 해줌으로써 Spark에서 Ipython을 사용할 수 있다.

 

IPYTHON=1 ./bin/pyspark

 

Web 브라우저 버전의 Ipython Notebook을 사용하기 위해서는 다음을 사용하라.

 

IPYTHON_OPTS="notebook" ./bin/pyspark

 

윈도우 시스템에서는 환경변수 설정을 다음과 같이 하면 된다.

 

set IPYTHON=1
bin\pyspark

 

우리는 Spark를 이용해 Cluster 환경에서 자동으로 분산되어 있는 collection으로부터 계산하는 operation을 수행해 볼 것이다. 이러한 collection RDD (Resilient Distributed Dataset)라고 부른다. RDD Spark에서 분산되어 있는Data와 계산에 대한 가장 기본적인 추상화 계층이다.

 

RDD에 대해서 더 자세히 말하기 전에, local text file로 아래와 같이 ad-hoc data analysis하기 위한 하나의 shell을 간단히 작성해 보자.

 

[Python line count]

>>> lines = sc.textFile("README.md") # Create an RDD called lines

>>> lines.count() # Count the number of items in this RDD

127

>>> lines.first() # First item in this RDD, i.e. first line of README.md

u'# Apache Spark'

 

[Scala line count]

scala> val lines = sc.textFile("README.md") // Create an RDD called lines

lines: spark.RDD[String] = MappedRDD[...]

scala> lines.count() // Count the number of items in this RDD

res0: Long = 127

scala> lines.first() // First item in this RDD, i.e. first line of README.md

res1: String = # Apache Spark

 

Shell에서 빠져 나오려면 Ctrl+D를 누르면 빠져나올 수 있다.

 

위의 예에서, lines라고 불리는 변수는 RDD이고 text file로부터 local machine에 생성된다. 우리는 RDD 상에서 dataset의 구성요소 수를 세거나 (여기서는 text file 내의 line ), 첫번째 라인을 출력하는 것과 같은 여러 병렬 연산들을 수행할 수 있다. 우리는 다음 장에서 RDD에 대해서 더 깊이 다룰 것이다. 하지만, 더 나아가기 전에 Spark의 기본적인 개념들에 대해서 설명하는 시간을 갖도록 하자.

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

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

(Chapter 2) 09. Downloading Spark

Spark 2015/02/17 13:27 용비

Chapter 2. Downloading and Getting Started


Spark 다운로드하고 하나의 컴퓨터에서 single mode 실행해보자. Data Scientist Engineer 포함해 Spark 새로 사용하는 사람이라면 누구나 알기 쉽게 썼다.


Spark Python, Java, Scala 사용할 있다. 전문 프로그래머일 필요는 없지만, 최소한 한가지 언어의 기본 문법에 대해서 익숙한 사용자라는 것을 가정하고 설명할 것이다. 가능한 모든 언어로 만들어진 예제가 포함되어 있다.


Spark 자체는 Scala 개발했고, JVM상에서 돌아간다. 랩탑이나 Cluster에서 Spark 실행하기 위해서는 Java 6 이상이 설치되어 있어야 한다. Python API 사용하고 싶다면, Python Interpretor 2.6 이상이 필요하다. 아직 Spark Python 3에서는 동작하지 않는다.


Downloading Spark


Spark 사용하기 위한 첫번째 단계는 Spark 다운로드 받고, 사용할 있는 형태로 압축을 푸는 것이다. 가장 최근에 Release precompile Spark 다운로드하는 것부터 시작해 보자.

http://spark.apache.org/download.html 에서 Pre-Built Packages -> For Hadoop 1 (HDP1, CDH3) -> direct file download 클릭한다. Spark-1.0.0-bin-hadoop.tgz 파일을 다운로드 받을 있다.

다른 Hadoop version에서 Spark 사용하고 싶다면 다운로드 페이지에서 다운 받을 있지만, 파일 이름이 약간 다르다. Source로부터 직접 Build하여 사용할 수도 있는데, 최종 소스 코드는 다음 URL에서 다운로드 받을 있다. http://github.com/apache/spark.


(Mac OS X 포함하여 대부분의 Unix, Linux 계열에서는 command-line에서 tar 파일 압축 해제 명령어로 압축을 있다. 하지만, tar command 설치되어 있지 않은 Windows 같은 시스템에서는 tar 압축을 해제할 있는 무료 (7-Zip) 다운로드 받아서 사용할 있다.)


, 이제 Spark 다운로드 받았으니 압축을 해제하고 Spark Default 버전이 어떻게 생겼는지 알아보자. 가장 먼저 Spark 다운로드 받은 폴더로 이동하고, 다운로드 받은 파일 압축을 풀어보자.


cd ~

tar -xf spark-1.0.0-bin-hadoop1.tgz

cd spark-1.0.0-bin-hadoop1

ls


위의 tar command-line에서 x flag 압축 해제를 의미하고, f 압축 해제할 파일명을 의미한다. ls command 압축이 풀린 Spark 폴더의 내용을 보여준다. 압축이 풀린 폴더에 있는 주요 파일들은 다음과 같다.


README.md - Getting Started with Spark 대한 간단한 내용이 담겨져 있다.

bin - 실행 파일들이 담겨져 있는 폴더이다. Spark 상호동작할 있는 spark-shell 폴더에 위치한다.

core, streaming, python - Spark 프로젝트의 주요 컴포넌트에 대한 소스코드들이 있는 곳이다.

examples - Spark API 대해 사용법과 작동하는 원리를 배울 있는 Spark standalone job 대한 예제 코드들이 있다.


Spark 프로젝트에 있는 수많은 폴더와 파일들 때문에 걱정할 필요는 없다. 이후에 대부분의 내용을 다룰 것이다. 지금은 Spark Python Shell, Scala Shell 대해서 깊이 들여다 보자. Spark 간단한 example 돌려볼 것이다. 그리고, 직접 작성한 코드를 컴파일하고 간단한 Spark Job 구동시켜 것이다.


챕터에서는 Spark 분산 모드가 아닌, 하나의 machine에서 하나의 Spark 구동되는 "Local Mode" 돌려볼 것이다. Spark 다양한 mode 환경에서 실행될 있다. Local Mode 뿐만 아니라 Mesos, YARN, Spark 배포판에 포함되어 있는 Standalone Scheduler상에서 구동할 있다. 앞으로 다양한 환경에서 Spark Deploy하는 부분에 대해서 상세히 다룰 것이다.

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

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

사람의 양면성

Daily Memo 2015/02/10 21:11 용비
연초에 조금 한가할 때는 오픈소스에 대해서 체계적으로 정리하고, 내가 만들어보고 싶은 항목을 정해서 설계 및 프로그래밍을 하는 것으로 올해 동기부여를 해보자는 생각을 했다. 재미있을 것 같았다.

그런데 그렇게 계속 한가로울 것으로 여겼는데 불과 2주도 안 되어 다시 바빠지게 되었다. 통합 IoT 아키텍쳐를 그리고 있는데, 이게 생각보다 시간이 촉박해서 요즘 여유를 낼 수가 없다.

한가로울 때는 바쁜 일이 있을 때가 생각나서, 고민해 가며 새로운 동기부여를 할 수 있도록 시간을 투자해야 했는데, 막상 바빠지니 한가했을 때가 다시 그리워진다. 어쨌거나 회사에 다니고 있으므로 업무에 충실해야 하지만, 개인적으로 관심있는 영역에 대한 시간 투자도 하고 싶다.

상황이 이러니 뭔가를 하려고 하면, 이래저래 고민하게 된다.
아.... 정말 삶이란 쉽지 않다.
받은 트랙백이 없고, 댓글이 없습니다.

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

(Chapter 1) 08. Who, What

Spark 2015/01/30 18:30 용비

Who use Spark, and for What?

누가 사용하고 어디에 사용하는가?


Spark cluster computing 위한 범용 framework이기 때문에 넓은 application 사용할 있다. Preface에서 책의 독자로 Data Scientist, Engineer 부류를 제시했다. 부류를 면밀하게 살펴보고 그들이 어떻게 Spark 사용하는지 알아보자. 부류가 사용하는 case 간단하게 정리하자면 Data Science, Data Application으로 분류할 있다.


Data Science Task


Data Science 지난 동안 데이터 분석의 중심부에 위치해 왔다. 하지만, 표준화된 정의가 없기 때문에 여기서는 데이터를 분석하고 모델링하는 작업을 주로 하는 사람들을 Data Scientist라고 한다. Data Scientist SQL, 통계, 미래 예측 모델링 (machine learning), 일반적으로 Python, Matlab, R 같은 약간의 프로그래밍을 경험한 사람들이다. Data Scientist 때때로 Data wrangling이라고 부르는 분석할 있는 이해 가능한 데이터로 형식을 변환하는 기술에 대해서도 어느 정도 경험이 있는 사람들이다.


Data Scientist 어떤 질문에 대한 답을 구하기 위해서, 통찰력을 발견하기 위해서 데이터를 분석하는데 스킬을 사용한다. 종종 특별한 분석을 위해서, 때때로 interactive shell 사용하여 query 결과나, 최소한의 시간으로 구현한 코드의 결과를 본다.


Spark 속도와 simple API 이러한 목적에 빛을 발한다. 그리고 built-in 라이브러리를 통해서 다양한 알고리즘을 적용할 있다. 때로 최초로 사용할 , Data Scientist 작업이 제품화이거나 확장, 어려운 작업이거나 data processing application 튜닝하는 작업일 있다. Data Scientist 초기 연구가 상품 추천 시스템 생성을 이끄는 것일 수도 있다.


Data Processing Applications


Spark 사용하는 다른 경우는 Engineer 관점에서 사용하는 것일 있다. 경우 Data Processing Application 만들기 위해 Spark 사용하는 많은 분야의 소프트웨어 개발자를 생각해 있다. 이런 개발자들은 software engineering 대한 원리를 이해하고 있다. 캡슐화, 인터페이스 설계, OOP 대해서 알고 있을 것이다. 컴퓨터 공학을 전공하고, 소프트웨어 시스템 설계하고 빌드할 있는 능력이 있는 사람들이다.


Engineer 위해서 Spark Cluster상에서 application 병렬화하는 간단한 방법을 제공한다. 분산 프로그래밍에 대한 복잡한 면을 감추고, 네트워크 통신이나 fault tolerance 대해서도 신경 필요가 없다. 모니터링과 검사, application 튜닝을 쉽게 있고, common task 빠르게 구현할 있다. API 모듈화된 특성에 따라 재사용 가능한 라이브러리로 로컬에서 테스트도 쉽게 있다.


Spark 사용자들은 굉장히 다양한 기능들을 제공하기 때문에 data processing application 위해서 쉽게 배우고 사용할 있다.


Spark History


Hadoop 기반 MapReduce interative computing job 비효율적이라는 것을 알고, UC 버클리 RAD lab => AMLLab에서 연구 시작. 처음에는 interactive query, iterative algorithms 빨리 실행하고 in-memory storage 효율적인 fault recovery 지원하자는 아이디어에서 출발함.

처음에는 MapReduce보다 10-20 빠른 성능을 보임. 이후, machine learning 연구자들이 샌프란시스코 만의 교통 상황을 모니터링하고 예측하기 위해 Spark 사용하기 시작함. 지금은 굉장히 빠른 시간 내에 사용하는 조직이 늘었음.

2011년도에 AMLLab 연구자들이 Shark(Hive on Spark), Spark Streaming 개발하기 시작함.


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

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

(Chapter 1) 07. Cluster Manager

Spark 2015/01/30 15:57 용비

Cluster Managers


Spark 하나의 node에서 수천 개의 compute node 효율적으로 성능을 높일 있도록 설계되었다.


Flexibility 극대화하기 위하여 Spark Hadoop YARN, Apache Mesos, Standalone Scheduler 불리는 Spark 자체의 간단한 cluster manager 등과 같은 각양각색의 cluster manager 실행할 있다.


Spark 처음 설치했을 때는, Standalone Scheduler 쉽게 시작하는 방법을 제공한다. 반대로 이미 YARN이나 Mesos Cluster 설치되어 있다면, Spark 이미 설치되어 있는 환경 상에서 application 실행할 있도록 지원한다.

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

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