一个spark receiver 或多个spark receiver 接收 多个flume agent

本文介绍使用Spark Streaming通过两种不同方式从多个Flume agent接收数据的方法。一种方式是使用单个Spark Receiver来监听多个Flume agent;另一种则是创建两个独立的Spark Receiver,分别连接到不同的Flume agent,并将接收到的数据流进行合并。

1. 利用一个spark receiver 接收多个flume agent

String host = args[0];
  int port = Integer.parseInt(args[1]);
  String host1 = args[2];
  int port1 = Integer.parseInt(args[3]);

  InetSocketAddress address1 = new InetSocketAddress(host,port);
  InetSocketAddress address2 = new InetSocketAddress(host1,port1);

  InetSocketAddress[] InetSocketAddressArray = {address1,address2};

JavaStreamingContext jssc = new JavaStreamingContext(new SparkConf().setAppName("JavaFlumeEventHandle_1"), Durations.seconds(2));
 JavaReceiverInputDStream<SparkFlumeEvent> flumeStream = FlumeUtils.createPollingStream(jssc, InetSocketAddressArray, StorageLevel.MEMORY_AND_DISK_SER_2());


2. 2个spark receiver接收多个flume agent

String host = args[0];
        int port = Integer.parseInt(args[1]);
        String host1 = args[2];
        int port1 = Integer.parseInt(args[3]);

        InetSocketAddress address1 = new InetSocketAddress(host,port);
        InetSocketAddress address2 = new InetSocketAddress(host1,port1);

        InetSocketAddress[] InetSocketAddressArray = {address1,address2};

      JavaStreamingContext jssc = new JavaStreamingContext(new SparkConf().setAppName("JavaFlumeEventHandle_1"), Durations.seconds(2));
//       JavaReceiverInputDStream<SparkFlumeEvent> flumeStream = FlumeUtils.createPollingStream(jssc, InetSocketAddressArray, StorageLevel.MEMORY_AND_DISK_SER_2());

        JavaReceiverInputDStream<SparkFlumeEvent> flumeStream = FlumeUtils.createPollingStream(jssc,host,port);
        JavaReceiverInputDStream<SparkFlumeEvent> flumeStream1 = FlumeUtils.createPollingStream(jssc, host1, port1);
        JavaDStream<SparkFlumeEvent> union = flumeStream.union(flumeStream1);


性能参照: 
http://blog.sina.com.cn/s/blog_13122bdbc0102vay7.html

本文转自http://blog.youkuaiyun.com/kntao/article/details/44943267,所有权力归原作者所有。

在红外通信传感应用中,一个红外发射管连接多个红外接收头的电路设计需要考虑多个因素,包括发射功率、接收灵敏度、信号干扰等。以下是一个基本的设计思路和实现方法。 红外发射管通常由一个驱动电路控制,该电路可以调节发射管的发射功率。为了确保多个接收头能够有效接收到信号,发射管的发射功率需要足够高,以便覆盖所有接收头的接收范围。发射管的驱动电路可以通过调整顺向电流来改变发射功率,也可以采用脉冲方式较大电流驱动发射管以获得瞬间大功率[^1]。 对于接收端的设计,每个红外接收头都有其自身的接收电路。这些接收电路通常被集成在一个元件中,成为一体化红外接收头。内部电路包括红外监测二极管、放大器、限幅器、带通滤波器、积分电路、比较器等。红外监测二极管监测到红外信号,然后把信号送到放大器和限幅器,限幅器把脉冲幅度控制在一定的水平,而不论红外发射器和接收器的距离远近。交流信号进入带通滤波器,带通滤波器可以通过30kHz到60kHz的负载波,通过解调电路和积分电路进入比较器,比较器输出高低电平,还原出发射端的信号波形[^4]。 当设计一个红外发射管连接多个红外接收头的电路时,需要注意以下几点: 1. **电源供应**:确保所有接收头的电源供应稳定,并且与发射管的电源供应相匹配。 2. **信号同步**:由于多个接收头可能会接收到不同强度的信号,因此需要确保所有接收头的信号同步。 3. **信号干扰**:为了避免信号干扰,应合理布局电路板,使发射管和接收头之间的连线尽可能短,并使用屏蔽电缆。 4. **信号处理**:每个接收接收到的信号可能需要单独处理,以便进行解码和数据转换。 下面是一个简单的电路设计示例,展示了一个红外发射管和多个红外接收头的连接方式: ```c // 假设使用的是微控制器来控制红外发射管和接收头 #include <avr/io.h> #define IR_EMITTER_PIN PB0 // 红外发射管连接到PB0 #define IR_RECEIVER1_PIN PB1 // 第一个红外接收头连接到PB1 #define IR_RECEIVER2_PIN PB2 // 第二个红外接收头连接到PB2 void setup() { DDRB |= (1 << IR_EMITTER_PIN); // 设置红外发射管引脚为输出 DDRB &= ~((1 << IR_RECEIVER1_PIN) | (1 << IR_RECEIVER2_PIN)); // 设置红外接收头引脚为输入 } void loop() { // 发射红外信号 PORTB |= (1 << IR_EMITTER_PIN); // 打开发射管 _delay_ms(1000); // 延迟1秒 PORTB &= ~(1 << IR_EMITTER_PIN); // 关闭发射管 // 接收红外信号 if (PINB & (1 << IR_RECEIVER1_PIN)) { // 第一个接收接收到信号 } if (PINB & (1 << IR_RECEIVER2_PIN)) { // 第二个接收接收到信号 } _delay_ms(1000); // 延迟1秒 } ``` 在这个示例中,红外发射管连接到微控制器的PB0引脚,并由微控制器控制其开关状态。两个红外接收头分别连接到PB1和PB2引脚,并且微控制器通过读取这两个引脚的状态来检测是否有信号被接收。 通过这种方式,可以实现一个红外发射管与多个红外接收头的通信。需要注意的是,实际应用中可能需要更复杂的信号处理和错误校验机制,以确保数据传输的可靠性和准确性。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值