Spark Streaming 使用HDFS数据作处理

Spark Streaming 读取HDFS数据

首先开启相关服务,如spark、hadoop(hdfs,yarn),根据需求考虑开启hive服务。

1. 创建maven工程并导包

<dependencies>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.12</artifactId>
            <version>3.1.1</version> <!-- 请替换为具体的 Spark 版本号,例如 3.1.3 -->
        </dependency>

        <!-- Spark SQL -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-sql_2.12</artifactId>
            <version>3.1.1</version> <!-- 请替换为具体的 Spark 版本号 -->
        </dependency>

        <!-- 如果您需要连接 Hive,请添加以下依赖 -->
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-hive_2.12</artifactId>
            <version>3.1.1</version> <!-- 请替换为具体的 Spark 版本号 -->
        </dependency>
        <!-- MySQL JDBC 驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.27</version> <!-- 不建议使用最新版本 -->
        </dependency>
        <dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-streaming_2.12</artifactId>
            <version>3.1.1</version><!-- 请替换为具体的 Spark 版本号 -->
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-client</artifactId>
            <version>3.1.4</version><!-- 请替换为具体的 Hadop 版本号 -->
        </dependency>
    </dependencies>

2. 导入相关文件

导入你的core-site.xml、hdfs-site.xml、hive-site.xml到resources文件夹中,并且需要设置resources文件夹为资源根目录。(此处 log4j.properties 为日志输出文件,可以自行百度获取)
在这里插入图片描述
在这里插入图片描述

3. 在hdfs 中创建一个文件夹,用于存储数据文件

方法1 在linux中使用命令

#1、hdfs 命令
hdfs dfs -mkdir -p /input/data
#2、hadoop命令
hadoop fs -mkdir -p /input/data

方法2 在HDFS网页中创建文件夹
在这里插入图片描述

4. 运行Spark Streaming 文件

package chapter6

import org.apache.spark.SparkConf
import org.apache.spark.streaming.{Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.DStream


object AdClickCountTop3 {
  def main(args: Array[String]): Unit = {
    // 第一步:配置Spark
    val conf = new SparkConf().setAppName("AdClickCountTop3").setMaster("local[2]")
    val ssc = new StreamingContext(conf, Seconds(10))

    // 第五步:创建一个与HDFS目录连接的DStream
    val adsLogStream = ssc.textFileStream("hdfs://hadoop102:8020/input/data/ads")

    // 第六步:将每条记录映射为((省份ID, 广告ID), 1)元组
    val adClicks = adsLogStream.map { record =>
      val fields = record.split(" ")
      ((fields(1), fields(4)), 1) // 假设字段顺序为时间戳、省份ID、城市ID、用户ID、广告ID
    }

    // 第七步:按键聚合点击次数
    val aggregatedClicks = adClicks.reduceByKey(_ + _)

    // 第八步:重新排列元组为(省份ID, (广告ID, 总数))
    val clicksByProvince = aggregatedClicks.map {
      case ((provinceID, adID), sum) => (provinceID, (adID, sum))
    }

    // 第九步:按省份ID分组
    val groupedByProvince = clicksByProvince.groupByKey()

    // 第十步:对每个组内的点击次数进行排序并取前三名
    val topAdsByProvince: DStream[(String, List[(String, Int)])] = groupedByProvince.mapValues { ads =>
      ads.toList.sortBy(-_._2).take(3) // 按点击次数降序排序并取前三名
    }

    // 打印结果
    topAdsByProvince.print()

    // 启动计算
    ssc.start()
    ssc.awaitTermination()
  }
}

5 上传数据到HDFS文件夹

同3一样,方法类似
方法1 在linux中使用命令

#相对路径(需要先进入存放数据文件的目录)
hdfs dfs -mkdir -p local_file.txt /input/data/ 
#绝对路径
hdfs dfs -mkdir -p /data/local_file.txt /input/data/ 

方法2 在HDFS网页中上传
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值