-키/값 페어로 작업하기


-기본

키/값을 가지는 RDD에 대한 연산을 제공하고 이런 RDD를 페어 RDD라고 명명함. 

페어 RDD 들은 각 키에 대해 병렬로 처리하거나, 데이터를 다시 그룹핑할 수 있으므로 유용함. 

텍스트 파일의 각 라인의 첫 단어가 키가 된다.


-생성

스칼라와 파이선의 경우는 rdd.map()으로 생성 자바인 경우는 mapToPair()를 호출


-트랜스포메이션 함수 정리 


페어 RDD에 대한 트랜스포메이션과 페어RDD간의 트랜스 포메이션으로 나뉠 수 있다.


-페어 RDD에 대한 트랜스포메이션 ((Func)은 함수를 인자로 받는 트랜스포메이션)

reduceByKey(Func) : 동일 키에 대한 값들을 합친다. 

groupByKey() : 동일 키에 대한 값들을 그룹화한다.

combineByKey() : 다른 결과 타입을 써서 동일 키의 값들을 합친다.

mapValues (Func) : 키의 변경 없이 페어 RDD의 각 값에 함수를 적용한다.

flatMapValues (Func) : 페어 RDD의 각 값에 대해 반복자를 리턴하는 함수를 적용하고, 리턴받은 값들에 대해 기존키를 써서 키/값 쌍을 만든다. (토큰분리에 종종 이용)

Keys() : 키값을 돌려준다.

values() : 값들을 돌려준다.

sortBykey() : 키로 정렬된 RDD를 돌려준다.


-페어 RDD에 간의 트랜스포메이션

subtractByKey : 다른 쪽 RDD에 있는 키를 써서 RDD의 데이터를 삭제한다.

join : 두 RDD에 대해 inner join을 수행

rightOuterJoin : 첫번째 RDD의 키를 중심으로 조인

leftOuterJoin : 다른 쪽 RDD의 키를 중심으로 조인

cogroup : 동일키에 대해서 양쪽 RDD를 그룹화한다.









'hadoop,yarn, Hive > Spark' 카테고리의 다른 글

Pair RDD기본  (0) 2018.07.10
Spark 기본  (0) 2018.07.10
spark + intellij +maven 환경설정 및 기본예제  (0) 2018.07.10

1. 스파크 컴포넌트 

 - 스파크 코어 : 작업 스케쥴링, 메모리 관리, 장애복구, 저장 장치 연동, 분산데이터세트(RDD) 를 정의하는 API의 기본  

 - 스파크 SQL : 정형데이터를 처리하기 위한 패키지. 하이브 테이블, 파케이, JSON 지원. 

 - 스파크 스트리밍 : 실시간 데이터 스트림을 처리하는 컴포넌트 

 - MLlib: 머신러닝 라이브러리. 분류 회귀 클러스터링 협업필터링 

 - 그래프X : 그래프를 다루기 위한 라이브러리 

 - 클러스터 매니저 : yarn, 메소스의 클러스터 매이저 위에서 동작 가능 


2. 스파크 핵심 개념 

  - 클러스터 위에서 다양한 병렬 연산을 수행하는 드라이버 프로그램으로 구성

  - 드라이버 프로그램은 main 함수를 가지고 있으며, 분산데이터세트를 정의하고 그 데이터 세트에 연산 작업을 수행 

  - SparkContext 객체(연산클러스터에 대한 연결을 담당) 를 만들고 RDD를 생성함 

  - 연산의 실행을 위해 드라이버 프로그램은 익스큐터를 관리 

  

