윈도우 10 환경에서 PostgreSQL 12 버전을 설치해보도록 하겠습니다.

  이 포스트를 작성하는 시점에 PostgreSQL 13 Beta 2 버전이 릴리즈(2020. 06.25)되었는데요. 아직은 베타 버전이므로 안정성을 생각해서 하위 버전인 12 버전을 다운로드 받아 설치하겠습니다.

 

1. 설치 파일 다운로드

* URL : https://www.enterprisedb.com/downloads/postgres-postgresql-downloads

 

PostgreSQL Database Download

Please Note: EDB no longer provides Linux installers for PostgreSQL 11 and later versions, and users are encouraged to use the platform-native packages. Version 10.x and below will be supported until their end of life.

www.enterprisedb.com

 

  위 URL에 접속하면 아래와 같은 다운로드 페이지를 확인하실 수 있습니다.
  아래 페이지에서 12.3 버전, WIndows x86-64의 'Download' 버튼을 클릭하면 설치 파일을 다운로드 받을 수 있습니다.

 

  만약, 소스 빌드를 통해 PostgreSQL을 설치하거나, 전문가용 설치 파일을 다운로드 하고자하는 경우에는 하단의 URL에 접속하여 파일을 다운로드 하셔야 합니다.

  > URL : https://www.postgresql.org/download/

 

 

 

2. PostgreSQL 설치

  다운로드가 완료된 설치 파일을 실행합니다.

 

  설치 파일을 실행하면 아래와 같이 Welcome 메세지를 확인하실 수 있습니다.

  'Next' 버튼을 클릭하여 다음 단계로 넘어갑니다.

 

  PostgreSQL을 설치할 경로를 입력 후 'Next' 버튼을 클릭합니다.

 

  설치할 컴포넌트를 선택하는 화면입니다.

  PostgreSQL 서버 외에 아래 추가적인 컴포넌트를 설치할 수 있습니다.

  - pgAdmin : 데이터베이스를 관리하고 개발하기 위한 그래픽 기반 툴.
  - Stack Builder : 추가로 설치해서 사용 가능한 툴과 드라이버를 관리하는 패키지 매니저. 
                       예) 관리, 통합, 마이그레이션, 복제, 공간 연산, 커넥터 등.
  - Command Line Tools : SQL Shell (psql)

  설치할 컴포넌트 선택이 완료되면 'Next' 버튼을 클릭합니다.

 

  데이터 파일을 저장할 경로를 설정 후 'Next' 버튼을 클릭합니다.

 

  데이터베이스 Superuser 계정의 비밀번호와 비밀번호 확인 값을 입력 후 'Next' 버튼을 클릭합니다.

 

  서버의 기본 포트 번호를 설정합니다. 기본 값은 5432입니다.

  포트 설정 후 'Next' 버튼을 클릭하면 Locale 설정 화면을 볼 수 있습니다.

  Locale을 [Default locale]로 선택하면 OS에 설정된 locale 정보를 따라가게 됩니다.

  'Next' 버튼을 클릭하면
  지금까지 설정한 설치 정보를 최종적으로 확인할 수 있습니다.

  설치 정보가 정상인지 확인했다면 'Next' 버튼을 클릭하여 설치를 시작합니다.

  설치가 시작되며, Progress bar를 통해 진행률을 확인하실 수 있습니다.

 

  설치가 정상적으로 완료되면 아래와 같은 다이얼로그를 확인하실 수 있습니다.

  설치 마법사가 종료된 후 Stack Builder를 실행하여 추가적인 드라이버나 툴을 설치하려면 위 화면 가운데의 체크 박스를 선택합니다.

  Stack Builder에 대해서는 별도의 포스트에서 언급할 계획이니, 여기서는 체크 박스를 해제하도록 하겠습니다.
  'Finish' 버튼을 클릭하면 PostgreSQL 설치가 마무리됩니다.

 

 

 

