Sparkstreaming 消费Kafka写入Elasticsearch

本文介绍了如何在Spark Streaming项目中,配置指定版本的依赖,从Kafka消费数据,然后将数据写入Elasticsearch,并同时将Kafka的offset存储到MySQL,确保数据处理的可靠性。
摘要由CSDN通过智能技术生成

1. 版本说明

    jdk  1.8

    spark  2.3

     elasticsearch  7.4

     scala    2.11

     Kafka    0.10

 

2. pom 依赖

   <dependency>
      <groupId>org.apache.kafka</groupId>
      <artifactId>kafka_2.11</artifactId>
      <version>1.0.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.version}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_${scala.version}</artifactId>
      <version>${spark.version}</version>
      <scope>provided</scope>
    </dependency>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤实现: 1. 首先,需要在Spark中使用JDBC连接Oracle数据库,读取数据。可以使用以下代码: ```scala val jdbcUrl = "jdbc:oracle:thin:@localhost:1521:ORCL" val jdbcUsername = "username" val jdbcPassword = "password" val jdbcDriverClass = "oracle.jdbc.driver.OracleDriver" val connectionProperties = new Properties() connectionProperties.put("user", jdbcUsername) connectionProperties.put("password", jdbcPassword) connectionProperties.put("driver", jdbcDriverClass) val oracleDF = spark.read.jdbc(jdbcUrl, "table_name", connectionProperties) ``` 2. 接下来,将数据写入Kafka。可以使用以下代码: ```scala import org.apache.spark.sql.functions._ import org.apache.spark.sql.streaming.Trigger val kafkaBrokers = "localhost:9092" val kafkaTopic = "topic_name" val kafkaDF = oracleDF.select(to_json(struct("*")).alias("value")) .selectExpr("CAST(NULL AS STRING) AS key", "value") .writeStream .format("kafka") .option("kafka.bootstrap.servers", kafkaBrokers) .option("topic", kafkaTopic) .trigger(Trigger.ProcessingTime("10 seconds")) .start() ``` 3. 最后,使用Spark StreamingKafka读取数据,并将其写入Hive表。可以使用以下代码: ```scala import org.apache.spark.sql.SparkSession import org.apache.spark.sql.types.{StringType, StructType} import org.apache.spark.sql.functions._ val spark = SparkSession.builder .appName("KafkaToHive") .enableHiveSupport() .getOrCreate() val kafkaBrokers = "localhost:9092" val kafkaTopic = "topic_name" val schema = new StructType().add("column_name", StringType) val kafkaDF = spark.readStream .format("kafka") .option("kafka.bootstrap.servers", kafkaBrokers) .option("subscribe", kafkaTopic) .option("startingOffsets", "earliest") .load() .select(from_json(col("value").cast("string"), schema).alias("data")) .select("data.*") kafkaDF.writeStream .outputMode("append") .foreachBatch { (batchDF, _) => batchDF.write.mode("append").insertInto("hive_table") } .start() .awaitTermination() ``` 注意:在执行代码之前,需要先在Hive中创建相应的表,以便可以将数据写入其中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值