관리자

scala에는 2가지의 for문이 존재한다.

 

1. for(...) {}

2.for(...) yield

 

yield는 Vector 형태로 결과를 반환한다.

 

예시)

for(i<- range 1 to 3) println(i)

// result
// 1
// 2
// 3
val tt =
for(element <- 1 to 3) 
  yield element
  
  
def main(args: Array[String]) {
  println(tt)
}

//result
//Vector(1, 2, 3)

 

()대신 {}를 이용해서 multiline으로 작성할 수도 있다.

val t = for {
  element <- 1 to 3
} yield {
  element
}

jdk-version : 13

OS : macOS

installing sbt on macOS : https://www.scala-sbt.org/1.x/docs/Installing-sbt-on-Mac.html

 

문제 :

global에서 sbt 1.3.x 버전은 잘 실행되나,

build.sbt에서 sbt 버전이 1.2.8인 경우,

sbt가 실행조차 되지 않고 아래와 같은 에러가 난다.

java.io.ioerror: java.lang.runtimeexception: /packages cannot be represented as URI

 

build.sbt에서 sbt 버전을 1.3.7로 수정했더니, plugin이 1.3.x과 호환이 안되서 에러가 난다 ㅠㅠㅠ

결론적으로는 jdk-version이 안맞는 문제였다.

 

사실 sbt는 jdk 13과 호환이 된다. 하지만 sbt 1.3.x는 호환이 되나 1.2.x는 안되는 것 같다...

documenation에서 호환된다는 말만 보고 가볍게 넘어갔었는데 여기에 문제가 있었다...

구글링해도 검색 결과가 없는데, 검색할 수록 내가 설정을 잘못했다기보단 프로그램/라이브러리 상의 문제 같았다.

이틀 동안 구글링했는데....ㅠㅠㅠ

스펙과 내 환경을 똑바로 확인하자+ documenation이 latest version인지 확인하자.

역시 환경 설정이 제일 어려운 것 같다....

 

해결방안  + 결론 :

jdk 11 을 설치하고 sbt를 jdk 11로 실행하니 sbt도 잘 실행되고 project 빌드에도 이상이 없다!

그 뒤로는 설정이 저장되어서 저절로 jdk 11로 실행된다.

 

jdk 설치 : https://adoptopenjdk.net

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

사용할 수 있는 자바 버전 확인 : sbt -J-showversion

 

원하는 자바 버전으로 실행

sbt -java-home /Library/Java/JavaVirtualMachines/{java-version}/Contents/Home

나의 경우 : sbt -java-home /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

 

 

Issue :

Downloaded sbt 1.3.7 successfully, it runs well globally.

However I couldn't run sbt on project with version 1.2.8.

It throws error below:

java.io.ioerror: java.lang.runtimeexception: /packages cannot be represented as URI

 

Problem was on the version of jdk.

sbt is compatible with jdk 13. It is true for sbt 1.3.x but probably not for 1.2.x.

So I needed jdk 11 to run sbt 1.2.8.

 

Solution :

instsll jdk 11, run sbt with jdk 11.

After the first run, configuration is saved.

No need to set option every time. sbt will automatically use jdk 11 to build :)

 

jdk install : https://adoptopenjdk.net

 

AdoptOpenJDK

AdoptOpenJDK provides prebuilt OpenJDK binaries from a fully open source set of build scripts and infrastructure. Supported platforms include Linux, macOS, Windows, ARM, Solaris, and AIX.

adoptopenjdk.net

 

show available java optionsbt -J-showversion

 

run sbt with specific jdk otpion:

sbt -java-home /Library/Java/JavaVirtualMachines/{java-version}/Contents/Home

in my case : sbt -java-home /Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home

 

'언어 > Scala' 카테고리의 다른 글

scala for comprehension, for {...} yield  (0) 2020.02.03
type / class 확인하기  (0) 2020.01.26
for{...} yield 이해하기2  (0) 2020.01.26
for loop/ for() /for{} /for(...) yield  (0) 2020.01.26
원소 숫자 세기 : count number of elements  (0) 2020.01.24

리스트의 원소 숫자 세기 : counting number of elements in the list

