gpt4 book ai didi

hadoop - 如何配置 Flume 来监听 web api http 请求

转载 作者:可可西里 更新时间:2023-11-01 14:11:36 30 4
gpt4 key购买 nike

我已经构建了一个在 IIS 服务器上发布的 api web 应用程序,我正在尝试配置 Apache Flume 以监听该 web api 并将 http 请求的响应保存在 HDFS 中,这是我需要的 post 方法听:

    [HttpPost]
public IEnumerable<Data> obtenerValores(arguments arg)
{
Random rdm = new Random();

int ano = arg.ano;
int rdmInt;
decimal rdmDecimal;

int anoActual = DateTime.Now.Year;
int mesActual = DateTime.Now.Month;

List<Data> ano_mes_sales = new List<Data>();

while (ano <= anoActual)
{
int mes = 1;
while ((anoActual == ano && mes <= mesActual) || (ano < anoActual && mes <= 12))
{
rdmInt = rdm.Next();
rdmDecimal = (decimal)rdm.NextDouble();
Data anoMesSales = new Data(ano, mes,(rdmInt * rdmDecimal));
ano_mes_sales.Add(anoMesSales);

mes++;
}
ano++;
}
return ano_mes_sales;
}

Flume 在 VMware 虚拟机 CentOs 上运行,这是我尝试配置 flume 来监听该应用程序:

# Sources, channels, and sinks are defined per # agent name, in this case 'tier1'.
a1.sources = source1
a1.channels = channel1
a1.sinks = sink1
a1.sources.source1.interceptors = i1 i2
a1.sources.source1.interceptors.i1.type = host
a1.sources.source1.interceptors.i1.preserveExisting = false
a1.sources.source1.interceptors.i1.hostHeader = host
a1.sources.source1.interceptors.i2.type = timestamp

# For each source, channel, and sink, set # standard properties.
a1.sources.source1.type = org.apache.flume.source.http.HTTPSource
a1.sources.source1.bind = transacciones.misionempresarial.com/CSharpFlume
a1.sources.source1.port = 80

# JSONHandler is the default for the httpsource #
a1.sources.source1.handler = org.apache.flume.source.http.JSONHandler
a1.sources.source1.channels = channel1
a1.channels.channel1.type = memory
a1.sinks.sink1.type = hdfs
a1.sinks.sink1.hdfs.path = /monthSales
a1.sinks.sink1.hdfs.filePrefix = event-file-prefix-
a1.sinks.sink1.hdfs.round = false
a1.sinks.sink1.channel = channel1

# Other properties are specific to each type of # source, channel, or sink. In this case, we # specify the capacity of the memory channel.
a1.channels.channel1.capacity = 1000

我正在使用 curl 发帖,这是我的尝试:

curl -X POST -H 'Content-Type: application/json; charset=UTF-8' -d '[{"ano":"2010"}]' http://transacciones.misionempresarial.com/CSharpFlume/api/SourceFlume/ObtenerValores

我只得到这个错误:

{"Message":"Error."}

我的问题是,配置 flume 以听取对我的 web api 的 http 请愿的正确方法是什么,我缺少什么?

最佳答案

标准的 Flume“HTTPSource”及其默认的 JSONHandler 将只处理特定的、以 Flume 为中心的格式的事件。

该格式记录在案in the user manual , 以及 JSONHandler source code 开头的评论中.

总之,它期望收到一个 JSON 对象列表,每个对象都包含 headers(键/值对,映射到 Flume 事件 header )和 body(一个简单的字符串,映射到 Flume 事件体)。

举个例子,如果你发送:

[{"headers": {}, "body": "{\"ano\":\"2010\"}"}]

我想您会找到想要的东西。

如果您不能灵活地更改您发送的内容,那么您可以使用 org.apache.flume.source.http.BLOBHandler,具体取决于您正在尝试的处理方式要做(注意。手册中没有这方面的文档,仅适用于 org.apache.flume.sink.solr.morphline.BlobHandler - 它们不是同一回事,但在FLUME-2718 ),或者您可能需要提供您自己的 Flume 的 HTTPSourceHandler 接口(interface)实现。

旁注:HTTP Source bind 选项需要主机名或 IP 地址。您可能很幸运,您的值被视为主机名,而路径被忽略。

关于hadoop - 如何配置 Flume 来监听 web api http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46547046/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com