HDFS 的并行性提示
Parallelism hint with HDFS
我正在处理 apache 风暴并使用 HDFS。如果我对 bolt 1 使用并行提示并且它正在创建一个文件,将数据写入文件并且工作正常。但是当我将 bolt 的并行度提示增加到 3 时,它正在创建 3 个文件并将数据写入一个文件。
我的应用程序有一个 spout 和两个 bolts(Xbolt 和 Yblot)
并行提示如下
喷嘴 1,Xbolt 1,Ybolt 3
申请流程
Spout --> Xbolt --> Ybolt --> 文件
TopologyBuilder builder = new TopologyBuilder();
BoltDeclarer boltDeclarer;
int parallelismHint = 0;
parallelismHint = SpoutLogic.determineParallelismHint(config);
builder.setSpout("TOPIC_ID", new Spout(), parallelismHint);
parallelismHint = XBoltLogic.determineParallelismHint(config);
boltDeclarer = builder.setBolt("XBOLT_ID", new XBolt(), parallelismHint);
boltDeclarer.shuffleGrouping("TOPIC_ID","XBoltMessage");
parallelismHint = HDFSBoltLogic.determineParallelismHint(config);
boltDeclarer = builder.setBolt("HDFSBOLT_ID",new HDFSBolt(), parallelismHint);
boltDeclarer.fieldsGrouping("XBOLT_ID","XBoltMessage",new Fields("Table")); StormSubmitter.submitTopology("MyTopologyName", config, builder.createTopology());
如果您使用 fieldGrouping,可能会发生所有数据散列到螺栓的情况(即使这不太可能)。shuffle() 会以循环方式将数据发送到螺栓。
我正在处理 apache 风暴并使用 HDFS。如果我对 bolt 1 使用并行提示并且它正在创建一个文件,将数据写入文件并且工作正常。但是当我将 bolt 的并行度提示增加到 3 时,它正在创建 3 个文件并将数据写入一个文件。
我的应用程序有一个 spout 和两个 bolts(Xbolt 和 Yblot) 并行提示如下 喷嘴 1,Xbolt 1,Ybolt 3
申请流程 Spout --> Xbolt --> Ybolt --> 文件
TopologyBuilder builder = new TopologyBuilder();
BoltDeclarer boltDeclarer;
int parallelismHint = 0;
parallelismHint = SpoutLogic.determineParallelismHint(config);
builder.setSpout("TOPIC_ID", new Spout(), parallelismHint);
parallelismHint = XBoltLogic.determineParallelismHint(config);
boltDeclarer = builder.setBolt("XBOLT_ID", new XBolt(), parallelismHint);
boltDeclarer.shuffleGrouping("TOPIC_ID","XBoltMessage");
parallelismHint = HDFSBoltLogic.determineParallelismHint(config);
boltDeclarer = builder.setBolt("HDFSBOLT_ID",new HDFSBolt(), parallelismHint);
boltDeclarer.fieldsGrouping("XBOLT_ID","XBoltMessage",new Fields("Table")); StormSubmitter.submitTopology("MyTopologyName", config, builder.createTopology());
如果您使用 fieldGrouping,可能会发生所有数据散列到螺栓的情况(即使这不太可能)。shuffle() 会以循环方式将数据发送到螺栓。