3. postgreSQL 실행

  PostgreSQL 설치 후 윈도우 시작 메뉴를 확인하면 아래와 같이 시작 메뉴가 생성된 것을 확인하실 수 있습니다.

 

  위 메뉴 중 pgAdmin을 이용해 데이터베이스에 접속해보도록 하겠습니다.

  pgAdmin을 실행하면 아래와 같이 웹브라우저에서 pgAdmin 웹페이지(기본 URL : http://127.0.0.1:59594/browser)를 확인하실 수 있습니다.

 

  설치시 설정한 super 사용자 계정 비밀번호를 입력 후 'OK' 버튼을 클릭합니다.

 

  비밀번호를 입력하여 로그인을 하면
  아래와 같이 접속된 서버 목록 및 서버 정보(데이터베이스, Role, 테이블스페이스 등)와 서버의 상태를 확인할 수 있는 대시보드를 보실 수 있습니다.

  

 

 

4. PostgreSQL 시작 및 중지

  윈도우윈도 환경에서의 PostgreSQL은 윈도우 서비스를 통해 서비스 시작/중지 작업을 진행할 수 있습니다.

  윈도우 시작 메뉴에서 서비스를 검색하거나 'services.msc'를 실행합니다.

  서비스 프로그램이 실행되면 오른쪽 서비스 목록 중에 'postgresql-x64-12'를 확인하실 수 있습니다.

 

  postgresql-x64-12를 선택 후 오른쪽 버튼을 클릭 후 나타난 팝업 메뉴 중 '속성'을 클릭하여 서비스 정보를 확인합니다.

  postgreSQL를 설치하면 기본적으로 서비스에 등록되며, 윈도우 가동 시 자동으로 서비스가 시작되게 설정되어 있습니다.
 postgreSQL을 종료하기 위해서는 위 속성 다이얼로그 내 '중지' 버튼을 클릭하면 됩니다.

  postgreSQL 서비스가 중지되면 아래 '서비스 상태'가 '중지됨'으로 변경됩니다.  


  다시 서비스를 시작하기 위해서는 속성 다이얼로그 내 '시작' 버튼을 클릭하면 됩니다.

 postgreSQL 서비스가 정상적으로 가동되었다면 아래 다이얼로그처럼 '서비스 상태'가 '실행 중'으로 변경된 것을 확인하실 수 있습니다.

 

  postgreSQL의 시작과 중지 작업은 속성 다이얼로그 외에도
  아래 화면에 표시된 툴바나 목록 왼쪽의 메뉴를 통해서도 작업이 가능합니다.

 

 

 

 

 

'Database > PostgreSQL' 카테고리의 다른 글

PostgreSQL 기본 테스트 - psql  (0) 2020.07.03

  2010년에 처음 선 보인 Spark가 10주년이 되는 올해 6월 18일에 3.x 대 첫 버전인 3.0.0 릴리즈를 공개했습니다.

  Spark 3.0에서 기능 개선이 가장 많았던(top active component) 것은 Spark SQL인데요. TPC-DS 30TB 벤치마크 테스트에서 Spark 2.4 비해 2배 정도 빠른 성능을 보여줬다고 합니다.

  그 외 Spark 3.0의 주요 New feature는 아래와 같습니다.

  • adaptive query execution
  • dynamic partition pruning
  • ANSI SQL compliance
  • significant improvements in pandas APIs
  • new UI for structured streaming
  • up to 40x speedups for calling R user-defined functions
  • accelerator-aware scheduler

 

  이제 본격적으로 Spark 3.0.0을 설치해보도록 하겠습니다.

1. 자바 설치

  스파크는 스칼라로 구현되어 있으며, 자바 가상 머신(JVM) 기반에서 동작합니다.
  따라서, 스파크를 설치하기 위해서는 사전에 자바가 설치되어야 합니다.

  스파크 3.0.0은 자바 11버전을 지원하므로,  JDK 11 버전을 다운로드 받아 설치합니다.

  * URL : https://spark.apache.org/releases/spark-release-3-0-0.html

 

  Java SE 11 버전 설치는 아래 포스트를 참고 바랍니다.

https://sparkdia.tistory.com/64

 

Java SE 11 설치 on Windows 10

  윈도우 10 환경에서 Java se 10 설치 작업을 진행해보겠습니다. 이 포스트를 작성하는 시점에 릴리즈된 DK 최신 버전은 14입니다. 하지만 제가 설치하고자 하는 프로그램과 호환이되는 버전이 필��

sparkdia.tistory.com

 

 

2. 파이썬(Python) 설치

  스파크 3.0.0에서 파이썬 2 버전대는 더 이상 지원하지 않는다고 합니다.

  아래 파이썬 홈페이지 접속하여 최신 버전인 3.8.3을 다운로드받아 설치합니다.

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

 

3. 스파크 다운로드 및 압축해제

  아래 URL에 접속하여 스파크 다운로드 페이지로 이동합니다.

* URL : https://spark.apache.org/downloads.html

 

Downloads | Apache Spark

Download Apache Spark™ Choose a Spark release: Choose a package type: Download Spark: Verify this release using the and project release KEYS. Note that, Spark 2.x is pre-built with Scala 2.11 except version 2.4.2, which is pre-built with Scala 2.12. Spar

spark.apache.org

 

  스파크 릴리즈를 3.0.0으로 선택하고, 하둡 3.2가 포함된 패키지를 선택합니다.

  Download Spark 옆의 링크를 클릭하면 다운로드가 가능한 미러 사이트 목록이 표시되는 아래 페이지로 이동합니다.

  위 미러 사이트 중 한 곳을 선택하여 설치 파일을 다운로드 받습니다.

 

4. 스파크 설치

  다운로드 받은 파일을 설치하고자 하는 디렉토리(예: C:\Spark\)에 옮긴 후 압축을 해제합니다.

 

 

5. Winutils 설치

  아래 URL에 접속하여 Spark 다운로드 시 선택한 하둡 버전에 맞는 winutils.exe 파일을 다운로드 받아야 합니다.

  * URL : https://github.com/cdarlint/winutils

  이 포스트에서는 하둡 3.2 버전을 선택하였으므로 하단 URL에 접속하여 winutils.exe 파일을 다운로드 합니다.

  * URL : https://github.com/cdarlint/winutils/tree/master/hadoop-3.2.1/bin

  위 페이지의 winutils.exe 링크에서 오른쪽 마우스를 클릭하여 팝업 메뉴를 띄웁니다. 팝업 메뉴 중 '다른 이름으로 링크 저장'을 클릭하여 winutils.exe 파일을 다운로드 합니다.

  C:\에 Hadoop\bin 디렉토리를 생성합니다. 생성된 bin 디렉토리에 다운로드 받은 winutils.exe 파일을 이동시킵니다.

 

 

6. 환경설정

  탐색기에서 [내 PC]를 선택 후 마우스 오른쪽 버튼을 클릭하여 팝업 메뉴를 띄웁니다. 팝업 메뉴 중 하단의 '속성'을 클릭합니다.

 

  왼쪽 메뉴 하단의 '고급 시스템 설정'을 클릭합니다.

 

  시스템 속성 다이얼로그에서 '고급' 탭을 선택 후 하단의 '환경 변수' 버튼을 클릭합니다.

 

  환경 변수 다이얼로그의 '시스템 변수'에서 '새로 만들기'를 클릭합니다.

 

  변수 이름은 'SPARK_HOME', 변수 값은 스파크 설치 디렉토리 명(예: C:\Spark\spark-3.0.0-bin-hadoop3.2)을 입력합니다.

 

 다시 한번 '새로 만들기' 버튼을 클릭 후 변수 이름은 'HADOOP_HOME', 변수 값은 'C:\Hadoop'을 입력합니다.

 

  시스템 변수 중 'Path'를 선택 후 '편집' 버튼을 눌러 아래와 같이 '%SPARK_HOME%\bin'과 '%HADOOP_HOME%\bin 경로를 추가해줍니다.

 

 

7. 스파크 실행

  명령 프롬프트를 실행하여 커맨드에서 pyspark를 입력하면 아래와 같이 pyspark가 실행되는 것을 확인하실 수 있습니다.

 

  테스트로 prod_list.csv 파일을 읽어 prod라는 데이터프레임을 생성한 후, COLOR별 건수를 출력하는 예제를 실행해보았습니다.

prod = spark.read.csv("C:\\Spark\\sample\\prod_list.csv", header="true", inferSchema="true")
prod.groupBy("COLOR").count().show()

 

 

8. 스파크 Web UI

  아래 URL을 통해서 스파크 웹 UI에 접속 가능합니다.

* URL : http://localhost:4040/

  스파크 내에서 실행 중인 잡 목록을 모니터링 할 수 있으며, 아래와 같이 Stage별 DAG도 확인이 가능합니다.

 

[Ref.] https://phoenixnap.com/kb/install-spark-on-windows-10

'BigData > Spark' 카테고리의 다른 글

스파크(Spark) 실행하기 on Databricks  (2) 2020.06.22
Spark 2.1.3 설치 (CentOS 8)  (0) 2020.06.14

  

  윈도우 10 환경에서 Java se 10 설치 작업을 진행해보겠습니다.

  이 포스트를 작성하는 시점에 릴리즈된 DK 최신 버전은 14입니다.
  하지만 제가 설치하고자 하는 프로그램과 호환이되는 버전이 필요했기에 11 버전을 선택하여 설치하려고 합니다.

  신규 프로그램 개발 목적으로 자바를 설치하는 경우에는 최신 버전을 선택하는것이 통상적이지만,
  저처럼 사용하고자 하는 프로그램의 설치 전 요구사항에 자바가 포함된 경우에는 해당 프로그램에서 요구하는 자바 버전을 선택하여 설치해야 합니다. 

 

 

1. JDK 설치 프로그램 다운로드

  아래 URL에 접속하여 설치 프로그램을 다운로드 합니다.

* URL : https://www.oracle.com/java/technologies/javase-downloads.html

 

  다운로드 웹 페이지 중간 Java SE 11 (LTS)에서 'JDK Download' 항목을 클릭합니다.

 

  Windows용 설치 파일을 선택하여 클릭합니다.

 

  라이센스에 동의한다는 체크 박스를 클릭하고, 'Download' 버튼을 클릭합니다.

 

  오라클 계정에 로그인하면 설치파일 다운로드가 시작됩니다.

 

  다운로드가 완료되면 [내 PC > 다운로드] 폴더에 저장된 설치 파일을 확인하실 수 있습니다.

 

 

2. 자바 설치

  다운로드 폴더에 설치 파일을 실행하면 아래와 같은 Welcome 메세지를 확인할 수 있습니다.

    'Next >' 버튼을 클릭합니다.

 

  부수적으로 설치되는 항목들에 대해 설치 여부 옵션을 선택하고 설치 경로를 변경할 수 있는 다이얼로그가 표시됩니다.

  옵션 변경 완료 후 'Next' 버튼을 클릭합니다.

 

  프로그램 설치가 진행되며, Progress bar를 통해 설치 진행률을 확인할 수 있습니다.

 

  설치가 정상적으로 완료되면 아래와 같은 성공 메세지를 확인할 수 있습니다.

 

 

3. 환경 설정

  탐색기에서 [내 PC]를 선택 후 마우스 오른쪽 버튼을 클릭하여 팝업 메뉴를 띄웁니다. 팝업 메뉴 중 하단의 '속성'을 클릭합니다.

 

  왼쪽 메뉴 하단의 '고급 시스템 설정'을 클릭합니다.

 

  시스템 속성 다이얼로그에서 '고급' 탭을 선택 후 하단의 '환경 변수' 버튼을 클릭합니다.

 

  환경 변수 다이얼로그의 '시스템 변수'에 아래 항목을 추가합니다.

변수 이름 변수 값
JAVA_HOME C:\Program Files\Java\jdk-11.0.7
CLASSPATH .%JAVA_HOME%\lib\tools.jar
Path %JAVA_HOME%bin 추가

 

 

 

4. 자바 실행

  명령 프롬프트를 실행하여 아래 명령을 실행해봅니다.

> java -version

  위와 같이 java version이 표시되면 정상적으로 설치가 완료된 것입니다.

 

 

'Develop > Java' 카테고리의 다른 글

JDK 7 설치하기 (CentOS 8 환경)  (0) 2020.02.29

 

  필자가 생각하는 Hive에서의 데이터 아키텍처 최적화 방법은 아래와 같이 3가지로 구분될 수 있습니다.

Hive에서 데이터 아키텍처 최적화 방법

 

  • 많은 데이터는 적게 만들어라
  • 적은 데이터를 많게 만들어라
  • Skew는 분할처리하라.

 

  이 포스트에서는 첫 번째 Case인 '많은 데이터는 적게 만들기' 방법으로 튜닝한 예제에 대해 설명하고자 합니다.

  먼저 튜닝 결과는 아래와 같습니다.

  리듀스의 수가 크게 증가한 것에 의문을 가지시는 분들이 계실 수도 있는데요. 이 부분에 대해서는 아래에서 궁금증을 풀어보도록 하겠습니다.

 

 

 

[ 튜닝 전 ]

 

  먼저 튜닝 전 쿼리를 살펴보도록 하겠습니다.

SELECT BASE_DT
     , MAX(ORG_CNT)                AS ORG_CNT
     , MAX(CAL_CNT)                AS CAL_CNT
     , MAX(ORG_CNT) - MAX(CAL_CNT) AS GAP_CNT
  FROM (
        SELECT '${BASE_DT}'        AS BASE_DT
             , COUNT(DISTINCT UID) AS ORG_CNT
             , 0                   AS CAL_CNT
          FROM ACT_TXN_DD
         WHERE BASE_DT BETWEEN TO_CHAR(DATE_ADD(FROM_UNIXTIME(UNIX_TIMESTAMP('${BASE_DT}', 'yyyyMMdd'), 'yyyy-MM-dd'), -179), 'yyyyMMdd') 
                           AND '${BASE_DT}'
         UNION ALL
        SELECT BASE_DT
             , 0                   AS ORG_CNT
             , COUNT(DISTINCT UID) AS CAL_CNT
          FROM ACT_TXN_180_SUM
         WHERE BASE_DT = '${BASE_DT}'
         GROUP BY BASE_DT
     ) A
 GROUP BY BASE_DT
;

  * 참고
   - BASE_DT는 파티션 키 컬럼입니다.
   - 위 조건절에 사용된 TO_CHAR 함수는 Hive 내장 UDF가 아니라 시스템 운영상 필요해 의해 만들어진 진짜 사용자 정의 UDF입니다.

 

  위 쿼리의 튜닝 포인트는 2가지가 존재합니다.

* Tuning Point #1 : 조건절 내 사용자 정의 UDF 제거

  사용자 정의 UDF는 Hive의 옵티마이저가 제대로 인식할 수 없는 UDF라고 볼 수 있습니다. 따라서 옵티마이저가 실행 계획을 수립할 때 사용자 정의 UDF는 비용 계산에서 제외됩니다.
  이러한 사용자 정의 UDF가 where 조건절에 사용되어 추출 데이터의 건수를 상당히 줄인다 해도 옵티마이저의 쿼리 수행 비용 계산 시에는 반영되지 않는 겁니다.

  특히 위 쿼리에서처럼 파티션 키 컬럼(BASE_DT)의 필터링 조건으로 사용자 정의 UDF가 사용되는 경우에 성능상의 큰 이슈가 발생할 수 있습니다. 파티션 키 컬럼의 필터링 조건이 존재하지만 Partition pruning을 시도하지 못하고 전체 테이블의 데이터를 읽어야(Full table scan) 하기 때문입니다.

  위 쿼리에서는 Partition pruning을 위해서 where 조건절에 사용된 사용자 정의 UDF를 제거하는 것이 필요합니다. 

 

  참고로 Hive에서 Partition pruning을 판단할 수 있는 방법은 아래 포스트에서 확인하실 수 있습니다.

 

Hive 튜닝 기본 -실행계획에서 Partition pruning 확인하기

Hive에서도 아래와 같이 'EXPLAIN' 명령문으로 쿼리 실행계획을 확인할 수 있습니다. hive> EXPLAIN 쿼리문; Hive의 실행계획은 다른 DBMS에 비해 실행계획의 가독성이 떨어진다는 점이 참으로 안타까운데

sparkdia.tistory.com

 

 

* Tuning Point #2 : DISTINCT COUNT 연산 부하

  COUNT(DISTINCT 컬럼) 함수는 '컬럼'내 중복을 제외한 데이터의 건수를 계산합니다.
  전체 데이터에서 중복이 제거된 건수를 계산해야 하므로 이 작업은 단 하나의 리듀스 태스크가 처리하게 됩니다.

  위 쿼리의 리듀스 태스크 수가 3개였습니다.

  - 서브쿼리 내 UNION ALL 절 상단의 쿼리
  - 서브쿼리 내 UNION ALL 절 하단의 쿼리
  - 최상위 쿼리

  데이터의 건수와는 상관없이 각 쿼리를 수행하는 Staage 별로 단 1개의 리듀스 태스크가 할당이 되어 집계 함수 연산을 수행하는 것입니다.

  큰 작업을 여러 개의 맵과 리듀스가 나눠서 빠른 시간 내에 처리하는 것이 하둡의 기본 사상이자 장점입니다.
  1개의 리듀스로 집계 함수 연산을 수행한다는 것은 하둡의 장점인 분산 처리의 이점을 전혀 활용하지 못하는 경우입니다. 

  위 쿼리에서는 다수의 리듀스가 연산을 처리할 수 있도록 COUNT(DISTINCT 컬럼) 연산의 부하 감소가 필요합니다.

 

 

 

 

[ 튜닝 후 ]

 

  아래는 튜닝 전 쿼리에서 부하를 유발한 사용자 정의 UDF를 제거하고 COUNT DISTINCT의 부하를 감소시킨 쿼리입니다.

SELECT BASE_DT
     , MAX(ORG_CNT)                AS ORG_CNT
     , MAX(CAL_CNT)                AS CAL_CNT
     , MAX(ORG_CNT) - MAX(CAL_CNT) AS GAP_CNT
  FROM (
        SELECT '${BASE_DT}'        AS BASE_DT
             , COUNT(DISTINCT UID) AS ORG_CNT
             , 0                   AS CAL_CNT
          FROM (
                SELECT BASE_DT
                     , UID
                  FROM ACT_TXN_DD
                 WHERE BASE_DT BETWEEN DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(UNIX_TIMESTAMP('${BASE_DT}', 'yyyyMMdd'), 'yyyy-MM-dd'), -179), 'yyyyMMdd') 
                                   AND '${BASE_DT}'
                 GROUP BY BASE_DT, UID
             ) SUB
         UNION ALL
        SELECT BASE_DT
             , 0                   AS ORG_CNT
             , COUNT(DISTINCT UID) AS CAL_CNT
          FROM ACT_TXN_180_SUM
         WHERE BASE_DT = '${BASE_DT}'
         GROUP BY BASE_DT
     ) A
 GROUP BY BASE_DT
