太多的小文件HDFS Sink Flume(Too many small files HDFS Sink Flume)
agent.sinks=hpd agent.sinks.hpd.type=hdfs agent.sinks.hpd.channel=memoryChannel agent.sinks.hpd.hdfs.path=hdfs://master:9000/user/hduser/gde agent.sinks.hpd.hdfs.fileType=DataStream agent.sinks.hpd.hdfs.writeFormat=Text agent.sinks.hpd.hdfs.rollSize=0 agent.sinks.hpd.hdfs.batchSize=1000 agent.sinks.hpd.hdfs.fileSuffix=.i agent.sinks.hpd.hdfs.rollCount=1000 agent.sinks.hpd.hdfs.rollInterval=0
我正在尝试使用HDFS Sink将事件写入HDFS。 并尝试过大小,计数和时间基础滚动,但没有一个按预期工作。 它在HDFS中生成太多小文件,如:
-rw-r--r-- 2 hduser supergroup 11617 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832879.i -rw-r--r-- 2 hduser supergroup 1381 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832880.i -rw-r--r-- 2 hduser supergroup 553 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832881.i -rw-r--r-- 2 hduser supergroup 2212 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832882.i -rw-r--r-- 2 hduser supergroup 1379 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832883.i -rw-r--r-- 2 hduser supergroup 2762 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832884.i.tmp
请协助解决给定的问题。 我正在使用水槽1.6.0
〜谢谢
agent.sinks=hpd agent.sinks.hpd.type=hdfs agent.sinks.hpd.channel=memoryChannel agent.sinks.hpd.hdfs.path=hdfs://master:9000/user/hduser/gde agent.sinks.hpd.hdfs.fileType=DataStream agent.sinks.hpd.hdfs.writeFormat=Text agent.sinks.hpd.hdfs.rollSize=0 agent.sinks.hpd.hdfs.batchSize=1000 agent.sinks.hpd.hdfs.fileSuffix=.i agent.sinks.hpd.hdfs.rollCount=1000 agent.sinks.hpd.hdfs.rollInterval=0
I'm trying to use HDFS Sink to write events to HDFS. And have tried Size, Count and Time bases rolling but none is working as expected. It is generating too many small files in HDFS like:
-rw-r--r-- 2 hduser supergroup 11617 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832879.i -rw-r--r-- 2 hduser supergroup 1381 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832880.i -rw-r--r-- 2 hduser supergroup 553 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832881.i -rw-r--r-- 2 hduser supergroup 2212 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832882.i -rw-r--r-- 2 hduser supergroup 1379 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832883.i -rw-r--r-- 2 hduser supergroup 2762 2016-03-05 19:37 hdfs://master:9000/user/hduser/gde/FlumeData.1457186832884.i.tmp
Please assist to resolve the given problem. I'm using flume 1.6.0
~Thanks
原文:https://stackoverflow.com/questions/35815163
最满意答案
Catalyst::Action::Renderview
在决定是否调用视图时使用一Catalyst::Action::Renderview
标准。 如果出现以下情况,它将跳过视图:
- 该请求是
HEAD
请求。- 有些东西已经将
$c->response->body
设置为定义的值。$c->response->status
设置为204(“No Content”)或任何3xx(重定向)。$c->error
包含一个或多个错误并且$c->stash->{template}
尚未设置(以便finalize_error
可以完成其工作)。老实说这不是最好的安排,但我会在你的情况下尝试设置
$c->res->body("");
在你的time_server
动作中。 一个空体不会写任何东西,并且你的标题已经完成,因为你已经调用了write_fh
,但是仍然定义了一个空字符串,所以它会让RenderView不做任何事情。
Catalyst::Action::Renderview
has a small set of criteria it uses when deciding whether or not to call the view. It will skip running the view if:
- The request was a
HEAD
request.- Something has already set
$c->response->body
to a defined value.$c->response->status
is set to 204 ("No Content") or any 3xx (redirection).$c->error
contains one or more errors and$c->stash->{template}
hasn't been set (so thatfinalize_error
can do its job instead).Honestly this isn't the best possible arrangement, but what I would try in your situation is setting
$c->res->body("");
in yourtime_server
action. An empty body won't write anything, and your headers are already finalized since you've calledwrite_fh
, but an empty string is still defined so it'll keep RenderView from doing anything.
相关问答
更多-
如果您运行Fiddler ,问题会消失吗? 如果是这样,你可能会遇到的问题是你的网络服务器不正确的多线程和IE9的后台连接功能导致你的服务器挂起,因为它的后台连接没有请求它的死锁。 Does the problem go away if you run Fiddler? If so, the problem you're likely hitting is that your webserver isn't properly multithreaded and IE9's background connec ...
-
看起来您的配置没有生效。 尝试将模板放在root/homescreen/homescreen.tt2而不是root/src/homescreen/homescreen.tt2 ,然后Catalyst找到它。 啊,你的lib / Myproject.pm中有一个拼写错误: __PACKAGE__->config( #Configure the view 'View::HMTL' => { 请尝试'View::HTML' (注意你有HMTL - 拼写错误)。 It looks ...
-
为什么Catalyst :: Helper :: View :: TTSite已被弃用?(why is Catalyst::Helper::View::TTSite deprecated?)[2023-09-05]
我不认为TTSite在支持方面被正式弃用..它仍然包含在Catalyst :: View :: TT发行版中,截至0。39(2012年4月10日发布)。 我怀疑这是一些开发人员不喜欢提供的基本模板的情况,并且TTSite不再被推荐为默认Catalyst教程的一部分。 TTSite提供了一个非常简单的基础,有一些怪癖。 例如,上下文对象被称为Catalyst而不是c,并且使用TT的WRAPPER命令可能会妨碍AJAX和非HTML视图。 更多背景阅读: 讨论关于将Catalyst教程从TTSite更改为直接TT ... -
我现在可以使用Catalyst :: Plugin :: Email发送HTML电子邮件。 从文档: “email()接受与Email :: MIME :: Creator的create()相同的参数。” 查看Email :: MIME :: Creator,create方法结构是: my $single = Email::MIME->create( header_str => [ ... ], body_str => '...', attributes => { ... }, ...
-
我只是在尝试,所以可能有一个更好/更强大/更优雅的解决方案。 catalyst.pl MyApp cd MyApp mkdir -p lib / Catalyst / Helper / View wget --output-document lib / Catalyst / Helper / View / TTMySite.pm http://api.metacpan.org/source/JJNAPIORK/Catalyst-View-TT-0.41/lib/Catalyst/Helper/View/TT ...
-
Catalyst::Action::Renderview在决定是否调用视图时使用一Catalyst::Action::Renderview标准。 如果出现以下情况,它将跳过视图: 该请求是HEAD请求。 有些东西已经将$c->response->body设置为定义的值。 $c->response->status设置为204(“No Content”)或任何3xx(重定向)。 $c->error包含一个或多个错误并且$c->stash->{template}尚未设置(以便finalize_error可以完成其 ...
-
这可能有点棘手,因为它是极其灵活和简单的DWIW的组合。 模板名称中的.tt表示Template :: Toolkit是推定的默认值。 根本没有必要使用此视图,但在大多数文档中都使用了它。 您可以通过转发到视图来渲染存储/ $ctx的任何内容: $c->forward($c->view("JSON")); 例如,或者您可以决定请求周期的其余部分,例如$c->stash( current_view => "CSV" ) 。 当然,您必须在应用程序中安装和配置视图。 您也可以直接使用视图 - my $body ...
-
Catalyst的优点之一是它的灵活性。 您可以这样做但最适合您的应用。 如果您只支持少数几个URL,那么将它们全部放入Root.pm中并没有什么本质上的错误。 特别是如果没有深度,即localhost:3000 / foo和localhost:3000 / bar 但是,只要你开始有更长的URL,例如localhost:3000 / foo / bar / baz / quux,其中baz和quux是bar的参数,你就会看到分离出包含动作的Foo.pm的好处(子)称为'酒吧'。 (那是在我们进入Chain ...
-
试试这段代码: def writetoaFile(){ response.setContentType("text/plain") response.setHeader("Content-disposition", "attachment; filename=test.txt") response <<"Hello World" response.flushBuffer() } Try this code: def writetoaFile(){ respo ...
-
据我所知(作为Haml的作者),还没有Perl的实现。 As far as I know (as the author of Haml), there's no Perl implementation yet.