簡體   English   中英

Python 上的 kafka 和 Spark Streaming 的一個壞問題

[英]A bad issue with kafka and Spark Streaming on Python

注意這與我在本網站上的第一篇文章中遇到的問題不同,但它是同一個項目。

我正在使用火花流從 kafka 將一些文件攝取到 PostgreSQL 中。 這些是我的項目步驟:

1- 為 kafka 生產者創建一個腳本(完成,它工作正常)

2- 創建一個從 kafka 生產者讀取文件的 python 腳本

3- 將文件發送到 PostgreSQL

對於 python 和 postgreSQL 之間的連接,我使用 psycopg2。 我也在使用 python 3 和 java jdk1.8.0_261 並且 kafka 和 Spark 流之間的集成工作正常。 我有 kafka 2.12-2.6.0 和 spark 3.0.1,我在我的 Spark jars 目錄中添加了這些 jars:

  • postgresql-42.2.18 -spark-streaming-kafka-0-10-assembly_2.12-3.0.1
  • spark-token-provider-kafka-0.10_2.12-3.0.1
  • kafka-clients-2.6.0
  • spark-sql-kafka-0-10-assembly_2.12-3.0.1

我還必須下載 VC++ 才能解決另一個與我的項目相關的問題。

這是我的一段 python 代碼,它從 kafka 生產者那里獲取文件並將它們發送到我在 postgreSQL 中創建的 postgreSQL 表中,我遇到了問題:

query = satelliteTable.writeStream.outputMode("append").foreachBatch(process_row) \
.option("checkpointLocation", "C:\\Users\\Vito\\Documents\\popo").start()
print("Starting")
print(query)
query.awaitTermination()
query.stop()

SatelliteTable 是我使用 kafka 生產者的文件創建的 spark 數據框。 process_row 是將流數據幀的每一行插入到 postgre 表中的函數。 這里是:

def process_row(df, epoch_id):
for row in df.rdd.collect():
    cursor1.execute(
        'INSERT INTO satellite(filename,satellite_prn_number, date, time,crs,delta_n, m0, 
                   cuc,e_eccentricity,cus,'
        'sqrt_a, toe_time_of_ephemeris, cic, omega_maiusc, cis, i0, crc, omega, omega_dot, idot) 
                    VALUES (%s,%s,%s,'
        '%s,%s,%s, %s, %s, %s, %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', row)
connection.commit()
pass

我在運行代碼時遇到的問題發生在query = satelliteTable.writeStream.outputMode("append").foreachBatch(process_row) \\ .option("checkpointLocation", "C:\\\\Users\\\\Vito\\\\Documents\\\\popo").start()簡而言之就是以下內容:

py4j.protocol.Py4JJavaError: An error occurred while calling 
z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: org.apache.spark.SparkException: Job aborted due to stage failure: Task 0 in stage 0.0 failed 1 
times, most recent failure: Lost task 0.0 in stage 0.0 (TID 0, DESKTOP- 
D600TY.homenet.telecomitalia.it, executor driver): java.lang.NoClassDefFoundError: 
org/apache/commons/pool2/impl/GenericKeyedObjectPoolConfig

=== Streaming Query ===
Identifier: [id = 599f75a7-5db6-426e-9082-7fbbf5196db9, runId = 67693586-27b1-4ca7-9a44-0f69ad90eafe]
Current Committed Offsets: {}
Current Available Offsets: {KafkaV2[Subscribe[bogi2890.20n]]: {"bogi2890.20n":{"0":68}}}

Current State: ACTIVE
Thread State: RUNNABLE

有趣的事實是,同樣的代碼在我朋友的筆記本電腦上運行良好,帶有 spark 3.0.0。 所以,我認為我缺少一些罐子或其他東西,因為代碼是正確的。

任何的想法? 謝謝。

你錯過了這個 jar https://mvnrepository.com/artifact/org.apache.commons/commons-pool2試試那個特定的版本https://mvnrepository.com/artifact/org.apache.commons/commons-pool2/2.6 .2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM