2021년 11월 13일 토요일

[ Glue ] SageMaker와 Job Script 사용 시 Spark Session 차이점


SageMaker는 Spark-Shell과 같이 실행 시 Spark 세션 변수가 초기화 된다.

따로 define하지 않아도 print(spark) 하면 값이 할당 된 것을 볼 수 있다.

추가로 spark session 변수를 할당 하여 작업 시, 여러가지 에러를 맛본다.

반면에 Glue Job Script는 Spark 세션변수를 선언해줘야 한다.



[ SageMaker ]

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
glueContext = GlueContext(SparkContext.getOrCreate())

df = spark.createDataFrame(
    [(1, "foo", "USA"),(2, "bar", "KOREA"),],
    ["id", "label", "country"]
)

df.printSchema()
df.createOrReplaceTempView("test")
spark.sql("select * from test").show()




[ Glue Job Script ]

import ...

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

....
job.commit()

[ AWS ] CloudWatch로 경보알림 설정

 [ elasticach redis에 cpu / memory 70%이상 사용시 경보 ]


1. CloudWatch 접속

https://ap-northeast-1.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-1#alarmsV2:alarm/elasticach-memory?

참조 : https://aws.amazon.com/ko/elasticache/redis/faqs/


2. 좌측경보메뉴 클릭 -> 경보생성


3. 해당지표 검색하여 경보생성

- CPU 관련 지표 : EngineCPUUtilization

- 메모리관련 지표 : DatabaseMemoryUsagePercentage


4. Amazon SNS에서 주제/구독 생성 및 확인


5. 구독시 설정한 메일에서 구독확인



지표 레지스터 정리표

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/classic/elb-cloudwatch-metrics.html#loadbalancing-metrics-clb

[ Nifi ] Firebase Bigquery Nifi 연결

파이어베이스 BigQuery 설정

 https://spiralmoon.tistory.com/entry/Firebase-Firebase%EC%97%90-BigQuery-%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0


서비스계정만들기 

https://cloud.google.com/docs/authentication/getting-started?hl=ko


Bigquery jdbc driver jar 다운로드

https://dbschema.com/jdbc-driver/GoogleBigQuery.html

  • Required File(s): googlebigqueryjdbc42.jar
  • Java Driver Class: com.simba.googlebigquery.jdbc42.Driver
  • URL: jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;ProjectId={DB};OAuthType=1;
  • Website: Google Big Query

심바 JDBC PDF
file:///C:/Program%20Files/Simba%20ODBC%20Driver%20for%20Google%20BigQuery/Simba%20ODBC%20Driver%20for%20Google%20BigQuery%20Install%20and%20Configuration%20Guide.pdf


각 나이파이 lib디렉토리에
google-http-client-jackson2-1.28.0.jar
google-api-client-1.28.0.jar
GoogleBigQueryJDBC42.jar 
추가


구글클라우드콘솔
https://console.cloud.google.com/bigquery?project=zeliter-1337

Bigquery에 연결하는 7가지 방법
https://hevodata.com/learn/bigquery-etl-tools/#b7

[ Airflow ] 초기셋팅

예제Airflow실행하기

 https://aldente0630.github.io/data-engineering/2018/06/17/developing-workflows-with-apache-airflow.html


도커로 Airflow 실행하기

https://jybaek.tistory.com/922


Airflow Example 지우는 법

airflow.cfg or docker-compose.yml

load_examples = False


기본 명령어 

[ 목록 ]

airflow dags list

airflow tasks list tutorial

airflow tasks list tutorial --tree


[ 테스트 ]

airflow dags test tutorial '2021-11-08'

airflow tasks test tutorial print_date 2015-06-01


[ 백필 ]

airflow dags backfill tutorial \

    --start-date 2015-06-01 \

    --end-date 2015-06-07



Cloudera Manager [3] - 클러스터 교체시 주의할 점

 

CDH 서버 스펙업시

HDFS시스템을 꺼놓고 ec2유형변경을 하면 

다시 시작시 hdfs가 인식을 못할 경우가 있다.


HDFS가 다시 잡을 수 있게 시스템을 킨 상태에서

EC2종료후 유형변경 작업을 한다.

2021년 11월 7일 일요일

[ Docker ] 기본 명령어


[ 도커 실행 ]

docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]


$ docker run ubuntu:16.04

컨테이너 시작, 해당 컨테이너가 없다면 다운로드 후 컨테이너 생성 후 시작


$ docker run --rm -it ubuntu:16.04 /bin/bash

--rm : 프로세스가 종료되면 컨테이너도 삭제

-it : 터미널 입력을 위한 옵션

/bin/bash : 해당 컨테이너의 Bash Shell 접속


$ docker run -d -p 1234:6397 redis

-d : 백그라운드로 실행

-p : 포트연결, 1234의 호스트 포트를 6379의 컨테이너 포트로 연결