3. RDD(Resilient Distributed Dataset) 기초 

  - 분산된 데이터 요소의 모임 

  - 새로운 RDD를 만들어내거나 존재하는 RDD의 변형 또는 연산 

  - 내부적으로 스파크는 RDD에 있는 데이터들을 클러스터에 분배하고 연산들을 병렬화함

  - RDD는 사용자정의 클래스, python, java, scala 의 어떤 타압의 객체도 가질 수 있음. 

  - 한번 만들어진 RDD는 트랜스포메이션과 액션의 두가지 연산을 지원함. 

  - 트랜스포메이션은 존재하는 RDD에서 새로운 RDD를 만들어내는 것. 

     액션은 값을 계산(first() 등 )하고 드라이버 프로그램에 돌려주거나 HDFS에 저장하는 작업등. 


4.  RDD 생성, 연산 및 저장

  생성 - SparkContext.testFile(), parallelize() 

ex)

val  new SparkConf().setAppName("wordCount").setMaster(args(0))
val sc = new SparkContext(conf)
val filePath =conf = "/spark/README.txt"
val inputRDD = sc.textFile(filePath)

    연산 - filter(), map(), flatMap(), union(), take(), count(), distict(), intersection(), subtract(), cartesian()  등 

    저장 - saveAsTextFile(), saveAsSequenceFile() 



'hadoop,yarn, Hive > Spark' 카테고리의 다른 글

Pair RDD기본  (0) 2018.07.10
Spark 기본  (0) 2018.07.10
spark + intellij +maven 환경설정 및 기본예제  (0) 2018.07.10

1. 환경설정

http://kysepark.blogspot.com/2016/03/intellij-spark.html


2. pom.xml 에 Spark dependency 추가


<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.cyberx</groupId>
<artifactId>IntellijMavenProject</artifactId>
<version>1.0</version>
<name>${project.artifactId}</name>
<description>My wonderfull scala app</description>
<inceptionYear>2015</inceptionYear>
<licenses>
<license>
<name>My License</name>
<url>http://....</url>
<distribution>repo</distribution>
</license>
</licenses>

<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
<encoding>UTF-8</encoding>
<scala.version>2.11.5</scala.version>
<scala.compat.version>2.11</scala.compat.version>
</properties>

<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.3.1</version>
</dependency>
</dependencies>

<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<plugins>
<plugin>
<!-- see http://davidb.github.com/scala-maven-plugin -->
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<args>

</args>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<useFile>false</useFile>
<disableXmlReport>true</disableXmlReport>
<!-- If you have classpath issue like NoDefClassError,... -->
<!-- useManifestOnlyJar>false</useManifestOnlyJar -->
<includes>
<include>**/*Test.*</include>
<include>**/*Suite.*</include>
</includes>
</configuration>
</plugin>
</plugins>
</build>
</project>


3. scala object 생성 후 Edit configuration - program arguments에 local[*] 추가 

 


4. 기본 예제 작성 (New Scala class - kind 는 object)


import org.apache.spark.{SparkContext, SparkConf}

object wordCount {
def main(args: Array[String]) : Unit = {
val conf = new SparkConf().setAppName("wordCount").setMaster(args(0))
val sc = new SparkContext(conf)
val filePath = "/spark/README.txt"
val inputRDD = sc.textFile(filePath)
val matchTerm = "spark"

val numMatches = inputRDD.filter(line => line.contains(matchTerm)).count()
val lines = inputRDD.count()
val firstLine = inputRDD.first()

println("%s lines in %s contains %s".format(numMatches, filePath, matchTerm))
println("%s lines".format(lines))
println("%s is first line".format(firstLine))
System.exit(0)
}
}


5. 실행 결과 확인



 




'hadoop,yarn, Hive > Spark' 카테고리의 다른 글

Pair RDD기본  (0) 2018.07.10
Spark 기본  (0) 2018.07.10
spark + intellij +maven 환경설정 및 기본예제  (0) 2018.07.10

https://sparkour.urizone.net/recipes/installing-ec2/

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03

ODS:  temp영역 cleansing  dataware하우스에 로딩

ETL의 아키텍쳐구성