ex. ["a", "b", "c" ,"a", "c", "a" ] -> [("a", 3), ("b",1), ("c", 2)]

 

def count(L : list) = L.groupby(identity).mapValues(_.size)

 

1. 기초

1) LAN(Local Area Network): 회사 건물 내부/ 가정 내부

2) WAN(Wide Area Netework): KT, SKT 등의 통신 사업자 망을 통해 구축된 네트워크

3) MAN(Metropolitan Area Network): LAN, WAN의 중간 범위 네트워크

4)인트라넷: 사내 넨트워크

 

2. LAN

1)OSI 기본 참조 모델

(7) 애플리케이션 계층: 애플리케이션별 서비스 제공

(6) 프레젠테이션 계층: 데이터를 통신에 맞는 형식으로 변환. ex. 문자 코드, 압축 형식

(5) 세션 계층: 커넥션의 확립과 절단

------------------------------------------------- 위는 애플리케이션 기능, 아래는 통신 기능

(4) 트랜스포트 계층: 데이터를 통신 상대에게 확실히 전달. TCP, UDP. - 데이터 단위: 세그먼트

(3) 네트워크 계층: 주소의 관리와 경로 선택. IP, 라우팅 - 데이터 단위 : 패킷

(2) 데이터링크 계층: 물리적 통신 경로 확립. 이더넷, MAC주소, 스위칭 - 데이터 단위: 프레임

(1) 물리 계층: 커넥터 등의 형태와 전기 특성의 변환. UDP 케이블, 광 케이블

PDU(Protocal Data Unit)

 

2) 구성 요소:

라우터 - L2 스위치 - UTP 케이블

LAN 카드에 MAC 주소(레이어2 통신)가 정해져있다. 48 bit 중 상위 24 bit는 제조사 하위 24bit는 시리얼넘버

UTP 케이블 - 다이렉트 케이블: PC 단말 - 스위치, 스위치 - 라우터 사이

- 크로스 케이블: 스위치 -스위치, PC - 라우터

 

3) IP 주소

레이어3 통신을 위한 주소

32bit 로 구성 : 네트워크 주소 + 호스트 주소

클래스 A: 0으로 시작 (1~126) 8 + 24

클래스 B: 10으로 시작 (128~191) 16 + 16

클래스 C: 110으로 시작 (192~223) 24 + 8

클래스 D: 멀티캐스트 주소

클래스 E: 실험용 주소

호스트 주소가 모두 0 : 네트워크 주소

호스트 주소가 모두 1: 브로드캐스트 주소

 

서브넷 마스크 : 서브넷을 통해 호스트를 더 작은 단위로 나누는 것

예) 128.1.64.0/18 -> 네트워크 주소 16비트, 서브넷 2비트, 호스트 14비트

 

공인 IP와 사설 IP

 

3. WAN

1) 건물 내 장비(액세스 라우터)

WAN에 연결하기 위한 라우터. LAN과 WAN의 패킷을 전달하는 역할.

WAN라우터/브로드밴드 라우터라고도 불림

 

2) 회선 종단 장치

WAN의 신호를 LAN의 신호로 변환.

ONU, 모뎀, TA, DSU.

ONU(Optical Network Unit): 광통신망 유닛. 광 신호 <-> 전기신호

 

3) 액세스 회선:

회선 종단 장치와 WAN 중계국까지를 연결하는 회선

ADSL, 광회선, 전용선, CATV

 

4) WAN 중계망

액세스 포인트와 액세스 포인트 사이의 연결망.

톨게이트와 톨게이트 사이의 고속도로.

 

5) 서비스 종류

IP-VPN: 사업자가 독자적으로 구축한 폐쇄 IP망

인터넷 VPN: 인터넷망을 이용한 VPN

광역 이더넷: 통신 사업자가 독자적으로 구축한 폐쇄망

인터넷망

 

4. 스위치

1) 레이어 2 스위치

제 2계층: 데이터 링크 계층에 해당. 레이어2 스위치라고도 한다.

PC나 네트워크 기기 등의 단말을 수용하고 단말 간의 통신을 중계하는 장치.

