ES데이터 spark로 분석하기
환경설치
$ brew install apache-spark
$ echo 'export PATH="/opt/homebrew/opt/curl/bin:$PATH"' >> ~/.zshrc
# For compilers to find curl you may need to set:
# export LDFLAGS="-L/opt/homebrew/opt/curl/lib"
# export CPPFLAGS="-I/opt/homebrew/opt/curl/include"
# For pkg-config to find curl you may need to set:
# export PKG_CONFIG_PATH="/opt/homebrew/opt/curl/lib/pkgconfig
## 로컬테스트 용도 이므로, local 환경으로 실행한다.
$ pyspark
http://localhost:4040/jobs/ 접속 확인
sh ES 연동
$ spark-shell \
--packages="org.elasticsearch:elasticsearch-spark-20_2.11:6.6.2"
// ES 연결을 위한 parameter
val esConf = Map(
"es.nodes" -> "localhost:9200" // es hostname 지정
)
// ES에서 data를 로딩하여 DataFrame으로 반환
val df = spark.read.format("org.elasticsearch.spark.sql").options(esConf).load("log-1")
java ES 연동
public static void main(String[] args) {
SparkConf conf = new SparkConf()
.setAppName("LoadEsTest")
.setMaster("local[*]")
.set("spark.es.nodes", DEV_END)
.set("spark.es.port", "portNumber")
.set("spark.es.net.http.auth.user", "userId")
.set("spark.es.net.http.auth.pass", "passwd");
JavaSparkContext jsc = new JavaSparkContext(conf);
JavaPairRDD<String, String> esRDD =
JavaEsSpark.esJsonRDD(jsc, "indexName");
esRDD.take(2).forEach(tuple -> {
System.out.println("result " + tuple._1 + "\n" + tuple._2);
});
}
jdk 버전맞춘다고 시간을 좀 버렸는데, ES 버전에 맞춰서 설정을 해야한다. ClassNotFound, 400 invalid request 등등 오류나면 일단 버전확인해보기 ES 7.5기준
- org.elasticsearch:elasticsearch-spark-20_2.11:7.5.0’
- JDK 1.8
- spark 2.4.0
- scala 2.11
python 연동시 발생한 문제
- 버전 의존성이 맞지않음.
- ES 7.5 > pyspark 2.4.5 & scala 2.11 > python3 > pyspark 3
- ES 버전업이 되어야 python 3, pyspark 3 이용 가능.
cluster
- spring boot에서 여러 spark 서버에 job 분산 실행요청을 보내려면,
persistence data
- 로컬 스파크를 종료하면, 메모리에 올라와있던 dataframe도 날라간다. 이걸 유지시키려면 farqute 로 저장해야함
// Write DataFrame to Parquet file dataFrame.write().parquet("path/to/destination");
visualising
- python을 쓰면 참 좋겠지만, 버전 의존성으로 하지못함.
- java, jdk1.8 으로 할수있는 비주얼라이징 : jfree?
- javafx는 jdk11 만 지원가능하게 바뀌었음.
— 나중에보기
- python spark 조합으로 비주얼라이징 : https://learn.microsoft.com/ko-kr/fabric/data-science/python-guide/python-visualizations