운영계에서 데이터를 추출해와서 추출한 데이터를 변환 및
ETL 서버중심 아키텍쳐 ETL 서버에서 변환 및 정제 작업을 수행한다.
변환 및 정제 작업을 거쳐 데이터웨어하우스에 정제


운영계 시스템 중심  --> 데이터 변환이 빠르나, 많은 리소스가 든다. --> 잘안씀
DW 서버중심 --> 정제 및 적재가 DW 서버에서 이루어진다. 운영계에서는 추출만 함
ETL서버중심 --> 실시간 요구분석이 많아지면서 리소스의 파워가 강해져 최근 많이 이용됨

--> ODS가 어디에 있느냐에 따라 ETL 아키텍쳐가 달라진다.

ETL 단계별처리방안

추출 변환 및 정제의 3단계
추출: 운영계의 부하 최소화를 고려해야함
(온라인추출방법은 DB trigger 방식/deferred시스템방식)
(batch는 )

 

'hadoop,yarn, Hive > ETL' 카테고리의 다른 글

ETL 정리중  (0) 2017.06.26

집합론의 기본적인 개념은 아래와 같습니다.

 

- 모여서 집단을 이룰 수 있는 개체들과 개체들을 모아서 얻은 집단들과 이들 사이의 관계를 다룬다.

 

머신러닝에서의 클러스터링이란

 

- 유사한 성격을 가진 개체를 묶어 그룹으로 하는 것 (여기서 집합론의 집단과의 관계에 대한 논의는 연관 분석

알고리즘 API을 조금 더 살펴봐야겠습니다. )

 

대학시절 전공과목으로 수강하긴 하였으나, 이러한 이론이 최근 대두되고 있는 머신러닝의 한 방법으로 발전하게 될 줄은 그 당시 몰랐습니다.

 

 

 

1. 머신 러닝의 클러스터링 주요 활용 사례

 

- 마케팅회사에서 고객을 세분화하기 위한 방법으로 활용됨.

- 소셜미디어의 네트워크 분석 (페이스북에서 특정소비자그룹에게 광고를 노출시키는데 이용됨 - 제 정보도 페이스북에서 어떤 그룹으로 묶여져 있다는  

  이야기겠죠.)

- 시장 리서치 회사

- 소셜커머스 업체의 장바구니 분석

- 신제품 개발에 대한 기초자료로 활용 (최신 트렌드등을 빅데이터에 기반하여 그룹화하고 특정 타겟 그룹을 정한 뒤, 상품개발을 이루어 나간다는 의미인듯 합니다.)

 

2. k-means 알고리즘

 

- 기본적으로 벡터 양자화 (조금 어렵네요.)

 

작동원리 

- 유한한 개체에서 집합을 어떻게 나눌 것인지 고민 (ex: n(개체) = 10000 , k(클러스터) = 5)

 --> 만개의 개체를 특정 조건에 따라 어떻게 5개의 그룹으로 나눌것인가를 고민 

 

초기화 

 

- 무작위 분할법

- 포지법

 

 

나눌려면?

 

- 엘보법

- 교차 유효성법

- 실루엣법

 

자세한 내용은 저작권 문제도 있으므로 "머신러닝워크북" 책에서 확인하실 수 있습니다.

 

 

3. 웨카의 K-means 클러스터링

 

- 웨카의 워크벤치를 이용할 수 도 있겠으나 유연성을 위해 API를 이용함이 좋을거 같습니다.

 

- 설치 및 대략적인 워크플로우는

 

http://socurites.com/data-analysis/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EB%A5%BC-%EC%9C%84%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A7%88%EC%9D%B4%EB%8B%9D-2-weka%EB%A5%BC-%ED%99%9C%EC%9A%A9%ED%95%9C-%EB%8D%B0%EC%9D%B4

 

