Apache Spark, MariaDb 연결

ManduTheCat·2023년 3월 18일
0

빅데이터

목록 보기
1/1
post-thumbnail

1. Mysql Maria Connector 준비

  • 압축 해제
  • 다운로드한 커넥터 압출풀고 jar 파일 이동
  • 저같은 경우 도커 컨테이너로 spark 구성 하였기에 docker cp 를 사용해 컨테이너 내부로 옮겼습니다
  • 자신에 환경에 맞게 spark 내부 jar 폴더에 넣으면됩니다.
 docker cp mysql-connector-j-8.0.32.jar spark-master:/spark/jar

왜 mariaDB 커넥터를 사용하지 않나요?

  • 처음에 mariaDB 커넥터를 사용했고 jdbc 를 통해 정상접근 확인.
  • 하지만 spark 상에서 dataframe.show() 를 사용해 출력하면 데이터 자리에 컬럼명이 들어간체 오는걸로 확인했습니다.

MariaDB 조회 결과

Spark application 결과

+--------+
|nickname|
+--------+
|nickname|
|nickname|
|nickname|
+--------+

2.Spark Application 작성

Maria db 에 연결 하고 테이블을 읽어오는 pyspark application 입니다.

from pyspark.sql import SparkSession

# 스파크 세션 생성
spark = SparkSession.builder \
    .appName("MariaDB Connection Example") \
    .getOrCreate()
url = 'jdbc:mysql://maria-db:3306/dbName'

## dataFram api 활용 db 접근 아이디 비밀번호는 개인환경에 맞춰서 작성
jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", url) \
    .option("user", "user") \
    .option("password", "pw") \
    .option("dbtable", "member") \
    .load()

jdbcDF.show()


다음 코드는 외부 접근이 가능한 디비 유저, 비밀번호 를 입력하면됩니다.
외부 접근되는 계정이 아닌 root 를 사용할경우 경우에 따라 permission 애러나 발생할수 있습니다.

    .option("user", "user") \
    .option("password", "pw") \

작성후 saprk/app/ 에 저장했습니다 각자 환경에 맞춰 저장하시면됩니다.

3.Spark-submit 으로 실행

실행에 들어가기 앞서 만약 MariaDB 가 도커 컨테이너로 구성 되어있다면 spark클러스터와 같은 네트워크 에 구성되어 있는지 화인하셔야합니다.
연결이 안되 있다면 다음 명령어를 사용해 연결하세요

docker network connect 스파크_네트워크 MariaDB_컨테이너이름

실행

./spark-submit --driver-class-path /usr/share/java/mysql-connector-8.0.32.jar --jars /usr/share/java/mysql-connector-8.0.32.jar  ../app/pyspark/dbConnect.py

결과

만약

출력시 UnicodeEncodeError: 'ascii' codec can't encode character 에러 발생 한다면
해결책 으로 다음 과 같이 환경변수를 추가하면됩니다

export PYTHONIOENCODING=utf8

https://stackoverflow.com/questions/39662384/pyspark-unicodeencodeerror-ascii-codec-cant-encode-character

profile
알고리즘, SpringBoot, Java, DataBase

0개의 댓글