;

 

 

* Tuning Point #1 : 조건절 내 사용자 정의 UDF 제거

  파티션 키 컬럼인 BASE_DT의 필터링 조건을 사용자 정의 UDF가 아닌 Hive 내장 UDF인 DATE_FORMAT으로 변경하였습니다.

WHERE BASE_DT BETWEEN TO_CHAR(DATE_ADD(FROM_UNIXTIME(UNIX_TIMESTAMP('${BASE_DT}', 'yyyyMMdd'), 'yyyy-MM-dd'), -179), 'yyyyMMdd') AND '${BASE_DT}'
WHERE BASE_DT BETWEEN DATE_FORMAT(DATE_ADD(FROM_UNIXTIME(UNIX_TIMESTAMP('${BASE_DT}', 'yyyyMMdd'), 'yyyy-MM-dd'), -179), 'yyyyMMdd') AND '${BASE_DT}'

  Hive 내장 UDF를 사용하였기에 옵티마이저는 BASE_DT 컬럼의 필터링 연산을 실행 계획에 반영할 수 있습니다.
  필터링 연산이 적용되므로 Partition pruning이 발생하여 액세스 대상 데이터의 건수의 감소로 쿼리 성능이 향상되게 됩니다.

 

 

* Tuning Point #2 : DISTINCT COUNT 연산 부하

  앞서 DISTINCT COUNT 연산은 오직 하나의 리듀스가 처리한다고 했습니다.
  분산 처리가 불가능한 상황이므로, 리듀스 연산 시간을 단축하는 방법은 리듀스의 입력 데이터 건수를 줄이는 것입니다.

  튜닝 전 쿼리를 다시 한번 살펴보겠습니다.

 

  중복된 UID가 존재하는 180일간의 데이터를 읽어 중복되지 않은 UID의 건수를 계산합니다. 하나의 리듀스가 180일간의 데이터를 모두 처리므로 실행 속도가 느려지게 됩니다.

 

  DISTINCT COUNT 연산을 수행하는 리듀스의 입력 데이터를 줄이는 방법사전에 입력 데이터의 중복을 제거하는 것입니다.

  서브 쿼리 안에서 GROUP BY BASE_DT, UID 집계 연산으로 중복이 제거된 중간 데이터 결과 셋이 생성됩니다. 
  DISTINCT COUNT 연산을 처리하는 리듀스는 입력으로 크기가 감소된 중간 데이터 결과 셋을 사용하게 됩니다.

  위 GROUP BY 연산은 다수의 리듀스가 작업을 분배하여 처리합니다.
  하나의 리듀스가 처리하던 중복제거 작업을 다수의 리듀스가 처리하게 되는 겁니다. 작업의 분산 처리가 가능하니 당연히 연산 속도는 빨라지게 됩니다.

 

 

 

