一、4库一平台介绍
4库一平台是一个实时数据采集处理平台,由四个主要库(log库、kafka库、hdfs库、hive库)组成。这些库协同工作,实现了数据的采集、存储、处理和查询。主要应用于大数据分析和机器学习等领域。
二、log库
log库是4库一平台的基础库之一,负责采集应用系统的日志数据。4库一平台使用flume工具对日志数据进行收集,flume是一个高可靠性、高吞吐量的分布式日志采集系统,使用多种source和sink,能够适应不同的数据源和目标库,同时支持数据压缩和格式转换等功能,可以方便地与hadoop、kafka等大数据平台进行集成。
<flume>
<source>
<type>avro</type>
<port>12345</port>
<threads>50</threads>
</source>
<channel>
<type>memory</type>
<capacity>10000</capacity>
<transactionCapacity>1000</transactionCapacity>
</channel>
<sink>
<type>kafka</type>
<producer.type>sync</producer.type>
<topic>log_topic</topic>
<batchsize>2000</batchsize>
<brokerList>kafka01:9092,kafka02:9092,kafka03:9092</brokerList>
</sink>
</flume>
三、kafka库
kafka库是4库一平台中间件库之一,用于实现数据的实时分发和传输。kafka是一个高吞吐量的分布式发布-订阅消息系统,具有高扩展性、高可用性和容错性等特点,能够满足大规模数据传输和处理的需求。4库一平台使用kafka库将采集到的日志数据分发给不同的应用系统和数据处理库。
public class KafkaProducer {
private static final String TOPIC = "log_topic";
public void send(String message) {
Properties props = new Properties();
props.put("bootstrap.servers", "kafka01:9092,kafka02:9092,kafka03:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
Producer<String, String> producer = new KafkaProducer<>(props);
producer.send(new ProducerRecord<>(TOPIC, message));
producer.close();
}
}
四、hdfs库
hdfs库是4库一平台的存储库之一,负责大规模数据的分布式存储。HDFS是一个基于Hadoop的分布式文件系统,具有高可靠性、高扩展性、高带宽和容错性等特点,同时支持数据压缩和数据块备份等功能。4库一平台使用hdfs库存储采集到的日志数据。
FileSystem fs = FileSystem.get(new Configuration());
Path path = new Path("/logs");
if (!fs.exists(path)) {
fs.mkdirs(path);
}
FSDataOutputStream outputStream = fs.create(new Path("/logs/test.log"));
outputStream.writeBytes("Hello, World!n");
outputStream.close();
五、hive库
hive库是4库一平台的分析库之一,提供基于SQL语言的数据查询和处理功能。Hive是一个基于Hadoop的数据仓库系统,允许使用类SQL语句查询和处理数据,能够无缝集成Hadoop生态圈的各种组件。4库一平台使用hive库进行数据查询和分析。
SELECT COUNT(*) AS total FROM log_table WHERE date = '2022-01-01';
SELECT COUNT(DISTINCT user_id) AS users FROM log_table WHERE date BETWEEN '2022-01-01' AND '2022-01-31';