본문 바로가기

SPARK37

[spark] log4j 설정을 이용하여 스파크 쓰리프트 서버의 로그를 파일로 출력하는 방법 log4j 설정을 외부에서 주입하는 방법을 정리합니다.문제spark 스리프트 서버를 실행할 때는 로그를 파일로 저장하고, spark beeline 을 실행할 때는 콘솔로 출력해야 했습니다. 같은 로그 설정 파일을 이용하기 때문에 하나의 파일로 두 가지 설정을 출력해야 했습니다.해결 방법log4j 에 기본 설정을 두고, 외부에서 설정이 주입되면 외부 설정을 이용할 수 있게 하였습니다.다음과 같이 설정하여 외부에서 정보가 입력되지 않으면, 설정에 저장된 spark.root.logger 설정을 이용하고, 외부에서 입력되면 외부의 설정이 기본값을 덮어 써서 외부의 값을 이용하게 됩니다.# log4j 설정 spark.root.logger=INFO,consolespark.log.dir=.spark.log.file=.. 2024. 9. 30.
[spark] spark-shell 실행 시 발생하는 java.lang.NoSuchFieldError: JAVA_9 오류 처리 spark-shell을 실행할 때 다음과 같은 오류가 발생하는 경우가 있습니다. 24/02/22 13:09:59 INFO SparkEnv: Registering MapOutputTracker 24/02/22 13:09:59 INFO SparkEnv: Registering BlockManagerMaster 24/02/22 13:09:59 INFO BlockManagerMasterEndpoint: Using org.apache.spark.storage.DefaultTopologyMapper for getting topology information 24/02/22 13:09:59 INFO BlockManagerMasterEndpoint: BlockManagerMasterEndpoint up java.lang.. 2024. 2. 25.
[jupyter] spark 2.4.6 에서 jupyter 노트북 연동 시 TypeError: an integer is required (got type bytes) 오류 처리 스파크 2.4.6 버전에서 jupyter 노트북을 연결할 때 다음과 같은 오류가 발생합니다. 스파크 2.4.6은 python2 버전을 사용하게 되어 있는데, jupyter 노트북이 python3 으로 되어 있어서 오류가 발생합니다. TypeError: an integer is required (got type bytes) 스택 오버플로우 등에서 추천하는 해결 방법은 파이썬 3.7로 쥬피터를 실행하는 방법입니다. 기존에 설치된 파이썬 버전을 확인하고 3.7 버전을 설치 하면 동작합니다. 또는 스파크 소스코드를 수정하여 처리할 수 있습니다. SPARK_HOME/python/pyspark/cloudpickle.py 파일을 수정합니다. https://stackoverflow.com/questions/587003.. 2023. 3. 16.
[spark] pyspark 의 파이썬 패스 설정 pyspark 를 실행하는 서버와 실제 작업을 실행하는 YARN 클러스터의 파이썬 패스가 다를 경우 실행하는 파이썬 패스(PYSPARK_PYTHON)를 드라이버, 워커, 실행서버 별로 설정을 해야 합니다. 파이썬 패스 설정 2022. 3. 7.
[spark] java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V 오류 수정 스파크 작업을 실행하는 중에 기본 압축 코덱의 라이브러리가 없을 때 다음 오류가 발생합니다. Job aborted due to stage failure: Task 2 in stage 0.0 failed 4 times, most recent failure: Lost task 2.3 in stage 0.0 (TID 10, hadoop-worker-1.com, executor 2): java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.(Ljava/io/InputStream;Z)V at org.apache.spark.io.LZ4CompressionCodec.compressedInputStream(CompressionCodec.scala:122) a.. 2022. 1. 30.
[oozie] 우지 스파크 액션에서 리소스 매니저를 찾지 못하는 경우(Retrying connect to server: 0.0.0.0/0.0.0.0:8032.) 우지 스파크 액션에 리소스 매니저를 찾지 못하는 경우는 스파크의 리소스 매니저 기본 설정값을 추가하면 됩니다. 오류 내용 Retrying connect to server: 0.0.0.0/0.0.0.0:8032. Already tried 0 times(s). spark-defaults.conf 설정 추가 spark-defaults.conf에 다음 내용을 추가합니다. spark.hadoop.yarn.resourcemanager.address host-name:8050 2022. 1. 26.
[oozie] 우지 스파크 잡에서 java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found 오류 처리 우지 스파크 액션에서 SparkMain not found 오류가 발생할때는 oozie.use.system.libpath 를 true로 설정하면 된다. Failing Oozie Launcher, java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SparkMain not found at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2425) at org.. 2022. 1. 25.
[spark] spark2와 hive2 메타스토어 연동 스파크2와 하이브메타 스토어를 연동하는 방법은 다음과 같습니다. 스파크-하이브 라이브러리 추가 spark-hive_2.11-2.4.6.jar 를 다운로드하고 ${SPARK_HOME}/jars 에 추가 스파크2용 하이브1 라이브러리 빌드를 추가 hive-cli-1.2.1.spark2.jar 를 다운로드하고 ${SPARK_HOME}/jars 에 추가 hive-beeline-1.2.1.spark2.jar hive-exec-1.2.1.spark2.jar hive-jdbc-1.2.1.spark2.jar hive-metastore-1.2.1.spark2.jar libthrift-0.9.3.jar libfb303-0.9.3.jar ${SPARK_HOME}/conf 에 hive-site.xml 추가 hive-site... 2021. 6. 21.
[scala] http get으로 데이터 호출하여 문자열 작성 scala에서 http get으로 데이터를 호출하여 문자열을 작성하는 간단한 예제 입니다. 2021. 6. 17.
[hive] hive의 spark 엔진에서 Execution Error, return code 30041 오류 하이브에서 spark 엔진으로 작업할 때 Execution Error, return code 30041 오류가 발생하면 이는 스파크 엔진의 익스큐터가 실행 될 때 메모리가 부족해서 발생하거나 코어 개수가 부족할 때 발생합니다. 설정을 이용해 스파크 설정을 추가합니다. 2021. 6. 1.
[hive] hive on spark 작업 중 create Spark client due to invalid resource request: Required executor memory (9671), overhead (1706 MB), and PySpark memory (0 MB) is above the max threshold 오류 하이브에서 작업 엔진을 이용하는 중에 스파크 익스큐터의 메모리가 부족하면 이런 오류가 발생할 수 있습니다. 하이브 설정에서 스파크 익스큐터의 메모리를 설정하면 됩니다. 이 경우 스파크 익스큐터의 메모리가 9671로 설정되어 있어서 부족하여 오류가 발생합니다. 따라서 스파크 드라이버와 익스큐터의 메모리를 줄여주면 됩니다. 또는 yarn 설정에서 컨테이너에 메모리를 설정할 수 있는 메모리를 늘려주면 됩니다. Launching Job 1 out of 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer= In order to limit the maximum number of r.. 2021. 5. 30.
[spark] spark에서 snappy 라이브러리를 찾지 못할때 수정 방법 : java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy 스파크에서 snappy 압축 방식으로 파일을 쓸 때 라이브러를 가져오지 못할 때 다음과 같은 오류가 발생합니다 Caused by: java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy()Z at org.apache.hadoop.util.NativeCodeLoader.buildSupportsSnappy(Native Method) at org.apache.hadoop.io.compress.SnappyCodec.checkNativeCodeLoaded(SnappyCodec.java:63) at org.apache.hadoop.io.compress.SnappyCodec.getCompressorType(S.. 2021. 3. 18.
[spark] __spark_libs__.zip does not exist 오류 해결 방법 스파크쉘으르 이용하여 작업을 실행하면 작업에 필요한 라이브러리를 묶어서 hdfs에 올리고, 이 라이브러리를 사용해서 워커노드에서 작업을 처리합니다. 따라서 hdfs연결 설정이 올바르지 않으면 해당 오류가 발생합니다. java.io.FileNotFoundException: File file:/tmp/spark-126d2844-5b37-461b-98a4-3f3de5ece91b/__spark_libs__3045590511279655158.zip does not exist at org.apache.hadoop.fs.RawLocalFileSystem.deprecatedGetFileStatus(RawLocalFileSystem.java:611)해결방법 /etc/spark/spark-env.sh에서 configura.. 2020. 9. 14.
[spark] Service 'sparkDriver' could not bind on a random free port. 오류 해결 스파크쉘의 마스터를 yarn으로 설정하고 yarn 클러스터 외부의 클라이언트에서 실행할 때 다음의 오류가 발생하는 경우가 있습니다. 오류 $ ./spark-shell --master yarn Setting default log level to "WARN". To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel). 20/09/09 16:01:26 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 20/09/09 16:0.. 2020. 9. 13.
[spark-sql] tez.lib.uris is not defined 오류 처리 방법 Spark SQL을 이용할 때 tez.lib.uris is not defined in the configuration 오류가 발생하는 경우 hive-site.xml파일에 tez 환경 설정을 넣어주면 됩니다. : org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration; 설정 추가 tez.lib.uris hdfs:///apps/tez/tez.tar.gz tez.use.cluster.hadoop-libs true 2020. 1. 14.
[spark] org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration; 오류 해결 방법 Spark SQL을 이용할 때 다음의 오류가 발생하는 경우 tez 환경 설정을 넣어주면 됩니다. : org.apache.spark.sql.AnalysisException: java.lang.RuntimeException: org.apache.tez.dag.api.TezUncheckedException: Invalid configuration of tez jars, tez.lib.uris is not defined in the configuration; 설정 tez.lib.uris hdfs:///apps/tez/tez.tar.gz tez.use.cluster.hadoop-libs true 2019. 11. 20.
[spark] JDBC드라이버를 이용하여 spark sql로 데이터 가져오는 방법 스파크 SQL에서는 JDBC드라이버를 이용해서 데이베이스에 직접 접근해서 정보를 가져올 수 있습니다. spark-shell, spark-submit으로 실행할 때 데이터베이스에 접근하기 위한 jar 파일을 함께 제공해야 합니다. 샘플 코드 import java.util.Properties // 프로퍼티 설정 val prop = new Properties() prop.put("user", "db_user_name") prop.put("password", "db_password") // 데이터베이스 연결 및 뷰 생성 val tableDf = spark.read.jdbc("jdbc:mysql://mysql_url:mysql_port/database_name", "table_name", prop) tableDf.. 2019. 11. 13.
[spark] Exception in thread "main" java.sql.SQLException: No suitable driver 오류 해결 방법 스파크 SQL에서는 JDBC 드라이버를 이용해서 데이터베이스에 접근할 때 다음과 같은 오류가 발생하는 경우가 있습니다. 에러 로그 19/11/12 03:07:36 INFO StateStoreCoordinatorRef: Registered StateStoreCoordinator endpoint Exception in thread "main" java.sql.SQLException: No suitable driver at java.sql.DriverManager.getDriver(DriverManager.java:315) at org.apache.spark.sql.execution.datasources.jdbc.JDBCOptions$$anonfun$6.apply(JDBCOptions.scala:105) at.. 2019. 11. 13.
[spark] Unable to instantiate SparkSession with Hive support because Hive classes are not found. 오류 해결 방법 EMR 5.24에서 우지와 스파크 sql을 이용하여 작업을 하려고 하면 다음과 같은 오류가 발생합니다. 에러로그 Caused by: java.lang.IllegalArgumentException: Unable to instantiate SparkSession with Hive support because Hive classes are not found. at org.apache.spark.sql.SparkSession$Builder.enableHiveSupport(SparkSession.scala:870) at com.sec.bigdata3.analyzer.scala.profile.RunestoneProfile$.main(RunestoneProfile.scala:32) at com.sec.bigdata3.. 2019. 11. 8.
[spark] AWS EMR에서 Caused by: java.lang.ClassNotFoundException: org.apache.kafka.common.serialization.ByteArrayDeserializer 오류 발생시 해결 방법 AWS-EMR 에서 카프카와 스파크를 연동할 때 다음의 오류가 발생하면 kafka-client jar 파일을 추가해 주면 됩니다. scala> val query = df.writeStream.outputMode("append").format("console").start() java.lang.NoClassDefFoundError: org/apache/kafka/common/serialization/ByteArrayDeserializer at org.apache.spark.sql.kafka010.KafkaSourceProvider.createSource(KafkaSourceProvider.scala:74) at org.apache.spark.sql.execution.datasources.DataSource.. 2019. 10. 14.
[spark] AWS-EMR에서 스파크와 카프카 연동에서 발생한 Caused by: java.lang.ClassNotFoundException: kafka.DefaultSource 오류 해결 방법 AWS EMR에서 스파크와 카프카를 연동할 때 EMR은 카프카 라이브러리를 기본적으로 제공하지 않기 때문에 다음과 같은 오류가 발생합니다. scala> val df = spark.readStream.format("kafka").option("kafka.bootstrap.servers","localhost:9092").option("subscribe","test").load() java.lang.ClassNotFoundException: Failed to find data source: kafka. Please find packages at https://cwiki.apache.org/confluence/display/SPARK/Third+Party+Projects at org.apache.spark.sq.. 2019. 10. 14.
[spark] <console>:23: error: overloaded method value option with alternatives: 오류 스파크를 스파크 쉘(spark-shell)을 이용하여 처리할 때 카프카와 연동할 때 다음의 오류가 발생하는 경우가 있습니다. scala> val df = spark.readStream.format("kafka").option("kafka.bootstrap.servers=localhost:9092").option("subscribe=test").load() :23: error: overloaded method value option with alternatives: (key: String,value: Double)org.apache.spark.sql.streaming.DataStreamReader (key: String,value: Long)org.apache.spark.sql.streaming.DataS.. 2019. 10. 14.
[spark-dataframe] 데이터 프레임에 새로운 칼럼 추가 스파크 데이터프레임에서 칼럼을 추가하거나, 한 칼럼의 값을 다른 값으로 변경 할 때는 withColumn 함수를 이용합니다. val df = spark.read.json("/user/people.json") scala> df.show() +----+-------+ | age| name| +----+-------+ |null|Michael| | 30| Andy| | 19| Justin| +----+-------+ // 새로운 칼럼 추가 scala> df.withColumn("xx", $"name").show() +----+-------+-------+ | age| name| xx| +----+-------+-------+ |null|Michael|Michael| | 30| Andy| Andy| | 19| .. 2019. 8. 8.
[spark] MLib 라이브러리 머신러닝(기계학습)은 인공 지능의 한 분야로 컴퓨터가 학습을 할 수 있도록 알고리즘과 기술을 개발하는 것입니다. 예를 들어 기계학습을 통해 스팸메일을 가려낼 수 있습니다. 머신러닝의 핵심은 표현과 일반화 입니다. 표현이란 데이터의 평가이며 일반화는 아직 알 수 없는 데이터이 처리입니다. 스파크의 MLib는 이 머신러닝 처리를 가능하게 하는 라이브러리 입니다. 기본적으로 제공하는 알고리즘은 다음과 같습니다. 통계(Statistics) 분류(Classification) 회귀(Regression) 협업 필터링(Collaborative Filtering) 클러스터링(Clustering) 차원 축소(Dimensionality Reduction) 특징 추출(Feautre Extraction) 빈발 패턴 마이닝(Fr.. 2019. 4. 11.
[spark] 스파크 2.0.2 버전 SQL에서 발생하는 MalformedURLException: unknown protocol: hdfs 오류 처리 현재 사용하고 있는 스파크 2.0.2버전에서 SQL을 이용하여 하이브의 ADD JAR 명령을 실행하면 다음과 같은 오류가 발생합니다. scala> sql("""ADD JAR 'hdfs:///user/a.jar'""")scala> sql("""ADD FILE 'hdfs:///user/b.txt'""") 19/03/22 06:40:35 INFO SparkSqlParser: Parsing command: ADD JAR 'hdfs:///user/a.jar' java.net.MalformedURLException: unknown protocol: hdfs at java.net.URL.(URL.java:600) at java.net.URL.(URL.java:490) at java.net.URL.(URL.java:4.. 2019. 3. 22.
[spark] 스파크 2.0의 성능개선-직렬화,off-heap,옵티마이저 RDD, DataFrame, Dataset의 직렬화 개선 스파크는 성능개선을 위해서 프로젝트 텅스텐을 진행하면서 RDD를 DataFrame, Dataset 으로 개선하였다. RDD -> DataFrame(v1.4) -> Dataset(v1.6) -> DataFrame, Dataset 통합(v2.0) 이 개선을 진행하면서 속도를 높이기 위해서 데이터를 더 빨리 가져오기 위해서 자바직렬화를 이용하던것을 kyro로 바꾸고 또, Encoder/Decoder를 직접 개선하였다. 메모리에 있는 데이터를 셔플이 발생하면 다른 곳으로 옮기게 되고, 이 시점에 데이터를 직렬화/역직렬화 하는 비용을 Encoder/Decoder를 이용하여 개선할 수 있었다. (데이타 브릭스 자료) off-heap 모델 또한 스파크의 메모리.. 2019. 3. 7.
[spark] 스파크 작업 실행하고 처리시간(elapsed) 확인 스칼라쉘에서 스파크로 작업을 작업을 하고 처리시간을 확인하고 싶을때는 SparkSession의 time() 함수를 이용합니다. spark.time(실행 함수) spark.time(sql("select * from tbl")) AWS EMR이의 스파크에는 해당 함수가 없어서 SparkSession에서 함수를 가져와서 이용하면 됩니다. 다른 작업에서도 처리 시간을 알고 싶을 때 이용하면 됩니다. scala> time(sql("use db"))Time taken: 12 ms res7: org.apache.spark.sql.DataFrame = [] 위와 같이 처리하면 Time taken으로 처리 시간을 확인할 수 있습니다. SparkSession 스칼라 소스코드: 바로가기 2019. 3. 6.
[빅데이터] ORC와 Parquet 파일 저장 형식 빅데이터는 효율적인 데이터 저장을 위해 여러가지 저장 형식이 있습니다. 처음에는 TXT 형식으로 데이터를 저장하였지만, 데이터 저장공간과 처리 속도면에서 문제가 발생하면서 효율적인 처리 방식을 고민하게 되었습니다. 이때 클라우데라의 더그 커팅이 trevini, 호튼웍스의 오웬 오말리가 ORC 파일 포맷을 만들었습니다. ORC는 압축률이 높고, 스키마를 가지고 있으며, 처리속도가 빠르지만 하이브에서만 사용할 수 있었습니다(현재는 아님). 회사가 다르다 보니 통합된 형태로 발전하지 못하고 각각 발전하다 트위터에서 Parquet을 발표 했습니다. Parquet도 ORC와 유사하게 칼럼기반의 구조를 가지고 있습니다. 이제 ORC와 Parquet에 대해서 알아보겠습니다. ORC칼럼 기반 저장 포맷 하이브의 RC .. 2019. 2. 19.
[scala] 이클립스를 이용하여 스파크의 스칼라 개발환경 설정하기 스칼라(scala) 개발을 연습하기 위해서 이클립스에 스칼라 개발 환경을 설정하고, 빌드하여 jar 파일을 만드는 것까지 설정하는 방법을 정리해 보겠다. 우선 이클립스를 설치한다. 저는 가장 최신버전인 4.7 Oxygen 버전을 설치하였다. 그리고 Help -> Eclipse Market Place 에서 scala를 검색하여 Scala IDE 4.7.x 를 설치한다. 이 플러그인을 설치하면 스칼라 라이브러리도 설치된다. 설치후 File -> New -> Scala Project 를 선택하여 스칼라 프로젝트를 생성한다. 그리고 Scala Library container에서 오른쪽 버튼을 클릭하여 properties 로 들어가서 스칼라 라이브러리를 2.11로 변경한다. 현재 스파크의 스칼라 버전이 2.11이.. 2018. 6. 11.
[eclipse][scala] 이클립스에서 scala 빌드하기 이클립스에서 메이븐을 이용하여 spark 에서 사용할 수 있는 scala 프로젝트를 빌드하는 방법은 다음과 같다. - 메이븐 pom.xml 설정의 디펜던시 추가 org.scala-lang scala-library ${ver.scala} org.apache.spark spark-core_${ver.scala.main} ${ver.spark} org.apache.spark spark-sql_${ver.scala.main} ${ver.spark} org.apache.spark spark-hive_${ver.scala.main} ${ver.spark} - 메이븐 pom.xml 의 빌드 설정 추가 net.alchim31.maven scala-maven-plugin 3.2.1 process-resources com.. 2018. 6. 7.