다시 한번 첫 번째 Hive에서의 데이터 아키텍처 최적화 방법을 요약 정리하면 아래와 같습니다.

최적화 방법 첫번째 : 많은 데이터는 적게 만들어라.

1. 액세스 대상 테이블 데이터 건수 감소 (Partition Pruring이 적용)
2. 집계 함수 연산 대상 데이터 건수 감소 (사전 Group by 연산 수행)
 

 

 

  데이터 브릭스(Databricks)는 아파치 스파크 실행환경을 제공해주는 클라우드 기반의 플랫폼입니다.

  Notebook 형태로 스파크 소스를 테스트할 수 있는 웹 UI환경을 제공해주므로, 설치 작업 없이도 스파크를 직접 테스트해 볼 수 있습니다.

  데이터브릭스는 두 개의 플랫폼 DATABRICKS PLAFORM과 COMMUNITY EDITION이 존재합니다.
  BUSINESS용인 DATABRICKS PLAFORM은 제약 없이 모든 기능을 사용할 수 있으며. 무료로 Trial 버전을 14일간 사용할 수 있습니다.
  COMMUNITY EDITION은 스파크 학습자를 위한 무료 버전으로 기능이 제한적입니다.

 

  데이터브릭스를 사용하기 위해서는 아래 URL에 접속하여 사용자 등록을 해야 합니다.

* URL : https://databricks.com/try-databricks

 

Try Databricks

Discover why businesses are turning to Databricks to accelerate innovation. Try Databricks’ Full Platform Trial risk-free for 14 days!

databricks.com

 

  위 URL에 접속하면 아래와 같이 사용자 기본 정보를 입력하는 화면이 표시됩니다.

 

  개인 정보를 입력 후 'SIGN UP' 버튼을 클릭하면 데이터브릭스 버전을 선택하는 화면이 표시됩니다.
  이 포스트에서는 Commuity edtion을 선택하여 테스트를 진행해보도록 하겠습니다.

 

 

 

  Commuity edtion의 'GET STARTED' 버튼을 클릭하면 아래와 같이 이메일을 확인하라는 메세지가 출력됩니다.

 

 

  이메일 본문 중에서 'Get started by visiting' 오른쪽의 링크를 클릭하여 이메일을 인증합니다.

 

 

  위 링크를 클릭하면 아래와 같이 계정 비밀번호을 설정하는 화면으로 이동합니다.

 

 

  비밀번호 변경 작업이 완료되면 아래와 같이 데이터브릭스 초기 화면을 볼 수 있습니다.

  화면 중앙에 'Explore the Quickstart Tutorial'을 클릭하면 기본 사용 방법이 정리된 Notebook을 확인하실 수 있습니다.
  이 포스트에서도 위 튜토리얼을 따라서 테스트를 진행해보도록 하겠습니다.

 

 

  데이터브릭스를 사용하기 위해서는 제일 먼저 클러스터를 생성해야 합니다.
  위 화면에서 'New Cluster'를 클릭하여 클러스터 생성 작업을 진행합니다.

  또는 아래와 같이 왼쪽 메뉴에서 'Clusters'를 클릭한 후 나타나는 Clusters 페이지 상단의 'Create Cluster' 버튼을 클릭하여 클러스터를 생성할 수도 있습니다.

 

 

  클러스터 생성화면에서 생성할 클러스터의 이름을 입력하고, Runtime Version을 선택합니다.
  Runtime Version은 테스트하고자 하는 Scala나 Spark의 버전을 기준으로 선택하면 됩니다.
  여기서는 튜토리얼에서 제시된 6.3 (Scala 2.11, Spark 2.4.4) 버전을 선택하도록 하겠습니다.

 

 

  입력이 완료되면 'Create Cluster' 버튼을 클릭하여 클러스터를 생성합니다.

  Clusters 페이지에서 생성된 클러스터를 확인할 수 있습니다.

 

 

 

  이어서 Notebook을 생성하도록 하겠습니다.

 

  위 초기화면 중앙에 위치한 'New Notebook' 메뉴를 클릭하여 신규 노트북을 생성할 수 있습니다.

  또는 아래와 같이 메뉴 'Workspace'에서 계정명 옆의 '∨' 아이콘을 클릭하면 아래와 같이 Notebook을 생성하는 메뉴를 확인하실 수 있습니다. 해당 메뉴를 통해서도 노트북 생성이 가능합니다.

 

 

  노트북 생성 메뉴를 실행하면 아래와 같이 노트북 생성 화면이 표시됩니다.

 

 

  노트북 이름을 입력하고 'Defalut Language'는 우선 SQL을 선택하도록 하겠습니다.
  'Cluster'는 방금 전에 생성한 클러스터를 선택하면 됩니다.
  'Create' 버튼을 클릭하면 아래와 같이 생성된 노트북 페이지가 표시됩니다.

 

 

 

  데이터브릭스에서 제공해주는 diamonds.csv 파일을 소스 데이터로 읽어들이는 diamonds 테이블을 생성하도록 하겠습니다.

 

