Hadoop中如何进行数据的批处理和流处理?代码举例讲解

Hadoop中数据处理方式主要包括批处理和流处理:

1、 批处理:

  • 以HDFS文件或Hive表为单位处理数据。
  • 典型工具如MapReduce、Hive等。
  • 首先将海量数据全部加载到内存或磁盘,然后进行计算与处理。
  • 优点是实现简单,可以高效处理大量数据。缺点是延迟较高,不适合实时计算。

2、 流处理:

  • 以数据流或事件为单位进行实时处理。
  • 典型工具如Spark Streaming、Flink等。
  • 不需要先将数据全部加载,而是根据数据到达进行计算。
  • 优点是低延迟,能做到实时处理和计算。缺点是难度较大,可能会出现数据丢失等问题。

3、 Lambda架构:

  • 将批处理和流处理框架结合,同时具备高吞吐和低延迟。
  • 批处理层负责高效大批量处理数据。
  • 流处理层负责低延迟实时处理数据。
  • 两层输出的结果流入服务层,最终展现给用户。
  • 这种架构兼具批流处理的优点,是实现实时大数据处理的理想选择。

示例:

1、 MapReduce批处理:

  • 编写Mapper和Reducer处理数据
  • 使用Hadoop Streaming或jar提交MapReduce作业
  • MapReduce会将输入数据全部加载,然后调用Mapper和Reducer执行计算逻辑。

2、 Spark Streaming流处理:

// 创建SparkContext
SparkContext sc = new SparkContext(conf);
// 创建StreamingContext,指定批量间隔时间 
StreamingContext ssc = new StreamingContext(sc, Seconds(5));
// 定义DStream读取数据流
ReceiverInputDStream<String> lines = ssc、socketTextStream("localhost", 9999);
// 对DStream进行计算
DStream<String> results = lines、map(x -> x、toUpperCase());
// 输出结果
results、print();  
// 开始接收数据和处理
ssc、start();             
ssc、awaitTermination();
  • 不需要将整个数据流输入,而是每隔5秒就对最近5秒的数据进行处理。
  • 这实现了低延迟的实时数据流处理。

所以Hadoop支持丰富的数据处理方式。Batch模式通过MapReduce等工具实现高效数据处理;Streaming模式通过Spark Streaming等工具实现低延迟实时计算;Lambda架构则结合了Batch和Streaming的优点。