네트워크 내부에 불필요한 트래픽이 흐르지 못하도록 방지.

각 포트가 콜리전 포인트.

CSMA/CD 방식

MAC 주소 학습 방식: 출발지가 MAC 주소 테이블에 없다면 등록한다. 도착지가 MAC 주소 테이블에 없다면 모든 포트에 보낸다.

 

2) VLAN

브로트캐스트 도메인: 라우터를 통과하지 않고 직접 통신할 수 있는 범위(네트워크 세그먼트)

레이어2 스위치에서는 모든 포트가 하나의 브로드캐스트 도메인에 속한다.

VLAN을 이용하면 포트와 소속된 브로드캐스트 도메인을 나눌 수 있다. 물리 네트워크를 논리적으로 분할 가능.

트렁크링크: 여러 VLAN의 트래픽 전송을 위한 스위치 간 접속 전용 링크

 

3) 레이어 3 스위치

레이어2 t스위치 + 라우팅 기능. VLAN에 IP를 할당하고 라우팅을 할 수 있다. 기존 라우터보다 빠른 전송이 가능.

라우터는 이미 부하가 크기때문에 이용.

특징

- VLAN 간의 통신 가능.

- IP 패킷 전송을 하드웨어로 처리.

 

4) 로드 밸런서

-1) 부하 분산 기능: 여러 서버를 대표하는 가상의 서버가 되어 요청 분배.

-2) 상태 확인 기능: 대상 서버가 정지되면 전소을 중지하는 장애 경감

-3) 세션 유지

 

5) 이중화

-1) 스위치 이중화

스패닝 트리 프로토콜:

BPDU(Bridge Protocol Data Unit)라는 제어 정보를 통해 네트워크 정상 동작 확인.

장애 검출시 스패닝 트리 재형성.

스택 접속 + 링크 어그리게이션:

여러 대의 스위치를 하나로 묶어 한 대의 장치로 인식

여러 회선을 묶어 하나의 링크로 만듦.

 

4. 라우터

1) 역할과 기본 원리

제 3계층: 네트워크 계층에 포함. IP 기반

라우팅 : 다른 네트워크를 연결 + 적절하게 분배

라우팅 테이블: 목적지의 네트워크 주소 ,목적지로 보내기 위한 자신의 인터페이스 주소(스위치의 포트), 다음 경로 주소, 최적경로값

패킷을 받으면 헤더의 목적지 네트워크 주소 & 라우팅 테이블을 통해 다음 인터페이스를 정함.

자신의 라우팅 테이블에 일치하는 라우팅 정보가 없을 경우 패킷 파기. 또는, 기본 경로로 보낸다.

기본 경로 = 기본 게이트웨이(우리 네트워크 밖으로 보낼 때는 여기로 보내라) : 라우터 IP 주소

 

학습 방법:

-1) 정적: 관리자가 수동으로 등록

-2) 동적: 라우팅 프로토콜을 통해 다른 네트워크에서 자동으로 받음.

라우팅 프로토콜

-1) 디스턴스 벡터 알고리즘(Distance Vector Routing algorithm) :

RIP: 목적지까지 거쳐야하는 라우터 수(홉 수)가 적은 경로 선택하는 프로토콜 15홉 이하만 가능. 대규모 불가

인접한 라우터끼리 라우팅 정보를 송신한다.

-2) 링크 스테이트 알고리즘(Link State Routing algorithm):

자신이 속한 네트워크의 정보를 일정 범위의 모든 라우터에 통지. 대규모에 적합

OSPF

링크 정보 데이터베이스 작성 -> 최적 경로를 계산한다.

-3) 패스 벡터 알고리즘(Path Vector Routing algorithm)

 

2) 레이어3 스위치와의 다른점

라우터: 소프트웨어 기반

레이어3 스위치: 하드웨어로 제어

VPN, NAT/NATP(사설 IP <-> 공인 IP 변환) 기능 제공

 

 

5. 보안

스푸핑(spoofing): 부정으로 얻은 다른 사람의 정보를 불법으로 사용하는 것