DROP TABLE IF EXISTS diamonds;

CREATE TABLE diamonds
USING csv
OPTIONS (path "/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header "true")

 

  노트북 셀(cells) 또는 커맨드(commands)에 위 SQL을 입력한 후 실행합니다.
  셀에서 shift+Enter를 입력하거나 셀 오른쪽 상단의 '▶' 아이콘을 클릭하면 해당 셀 내 SQL이 실행됩니다. 

 

 

  SQL을 실행하면 위와 같이 셀 하단에 Spark Jobs 목록과 실행 결과가 표시됩니다.

  위에서 생성한 테이블은 'Data' 메뉴에서도 확인 가능합니다.

 

 

 

  방금 생성한 diamonds 테이블의 데이터를 조회해보도록 하겠습니다.

SELECT * from diamonds

 

 

  GROUP BY 구문을 사용해 색상(color)별 평균 가격(price)을 계산할 수도 있습니다.

SELECT color, avg(price) AS price FROM diamonds GROUP BY color ORDER BY color

 

  Select문을 실행하여 출력된 데이터는 테이블 형태나 다양한 형태의 그래프로 확인할 수 있습니다.
  결과 데이터 셋 화면 아래에 Bar 그래프 아이콘을 클릭하면 다양한 형태의 그래프 옵션을 볼 수 있으며, 출력하고자 하는 형태의 그래프를 선택하여 쉽게 그래프를 출력할 수 있습니다.

 

 

  아래는 diamonds 테이블 데이터의 색상별 평균 가격을 Bar 그래프로 출력한 결과입니다.

 

 

 

  현재 테스트 중인 노트북의 기본 언어를 SQL로 선택했지만 '%python' 명령어를 이용해 파이썬 명령어도 해당 노트북에서 실행할 수 있습니다.
  위에서 SQL로 테스트한 작업을 파이썬 명령어를 이용해서 다시 테스트해보도록 하겠습니다.

 

  diamonds.csv 파일을 읽어 diamonds 데이터 프레임을 생성합니다.

%python
diamonds = spark.read.csv("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", header="true", inferSchema="true")

 

  diamonds 데이터 프레임에서 색상(color)별 평균 가격(price)를 추출합니다.

%python
from pyspark.sql.functions import avg

display(diamonds.select("color","price").groupBy("color").agg(avg("price")).sort("color"))

 

  위 실행 결과도 아래와 같이 그래프로 확인해보겠습니다.

 

 

 

'BigData > Spark' 카테고리의 다른 글

스파크(Spark) 3.0.0 설치 on Windows 10  (0) 2020.06.28
Spark 2.1.3 설치 (CentOS 8)  (0) 2020.06.14

+ Recent posts