sparkStreaming读取kafka写入hive分区表

本文介绍了如何使用SparkStreaming从Kafka读取数据并写入Hive分区表,过程中遇到了未启用Hive支持的错误,通过检查和修改代码最终成功实现数据迁移。涉及的工具有Hadoop 3.1.3、Hive 3.1.2、Spark和Scala。
摘要由CSDN通过智能技术生成

sparkStreaming读取kafka写入hive分区表

使用版本: hadoop-3.1.3,hive-3.1.2。

开始这个spark不是很熟悉,但是项目要用到,这就要临阵磨枪了。开始写入hive的时候一直在报一个错误,的不是很懂,就是说我没有 .enableHiveSupport() 我就很蒙我明明有用到,但是他就是说我没用到。
不多说了上代码。

def test:Unit={
//设置用户名
System.setProperty("HADOOP_USER_NAME", "root")
写配置信息
    val conf:SparkConf = new SparkConf().setMaster("local[4]").setAppName("CounusmerController").set("spark.testing.memory","2147480000")
    val ssc = new StreamingContext(conf, Seconds(5))
    // kafka topic
    val topic:String = "test3"
    //消费者
    val groupId:String = "test3"
    //从 Redis 中读取 Kafka 偏移量
    val kafkaOffsetMap: Map[TopicPartition, Long] = OffsetManagerUtil.getOffset(topic,groupId)
    var kafkaDStream: InputDStream[ConsumerRecord[String, String]] = null
    if(kafkaOffsetMap!&
可以按照以下步骤实现: 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 Streaming从Kafka读取数据,并将其写入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中创建相应的表,以便可以将数据写入其中。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值