- 클러스터 만들기 sample source

 

 package weka;
 import weka.clusterers.SimpleKMeans;
 import weka.core.Instances;
 import weka.core.converters.ConverterUtils.DataSource;
 
 
 public class wekaTest { 
 
  public wekaTest(String filepath, int clusters) {
   try {
    Instances data = DataSource.read(filepath);
    
    SimpleKMeans kMeans = new SimpleKMeans();
    kMeans.setNumClusters(clusters);
    kMeans.buildClusterer(data);
    
    Instances centroids = kMeans.getClusterCentroids();
    for (int i = 0; i < centroids.numInstances(); i++) {
     System.out.println("Centroid: "+ i + ": " + centroids.instance(i));
    }
    
    for (int i = 0; i < data.numInstances(); i++) {
     System.out.println(i + " in cluster" + kMeans.clusterInstance(data.instance(i)));
    }
    
    
   } catch (Exception e) {
    e.printStackTrace();
   }
   
  }
  
  public static void main(String[] args) {
   // Pass the arff location and the number of clusters we want
   wekaTest wc = new wekaTest("/Users/Jason/kmeandata.arff", 6);
 
 
  }
 
}

참고 자료

 

 

 

 

 

 

 

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03
DW

단계 : 개념모델링 --> 논리모델링 --> 물리모델링

 

1. 개념모델링

- 개략적인 팩트, 디멘젼을 도출

- 주제영역별 개념모델 작성

 

2. 논리모델링

- 팩트, 디멘젼을 상세하게 기술함

- 공통 디멘젼 도출

- DW 버스  아키텍쳐정의

- 논리형태의 세부 모델링

 

3. 물리모델링

- 실질적 DB OBJECT 구성

- DBMS 특성 고려

- 갱신 조회 성능 고려

- 사용자권한 참조무결성, 인덱스 등 설계 

 

상세 설명

 

1. 개념 모델링

- 각 주제영역에 따라 디맨젼 별 분석 팩트를 기술한다.

- 필요시 디멘젼의 레벨도 정의한다.

- 도출된 Fact, Dimsension 의 용어를 정의한다.

- 고객과 요구사항을 분석하여 시나리오를 작성한다.

 

2. 논리모델링 

- 디멘젼정의서, 팩트정의서를 바탕으로 DW 버스아키텍쳐를 도출함

- 공통디멘젼을 도출하고, 중복엔터티를 제거하며, 변경 시 영향도를 파악함.

- 향후 DW 확장을 위한 기본정보로 활용함.

- 다차원 모델을 이용함.

 

※ 버스아키텍쳐라 부르는 이유

컴퓨터에 BUS가 있고 이에 오디오나 비디오 카드가 연결되어 확장됨.

팩트가 도출될때마다 공통디멘젼과 연결되어 확장되므로  버스아키텍쳐라고 함.

 

 

3. 물리모델링

 

- indexing (성능) : OLTP에서는 B-Tree index를 사용, DW에서는 Bitmap-index(101, 010,001과 같은 데이터형태로)

- partitioning : 연별로, 상품별 등으로 partitioning 을 하여 테이블 풀스캔이 일어나지 않도록 함. (성능의 측면) 

- Summaty Table : 각 팩트별로 필요한 부서에 요약테이블을 설계하여 성능향상의 효과를 줄 수 있도록 함.

 

 

 

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03

1. 월마트


 - 2004년 허리케인 샌디가 미국을 강타했을 때, 데이터를 분리된 개별항목들이 아니라 전체로서 연구해야할 필요성을 느낌

 - 2012년 허리케인 프랜시스가 왔을 때 허리케인 진행경로에 있는 모든 가게에 손전등등 비상장비를 공급하여 엄청난 판매수익을 거둠

   --> 2011년부터 패스트 빅데이터 팀을 만들어 데이터까페라고 불리는 최점단 분석허브를 구축해 놓았기때문에 가능했던 일

   --> 모든 가게의 판매 수치를 분석하고, 실시간 모니터링 기술을 이용하여 예측가능하게함

 - 사용자의 구매를 예측하는 쇼피캣 서비스도 하고 있음

 - 데이터까폐는 지속적으로 갱신되는 2천억행의 트랜잭션 데이터로 이루어진 데이터베이스를 사용함


 기반기술 : Hadoop, Spark, Cassandra, R, SAS