DoS(Denial of Service): 대량의 데이터를 보내 부하를 주고 정상 처리를 방해하는것

 

1) 방화벽: 사내 네트워크와 외부 네트워크의 분계점에서 데이터의 입출력 제어

액세스 제어(필터링), 주소 변환, 로그 수집의 역할

 

2) 인증 : 사용자 인증 / 네트워크 인증

 

6. 무선LAN

무선 LAN 클라이언트, 무선 LAN 액세스 포인트, 무선 LAN 컨트롤러

무선 LAN 액세스 포인트는 비콘(신호)를 보낸다. 클라이언트느 비콘을 수신하고 그 정보를 기반으로 이용 가능한 채널(주파수 대역)을 찾는다. 이용 가능한 대역을 찾으면 무선 LAN 액세스 포인트로 SSID를 지정하고 어소시에이션을 요쳥한다. 액세스 포인트가 어소시에이션 응답으로 연결 가능 여부를 통지한다.

CSMA/CA 방식: 일정 시간 통신이 없으면 통신로가 비어있다고 생각해서 통신함.

1. 기초 용어

1) 데이터웨어하우스 : 데이터의 장기 보관을 목적으로 하는 저장소

2) 데이터마트: 데이터웨어하우스에서 필요한 데이터만 추출한 것

3) 데이터레이크: raw data가 흘러들어오는 것에 비유하여, 데이터의 축적 장소

4) 애드혹 분석: 일회성 분석

 

2. 분산처리

열지향 테이블의 이점

1) 지역성: 같은 칼럼에서는 동일한 값이 반복되기도 함 -> 압축률을 높일 수 있다

2) 데이터 분석시 모든 열을 분석하는 것이 아니라, 일부 열만 이용. 이 경우 행지향 테이블의 경우 모든 레코드를 탐색해야한다. 데이터의 양이 클 경우 메모리가 부족할 수 있음. 열지향은 일부 열만 메모리에 올리기 때문에 효율적.

 

비정규화 테이블을 사용하는 이유:

 

정형 데이터: 스키마가 명확히 정해지는 데이터 : RDB가 강함

비정형 데이터: 스키마가 명확하지 않은 데이터 -> 이미지, 동영상 등 : NoSQL이 강함

스키마리스 데이터: 형식은 정해져있지만 칼럼수나 데이터형이 명확하지 않은 데이터

 

◆ Hadoop

1) HDFS(Hadoop Distributed File System): 분산 파일 관리 시스템 : 네임 노드(메타데이터 + 데이터 노드 관리) + 데이터 노드

2) YARN(Yet Another Resource Negotiator): 리소스 관리자 - 클러스터 자원 관리, 할당

3) MapReduce: 분산 데이터 처리 모듈

SQL-on-Hadoop : Hadoop에서 사용되는 쿼리 엔진. Hive, Tez/ Impala, Presto(대화형)

4) Hadoop Common : 하둡의 다른 모듈을 지원하기 위한 공통 컴포넌트 모듈

 

◆ Spark

MapReduce와 달리 대량의 메모리를 사용해서 고속화. 스트리밍 데이터에 적합

MapReduce는 적은 메모리로 디스크 I/O 많이 이용. Spark는 메모리에 다 올려버린다.

또한 데이터 구축의 파이프라인을 원샷으로 해결할 수 있다. 텍스트 데이터를 열 지향 스토리지로 변환하고 SQL로 집계하여 결과를 내보낼 수 있다.

 

데이터마트 구축의 파이프라인

비구조화 데이터 ->(데이터 구조화: Hive) -> 구조화 데이터(팩트 테이블, 디멘젼 테이블. 열 지향 스토리지) ->(데이터 집약: Presto) -> 비정규화 테이블

 

3) 데이터 마트의 구축

- 팩트 테이블: 추가(append), 치환(테이블 전체를 replace)

테이블 파티셔닝: 하나의 테이블을 여러 개의 파티션으로 나누어 파티션 단위로 데이터 업데이트 가능.

- 집계 테이블: 팩트 테이블을 집계한 것.

카디널리티: 각 칼럼이 가질 수 있는 값의 범위. 카디널리티가 작아야 집계 테이블이 작다.

