基于HDFS,Spark Stream的实时统计

       最近在搞一个小功能,具体要求是:数据到了hdfs,然后统计。需求很简,程序实现也挺简单的,但是目录有点复杂,如base目录下面有/业务/省/yyyyMMdd/h/aa.txt文件

如果是按照之前的约定的方式的话,是可以实现的,但是这个文件夹太复杂了,所以按照约定的方式来弄好像难度也挺复杂的,所以这种方法我放弃了。还有一种方案就是把文件目录放到kafka中,然后订阅kafka的内容,取得了之后将参数传进程序执行,但是这个方案的问题卡在了如何实时订阅kafka的内容,而且把参数传到spark程序中执行,而且肯定是使用shell来订阅,然后获取参数再提交给spark应用,没人用过,暂时搁置了;还有一种方案就是使用spark stream 实时的从hdfs中监控,但是貌似这东西只能从监控hdfs的某个目录下面的文件,而监控不了某个目录下面的子目录。代码如下。但是不应该啊,为什么这点功能都做不到,难道设计者都没想到这个问题吗?很简单的需求啊。


public class HDFSWordCount {

    private static String BASE="hdfs://hadoop0:9000/data/xx/yy/zz/";
    public static void main(String[] args) {
        Logger.getLogger("org.apache.spark").setLevel(Level.WARN);
        Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.ERROR);
        SparkConf conf = new SparkConf()
                .setMaster("local[2]")
                .setAppName("HDFSWordCount");  
//        sc.textFile("hdfs://n1:8020/user/hdfs/input");
//        sc.textFile("hdfs://hadoop0:9000/spark/");
        JavaStreamingContext jssc = new JavaStreamingContext(conf, Durations.seconds(10));
        
        // 首先,使用JavaStreamingContext的textFileStream()方法,针对HDFS目录创建输入数据流
        JavaDStream<String> callLines = jssc.textFileStream(BASE+"oidd_call/");
//        JavaDStream<String> smsLines = jssc.textFileStream(BASE+"oidd_sms/*/*/*/");
//        JavaDStream<String> locationLines = jssc.textFileStream(BASE+"oidd_location/*/*/*/");

        callLines.print();
//        smsLines.print();
//        locationLines.print();
        jssc.start();
        jssc.awaitTermination();
        jssc.close();
    }
Spark Streaming的执行流程可以简述为以下几个步骤: 1. 初始化流处理上下文:创建StreamingContext作为流处理程序的入口,同时也会创建SparkContext作为执行上下文。 2. 创建输入流:通过定义输入源(如Kafka、Flume、HDFS等),创建Input DStreams作为数据的输入源。 3. 转换处理:对DStreams进行各种转换处理,例如过滤、映射、聚合等,形成DStreams DAG(有向无环图)。 4. 输出操作:执行Output Operations,将处理后的数据输出到外部系统,例如将结果存储到数据库、写入文件等。 5. 启动StreamingContext:调用StreamingContext的start方法,开始流处理任务的执行。 6. 等待终止:调用StreamingContext的awaitTermination方法,等待流处理任务的完成。 在整个流处理过程中,每个批次的输入数据都会经过上述流程进行处理和输出。可以看出,初始化执行环境和构建DStreamGraph是在初始化StreamingContext阶段完成的,而真正的数据流处理是在启动StreamingContext后开始执行的。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Spark Streaming执行流程分析](https://blog.csdn.net/u013478922/article/details/118060416)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值