목록Data (66)
우노
Matrix의 Row를 전체 Vertex 개수로 두고 (LRxLC),(LCxLC) 형태 Matrix 생성하기 위 그림의 1~10 과 같은 순서로 중첩루프를 돌며 (LRxLC),(LCxLC) Matrix를 생성합니다. 자세한 코드 설명 1) Matrix 데이터 입력 2) 입력 데이터의 row, col 크기 입력 3) col slice 단위 설정 4) 최대 col slice 크기 설정 (slice의 nnz가 10^9 를 넘으면 안되므로) 5) LR을 전체 vertex 개수로 두고 col slice 생성 각 col slice 저장 (nnz, density 기입) 각 col slice에서 LCxLC 크기의 row slice 생성 각 row slice 저장 (nnz, density 기입) row slice는 최대..
유사도 (Similarity) 드라마를 예시로 들었을 때, 두 드라마의 유사도를 어떻게 측정할 수 있을까? 장르나 키워드가 비슷하면 비슷하다. ( 자카드 유사도 ) 보이스 (범죄, 스릴러, 다크, 서스펜스) 터널 (스릴러, 다크, 서스펜스) 사람들의 평가가 비슷하면 비슷하다. ( 평가 유사도 ) 사람 1의 영화1 평가 (0.5점) 사람 2의 영화2 평가 (0.6점) 자카드 유사도 (Jaccard Similarity) 자카드 유사도 키워드를 통해 두 집합이 얼마나 비슷한지를 측정 분자 두 집합의 교집합을 뽑는다. 분모 두 집합의 합집합을 뽑는다. 집합의 사이즈가 커지면 커질수록 패널티를 먹는다. 예제 보이스 (범죄, 스릴러, 다크, 서스펜스) 터널 (스릴러, 다크, 서스펜스) 교집합 / 합집합 = 3/4 ..
Matrix의 Row를 전체 Vertex 개수로 두고 Col 기준으로 나누기 ( 중복 비허용 ) 예) Matrix의 전체 Column size가 12이고 slice 단위를 5으로 한다면 다음과 같이 분할 됨. 1-5, 6-10 나머지 column인 11-12는 버려짐 예제코드 1024 개의 열을 300 개씩 중복 없이 Slice 하므로 총 3개의 Slice가 나온다. 1-300, 301-600, 601-900 import scala.math.BigDecimal val rdd = sc.textFile("s3://square-matrix/M_1024_1024_0.001.txt") // 입력 데이터 row, col 크기 val row = 1024 val col = 1024 // 원하는 slice 단위 val ..
Matrix의 Row를 전체 Vertex 개수로 두고 Col 기준으로 나누기 ( 중복 허용 ) 예) Matrix의 전체 Column size가 9이고 Slice 단위를 3으로 한다면 Column은 다음과 같이 분할 됨. 1-3, 2-4, 3-5, 4-6, 5-7, 6-8, 7-9 예제코드 1024 개의 열을 1000 개씩 중복 허용하며 Slice 하므로 총 25개의 Slice가 나온다. 1-1000, 2-1001, 3-1002, ... , 25-1024 import scala.math.BigDecimal val rdd = sc.textFile("s3://square-matrix/M_1024_1024_0.001.txt") // 입력 데이터 row, col 크기 val row = 1024 val col = ..
RDD 데이터는 설정 된 RDD 파티션 개수 만큼의 파일로 나뉘어 S3 경로에 저장된다. outputRDD.saveAsTextFile("s3://bucket/path/to/output/") coalesce 함수를 사용해 RDD 파티션을 원하는 개수 만큼의 파일로 합친 뒤, s3 경로에 저장할 수 있다. outputRDD.coalesce(1).saveAsTextFile("s3://bucket/path/to/output/")
Local mode(single machine)가 아닌 Cluster mode에서는 RDD 생성 시 RDD가 각각 분할 되어 executor에 할당된다. 이 때, executor에 할당 된 모든 RDD의 내용을 출력하기 위해서는 collect() 함수가 사용된다. myrdd.collect().foreach(println) 그러나, collect() 함수 사용 시 모든 executor의 rdd를 drvier node로 취합하기 때문에 out of memory가 발생할 수 있다. 따라서, 이를 해결 하기 위해 take() 함수가 사용된다. take() 함수는 RDD의 일부 내용만을 출력할 때 사용되며 아래는 100개의 element 만을 print 하는 예이다. myrdd.take(100).foreach(p..
Graph data Graphalytics에서는 테스트 및 표준 벤치 마크에 사용되는 Graph dataset를 제공한다. https://graphalytics.org/datasets "datagen-*" 로 시작하는 데이터가 임의로 만든 Graph dataset 이다. 원하는 파일을 다운로드 후 압축을 해지하면 다양한 파일들이 존재한다. 입력 데이터 (정점 및 에지 파일) 각 알고리즘 (BFS, WCC, PR, CDLP, LCC, SSSP)에 대한 유효성 검사 데이터 및 메타 데이터 (속성 파일) Matrix data를 사용하고 싶다면 확장자명이 .e로 끝나는 파일을 사용하면 된다. Matrix data 확장자명이 .e로 끝나는 Matrix data를 활용하기 위해선 몇가지 전처리가 필요하다. 1) v..
Spark Property Spark 는 Spark Application 실행과 관련된 자원을 설정할 수 있다. SparkConf, spark-shell, spark-submit, spark-defaults.conf 을 수정함으로써 설정 가능하다. property 적용 순서는 SparkConf, spark-shell, spark-submit, spark-defaults.conf 이다. 자주 사용되는 자원 설정 예 --num-executors : 전체 executor 개수 --executor-cores : 각 executor 당 core 개수 --executor-memory : 각 executor 당 memory 용량 Core, Memory 관련 설정 spark job 을 실행시킬 때, 우리가 컨트롤 할 ..
오류 WARN Executor: Issue communicating with driver in heartbeater org.apache.spark.rpc.RpcTimeoutException: Futures timed out after [10000 milliseconds] 원인 spark.executor.heartbeatInterval란 드라이버에 대한 각 익스큐터의 하트비트 간격입니다. 하트 비트는 Executor가 아직 실행 중임을 알리고 진행중인 작업을 메트릭으로 업데이트합니다. 따라서, 하트비트 통신 간격이 기본값을 초과하면 오류가 발생합니다. 기본값은 10s입니다. 이 값은 spark.network.timeout 보다 월등히 작아야합니다. 해결방법 spark.executor.heartbeatInt..
Java 버전 변경 (openjdk 11.0.2) # 자바 버전 확인 java -version # 기본 java 파일 위치 확인 which java ls -l /usr/bin/java # /usr/local에 openjdk 설치 cd /usr/local curl -O https://download.java.net/java/GA/jdk11/9/GPL/openjdk-11.0.2_linux-x64_bin.tar.gz tar zxvf openjdk-11.0.2_linux-x64_bin.tar.gz # JAVA_HOME(환경변수) 설정 # 기본 java 파일 위치를 /usr/local/jdk-11.0.2로 설정 sudo vim /etc/profile.d/jdk.sh export JAVA_HOME=/usr/loca..