- redis test example 

    $ telnet localhost 1234

    set mykey hello

    +OK

    get mykey

    $2

    hello


$ docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true --name mysql mysql:5.7

-e : 컨테이너 내에서 사용할 환경변수 (위 옵션 내용 = pwd없이 root계정 접속 )

--name : 컨테이너 이름 설정



[ 컨테이너 목록 확인 ]

docker ps [OPTIONS]

$ docker ps : 실행 중인 컨테이너 목록

$ docker ps -a : 실행 중 + 실행 종료된 컨테이너 목록


[ 컨테이너 중지 ]

docker stop [OPTIONS] CONTAINER [CONTAINER...]

$ docker stop ${DOCKER_CONTAINER_ID} : 다른 ID랑 중복되지 않는다면 64글자 다 적지 않아도 됨


[ 컨테이너 삭제 ]

docker rm [OPTIONS] CONTAINER [CONTAINER...]

$ docker rm ${CONTAINER_ID_1} ${CONTAINER_ID_2} : 여러 컨테이너 동시 삭제 가능

$ docker rm -v $(docker ps -a -q -f status=exited) : 중지된 컨테이너 전체 삭제


[ 이미지 목록 확인 ]

docker images [OPTIONS] [REPOSITORY[:TAG]] 

$ docker images : 다운로드한 이미지 목록 확인


[ 이미지 다운로드 ]

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

$ docker pull ubuntu:14.04 : 이미지가 중복되면 최신버전으로 재 다운로드


[ 이미지 삭제 ]

docker rmi [OPTIONS] IMAGE [IMAGE...]

$ docker rmi ${IMAGE_ID}


[ 컨테이너 로그 보기 ]

docker logs [OPTIONS] CONTAINER

$ docker logs --tail 10 ${CONTAINER_ID}

$ docker logs -f 10 ${CONTAINER_ID} : 실시간 로그 생성 확인


[ 컨테이너 명령어 실행하기 ]

docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

: 실행 중인 컨테이너에 명령어 실행

$ docker exec -it mysql /bin/bash

$ mysql -uroot

mysql> show databases;


$ docker exec -it mysql mysql -uroot : 바로 mysql command line에 connect


[ 컨테이너 정보 보기 ]

docker inspect CONTAINER_ID


[ 볼륨 옵션 ]

mysql같은 경우 컨테이너가 삭제되면 해당 데이터도 삭제되기 때문에

데이터 볼륨을 컨테이너 외부 저장소( local, S3 등 )에 link연결


# before

$ docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true mysql


# after

$ docker run -d -p 3306:3306 -e MYSQL_ALLOW_EMPTY_PASSWORD=true \

-v /my/local/datadir:/var/lib/mysql mysql



[ Compose ]

설정파일을 이용한 도커컴포즈

https://docs.docker.com/compose/


$ curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

$ chmod +x /usr/local/bin/docker-compose : 권한변경

$ docker-compose version : 버전 확인

$ docker-compose up : 작성된 docker-compose.yml 파일 실행



참조 : https://subicura.com/2017/01/19/docker-guide-for-beginners-2.html

2021년 10월 23일 토요일

Windows에 Docker를 설치하여 Jupyter Lab 실행

 

[ Windows에 Docker설치 ]


# Power Shell을 관리자권한으로 연 후, 명령어

$ dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

$ dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart


#x64 머신용 최신 WSL2 Linux 커널 업데이트 패키지 설치 

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi


#버전 설정

$ wsl --set-default-version 2


#아래 URL에서 Windows용 Docker설치

https://www.docker.com/products/docker-desktop


#확인

$ docker version

$ docker ps


참조 : 

https://www.lainyzine.com/ko/article/a-complete-guide-to-how-to-install-docker-desktop-on-windows-10/


[ docker ps 명령어 에러시 ]

error during connect: In the default daemon configuration on Windows, the docker client must be run with elevated privileges to connect


#해당 윈도우에서 가상컴퓨터를 만들 수 있도록 설절

PowerShell에서 

$ Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All


참조 : https://docs.microsoft.com/ko-kr/virtualization/hyper-v-on-windows/quick-start/enable-hyper-v



[ WSL2에 우분투 설치 ]

https://www.44bits.io/ko/post/wsl2-install-and-basic-usage



[ Jupyter Lab 실행 ]


#설치 및 실행

$ docker create -p 8888:8888 --user root -e GRANT_SUDO=yes --name awsanalytics jupyter/minimal-notebook

$ docker start awsanalytics 

$ docker logs awsanayltics 

... 토큰 값 확인 후 로그인시 사용..


# 웹페이지에서 확인

http://127.0.0.1:8888 주소로 접속해 아래와 같은 화면 확인






















# Windows용 Docker에서도 실행 및 CLI확인










# aws 사용위한 패키지 설치 [ jupyter terminal ]

$ pip install awscli

$ sudo apt update

$ sudo apt install groff -y

$ sudo apt install less -y