Spark로 개발하는 방법에는 여러가지가 있지만, 일단은 PySpark를 사용하고 있습니다
다른 이유보다 너무 쉽게 됩니다.
현재 개발환경은, 개발서버에 Pycham 이 Direct로 붙는다는 환경이고 방화벽등의 환경에서는 달라질수 있습니다
먼저 제 환경은 다음과 같습니다
개발툴 : Pycham Professional
- 서버의 파이썬 리모트 인터프리터 사용
- 시스템 기본 파이썬 인터프리터 사용
플랫폼 : HDP(Hortonworks Data Platform) 3.0.1
import os
import sys
os.environ['SPARK_HOME'] = "/usr/hdp/3.0.1.0-187/spark2"
os.environ['HIVE_HOME'] = "/usr/hdp/3.0.1.0-187/hive"
os.environ["HADOOP_USER_NAME"] = "spark"
os.environ['PYSPARK_SUBMIT_ARGS'] = '--master yarn --deploy-mode client ' \
'--num-executors 11 --executor-memory 19G --executor-cores 5 ' \
'--driver-memory 1G pyspark-shell'
sys.path.append("/usr/hdp/3.0.1.0-187/spark2/python")
from pyspark.sql import SparkSession
from pyspark.sql.functions import *
spark = SparkSession.builder.appName("pySpark1_redeyesofangel").getOrCreate()
spark.sql("select current_timestamp() ").show()
spark.stop()
소스는 매우 간단합니다. 해당코드는 Yarn client 모드로 동작하게 됩니다. execturor 및 core는 각 클러스터 성능에 따라 맞춰주시면 됩니다.
기본적으로 서버에서 제공하는 파이썬 인터프리터를 사용할때(본예제에서는 우분투 16.04의 Python 2.7 사용중) pip install py4j 는 설치먼저 하셔야 합니다.
단순히 해당 코드는 현재시간을 보여주는 코드입니다. Pycham에서 바로 run을 하면 다음과 같은 결과를 볼수 있습니다
ssh://dev@192.168.0.140:22/usr/bin/python -u /tmp/pycharm_project_484/pySpark_1.py
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
+--------------------+
| current_timestamp()|
+--------------------+
|2018-11-29 17:27:...|
+--------------------+
Process finished with exit code 0