当前位置: 首页 > 知识库问答 >
问题:

使用Flume Avro的日志数据未正确存储在配置单元中

袁谭三
2023-03-14

我使用Flume 1.5.0从应用程序服务器收集日志。假设我有三个应用服务器,应用程序A,应用程序B,应用程序C。一个运行hive的HDFS服务器。现在水槽代理正在所有3个应用服务器上运行,并将日志消息从应用服务器传递到Hdfs服务器,在那里另一个水槽代理正在运行,最终日志存储在hadoop文件系统中。现在我已经创建了一个外部Hive表来映射这些日志数据。但是除了hive无法正确解析日志数据并存储在表中之外,一切都很顺利。

以下是我的水槽和蜂箱配置:

虚拟日志文件格式(|分隔):ClientId |应用程序请求| URL

应用服务器上的Flume配置:

app-agent.sources = tail
app-agent.channels = memoryChannel 
app-agent.sinks = avro-forward-sink 

app-agent.sources.tail.type = exec 
app-agent.sources.tail.command = tail -F /home/kuntal/practice/testing/application.log
app-agent.sources.tail.channels = memoryChannel


app-agent.channels.memoryChannel.type = memory
app-agent.channels.memoryChannel.capacity = 100000
app-agent.channels.memoryChannel.transactioncapacity = 10000

app-agent.sinks.avro-forward-sink.type = avro 
app-agent.sinks.avro-forward-sink.hostname = localhost
app-agent.sinks.avro-forward-sink.port = 10000
app-agent.sinks.avro-forward-sink.channel = memoryChannel

Hdfs服务器上的Flume conf:

hdfs-agent.sources = avro-collect
hdfs-agent.channels = memoryChannel 
hdfs-agent.sinks = hdfs-write 

hdfs-agent.sources.avro-collect.type = avro 
hdfs-agent.sources.avro-collect.bind = localhost
hdfs-agent.sources.avro-collect.port = 10000 
hdfs-agent.sources.avro-collect.channels = memoryChannel

hdfs-agent.channels.memoryChannel.type = memory
hdfs-agent.channels.memoryChannel.capacity = 100000
hdfs-agent.channels.memoryChannel.transactioncapacity = 10000

hdfs-agent.sinks.hdfs-write.channel = memoryChannel
hdfs-agent.sinks.hdfs-write.type = hdfs 
hdfs-agent.sinks.hdfs-write.hdfs.path = hdfs://localhost:9000/user/flume/tail_table/avro
hdfs-agent.sinks.hdfs-write.rollInterval = 30 

配置单元外部表:

CREATE EXTERNAL TABLE IF NOT EXISTS test(clientId int, itemType string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n'
LOCATION '/user/flume/tail_table/avro';

请建议我怎么做?我需要把AvroSerde包括在蜂箱侧吗?

共有1个答案

姜松
2023-03-14

您在hdfs服务器端的Flume配置文件上犯了一个小错误。
对于所有与hdfs相关的配置,我们必须将hdfs包含到属性中。

hdfs-agent.sinks.hdfs-write.rollInterval=30

必须是

hdfs-agent.sinks.hdfs写. hdf.rollInterval=30

有关更多信息,请参阅https://flume.apache.org/FlumeUserGuide.html#hdfs-接收器。现在检查从hdfs端获取的文件是否正确。尝试使用cat命令或其他命令打印文件内容,以查看是否只有您想要发送的文本。如果在打印内容时还有其他乱七八糟的内容,那么配置文件中就有一些错误。

 类似资料:
  • 您可以让OpenStack将元数据写入到一个特殊的“配置盘”中,实例启动时可以挂载这个盘来读取配置信息。一般情况下,这些信息是由元数据服务提供的。注意,这里的元数据和用户数据不同。 这个功能的一个用例是在没有DHCP的情况下给实例分配IP地址。例如,您可以通过配置盘将IP地址配置传给实例,实例挂载上这个盘以后,读取其中的IP信息,before you configure the network s

  • 我们正试图在Linux服务器上启动hive元存储,但我们面临一个问题。如果我们尝试使用以下命令启动配置单元元存储服务: sudo hive服务转移 我们会遇到很多这样的错误: 原因:java.sql。SQLException:拒绝用户“hive”@“sandbox.hortonworks的访问。com“(使用密码:YES)在com.mysql.jdbc.SQLError.createSQLExce

  • 所以我对通过AWS EMR执行Presto查询有一个问题。 我已经启动了一个EMR运行Hive/Presto,并使用AWS胶水作为转移物。 当我SSH到主节点并运行hive时,我可以运行“show schemas;”它向我展示了我们在AWS胶水上拥有的3个不同的数据库。 我确实设置了以下配置 AWS文档http://docs.AWS.amazon.com/emr/latest/releasegui

  • IdentityServer 是为可扩展性设计的,其中一个扩展点是其所需数据的存储机制。该快速入门展示了如何配置 IdentityServer 以使用 EntityFramework(EF)作为其数据存储机制(取代目前为止我们一直使用的内存实现)。 IdentityServer4.EntityFramework 我们将移动到数据库的数据有两种,第一种是配置数据(资源 resources 和客户端

  • 在将spring boot应用程序连接到MYSQL数据库时,我遇到了以下错误: 通用域名格式。mysql。希杰。例外。InvalidConnectionAttributeException:服务器时区值“未知”无法识别或表示多个时区。如果要利用时区支持,必须将服务器或JDBC驱动程序(通过serverTimezone配置属性)配置为使用更具体的时区值。 application.properties

  • 我在java中开发了一个工作正常的配置单元udf,我的函数返回输入与配置单元表中列之间的最佳匹配,因此它有以下简化的伪代码: 我的问题是,如果这个函数是由Hive调用的,为什么我需要在代码中连接到Hive?我可以使用使用我的功能的用户所连接的当前连接吗?