- 스냅샷 테이블: 테이블 전체를 저장 / 이력 테이블: 변경된 데이터만 스냅샷

 

3. 빅데이터의 축적

1) 벌크형 vs. 스트리밍형

벌크형 : 크기가 너무 크지 않도록 분할해서 전송. 재실행이 가능하다는 장점

2) 스트리밍형: 계속 전송되어오는 작은 데이터를 위한 방법. 메시지 배송을 통함.

-클라이언트 : 메시지가 처음 생성되는 기기

-프런트엔드: 메시지를 먼저 받는 서버. 클라이언트와의 통신 프로토콜을 제대로 구현하는 역할.

클라이언트 -> 프런트엔드 -> 메시지 브로커

-메시지 브로커: 디스크에 빈번하게 쓰는 것은 비효율적. 중간 데이터 축적층.

푸시: 송신 측에서 메시지 브로커에 넣는 것

풀: 수신측이 데이터를 가져오는 것

- 메시지 라우팅: 메시지 브로커의 데이터는 여러 다른 소비자가 읽을 수 있다. 이를 통해 메시지가 복사되어 여러 경로로 분기될 수 있다.

 

2) 메시지 배송 : at least once 배송을 하고 중복을 확인한다.(offset/고유 id 이용)

 

3) 시계열 데이터의 최적화

- 시계열 인덱스

- 조건절 푸시다운: 테이블 파티셔닝에서 만들어진 통계를 이용함(최솟값, 최댓값)

- 시계열 테이블: 시계열 데이터를 이용한 테이블 파티셔닝

- 데이터마트를 이벤트 시간으로 정렬

 

4) 비구조화 데이터의 분산 스토리지: NoSQL 이용

수정하는 것은 새로 파일을 써야하므로 갱신이 많은 곳에는 부적합

log와 같이 축적에 주로 사용

- KVS: dynamoDB

- wide column store: 2개 이상의 키. cassandra

-도큐먼트 스토어: 스키마리스 데이터 관리 가능. mongoDB

 

CAP

Consistency: 

Availiability: 장애 X

Partition-tolerance

 

- 데이터 수집의 파이프 라인:

클라이언트 -> 프런트엔드 -> 메시지 브로커 -> 소비자 -> 분산 스토리지 -> 중복 제거/데이터 구조화(열 지향 스토리지로 변환)-> 다시 분산 스토리지로

 

4. 워크플로우 관리

멱등:  동일한 태스크를 여러 번 실행해도 동일한 결과가 되는 것

 

MapReduce:

1) 파일을 일정 크기로 나누어 작은 데이터인 스플릿을 만든다.

2) 나눈 데이터를 읽어 비슷한것 끼리 묶는다

3) Map: 처리한다

4) Reduce:다시 합한다.

 

◆ DAG:

태스크의 실행 순서를 DA로 나타내서 처리한다. 의존성 문제 해결

 

람다 아키텍처

실시간 분석을 지원하는 빅데이터 아키텍쳐

대량의 데이터를 실시간으로 분석하기 어려우므로, batch로 미리 만든 데이터와 실시간 데이터를 혼합해서 사용하는 방식.

배치 레이어: 모든 데이터가 거치는 레이어

서빙 레이어: 배치 처리 결과는 서빙 레이어를 통해 접근. -> 배치 뷰. 하지만 실시간 정보를 얻을 수 없다.

스피드 레이어: 스트림 처리를 위함. 실시간뷰

스피드 레이어의 실시간 뷰 결과는 나중에 배치 뷰로 치환된다.

데이터 =>1) 배치 레이어 -> 서빙 레이어 & 2) 스피드 레이어 => 쿼리.

 

카파 아키텍처: 배치 레이어/서빙레이어 제거. 대신, 메시지 브로커의 데이터 보관 기간을 늘려 재실행 가능게 함. 

 

'CS 기본 이론 > Database_SQL' 카테고리의 다른 글

데이터베이스를 지탱하는 기술  (0) 2019.11.12
SQL 더 쉽게, 더 깊게  (0) 2019.11.11

+ Recent posts