2. 넷플릭스(Netflix)


  - 궁극적인 목표는 고객들이 어떤 컨텐츠를 즐겁게 볼것인지 예측하는 것

  - 고객ID, 영화ID, 고객이 영화를 본 날짜, 고객이 매긴 평점으로 분석을 시작하였으나, 스트리밍 방식이 발전함에 따라 새로운 정보를 활용하게됨 

  - 영화를 본 후 태그를 달게 하였으며, 그 태그에 기반하여 비슷한 성격을 가진 다른 영화도 추천할 수 있게됨

   --> 2015년 1/4분기 동안 새로운 이용자가 490만 증가

  - 사용된 데이터는 고객들이 어떤 영화를 보고, 어떤시간대에 보는지, 영화를 선택하는데 얼마나 많은 시간을 소모하는지, 사용자가

    영화를보다 어느 시점에 종료하는지, 별점은 몇개인지...


기반기술 :  Hadoop, Hive, Pig와 같은 빅데이터 기반기술과 테라데이터, 마이크로 스트래터지와 같은 전통적인 인텔리전스 도구를 결합함. 

               넷플릭스가 직접 개발한 오픈소스인 립스틱과 지니도 사용. 

               --> 앞으로 스트리밍, 기계학습 사용사례 분석을 위해 스파크를 계속 연구할 예정이며, 자체개발한 오픈소스 제품군을 추가 개발해나갈 예정


참고자료

빅데이터 4차 산업혁명의 언어/버나드마 지음|안준우 최지은 옮김/학고재






  

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03


https://www.slideshare.net/TaeYoungLee1/20141029-25-hive?from_m_app=ios

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03

1. 하이브의 개요

 

- 하둡 기반의 데이터 웨어하우징 프레임워크

- 대량의 데이터를 관리하고 학습하기 위해 개발

- 자바프로그래밍 기술은 부족하지만, 강력한 SQL 분석가가 페이스북의 HDFS에 저장된 대량의 데이터를 분석할 수 있도록 개발

- 아파치 프로젝트로 편입

 

2. 하이브의 설치

 

- 사용자의 워크스테이션에 설치

- 작성된 SQL 쿼리는 일련의 맵리듀스 잡으로 변환되어 하둡클러스터에서 구동됨

- 하이브는 HDFS에 저장된 데이터에 구조(스키마)를 입히는 방식으로 데이터를 테이블 구조로 구조화시킨다.

- 테이블 스키마와 같은 메타데이터는 메타스토어라 불리는 데이터베이스에 저장된다.

 

실제 설치순서는 아래 사이트에서 참조

https://www.slideshare.net/TaeYoungLee1/20141029-25-hive

 

3. 하이브 쉘

 

- 하이브 셀은 HiveQL 명령어로 하이브와 상호작용하는 하이브의 기본 도구이다.

- HiveQL은 SQL과 유사한 하이브의 질의언어이다.

- 대소문자를 구분하지 않는다.

 

Ex) hive> SHOW TALBLES; --> 테이블목록조회 질의

 

hadoop 및 hadoop ecosystem 에 대한 전반적인 설명은 아래 링크에서 참조하시면 됩니다.

 

https://www.slideshare.net/yes0815/about-hadoop-yes?from_m_app=ios

'hadoop,yarn, Hive' 카테고리의 다른 글

EC2에 spark 설치  (0) 2018.06.05
머신러닝과 집합론  (0) 2017.06.14
DW 모델링 단계  (0) 2017.06.05
빅데이터 활용사례(walmart, Netflix)  (0) 2017.06.05
Hadoop 설치 소개  (0) 2017.06.04
Hive 소개  (0) 2017.06.03

+ Recent posts