Hadoop Storm-使用压缩写入HDFS
我想将进入storm拓扑的所有原始数据存储在HDFS集群中。 这是JSON或二进制数据,以2k/秒的速率传入 我试图使用HDFS螺栓(,但它不允许使用普通HDFS螺栓进行压缩 只能使用序列文件螺栓进行压缩。 我不想使用序列文件,因为我没有真正的密钥 另外,我已经有了Cassandra来存储我的关键/有价值的东西并满足我的请求。 使用Cassandra处理我的原始数据会占用太多的磁盘(开销)(这不是本文讨论的目标) 有人能帮我吗? 我可以用java Hadoop驱动程序客户端来实现吗?Hadoop Storm-使用压缩写入HDFS,hadoop,hdfs,apache-storm,Hadoop,Hdfs,Apache Storm,我想将进入storm拓扑的所有原始数据存储在HDFS集群中。 这是JSON或二进制数据,以2k/秒的速率传入 我试图使用HDFS螺栓(,但它不允许使用普通HDFS螺栓进行压缩 只能使用序列文件螺栓进行压缩。 我不想使用序列文件,因为我没有真正的密钥 另外,我已经有了Cassandra来存储我的关键/有价值的东西并满足我的请求。 使用Cassandra处理我的原始数据会占用太多的磁盘(开销)(这不是本文讨论的目标) 有人能帮我吗? 我可以用java Hadoop驱动程序客户端来实现吗? 有人有这方
有人有这方面的代码片段吗?好的,没有办法像我想要的那样动态压缩。 但我找到了一个解决方案,如果有人需要,我会在这里分享 这个问题不仅与Storm有关,而且是一个更一般的Hadoop问题 我的所有数据都使用HdfsBolt写入:
RecordFormat format = new DelimitedRecordFormat().withFieldDelimiter("|");
//Synchronize data buffer with the filesystem every 1000 tuples
// Need to be configurable
SyncPolicy syncPolicy = new CountSyncPolicy(1000);
// Rotate data files when they reach five MB
// need to be configuration
FileRotationPolicy rotationPolicy = new FileSizeRotationPolicy(10.0f, FileSizeRotationPolicy.Units.MB);
// Use default, Storm-generated file names
FileNameFormat fileNameFormat = new DefaultFileNameFormat().withPath("/datadir/in_progress") ;
// Instantiate the HdfsBolt
HdfsBolt bolt = new HdfsBolt()
.withFsUrl("hdfs://"+dfsHost+":"+dfsPort)
.withFileNameFormat(fileNameFormat)
.withRecordFormat(format)
.withRotationPolicy(rotationPolicy)
.withSyncPolicy(syncPolicy)
.addRotationAction(new MoveFileAction().withDestination("/datadir/finished"));
这是给我的螺栓每个执行人一个文件…不容易处理,但没关系:)
然后,我计划使用hadoop流(在namenode上的cron中或类似的方式)进行自动压缩:
这里我还有一个问题:
将一个输入文件压缩到一个存档中。
因此,我的10MB输入文件(每个用于一个worker)正在压缩为一个1MB的gzip(或bzip)->这会产生很多小文件,这在hadoop中是一个问题
为了解决这个问题,我将尝试研究hadoop归档(HAR)功能
我还需要清除/datadir/finished中已经压缩的文件
希望你们能给我反馈
保持联系
问候,,
Bastien我并不推荐序列文件,但缺少密钥不会阻止您。可以使用NullWritable作为键。
hadoop jar share/hadoop/tools/lib/hadoop-streaming-2.7.3.jar \
-Dmapred.reduce.tasks=0 \
-Dmapred.output.compress=true \
-Dmapred.compress.map.output=true \
-Dmapred.output.compression.codec=org.apache.hadoop.io.compress.BZip2Codec \
-input /datadir/finished \
-output /datadir/archives \
-mapper /bin/cat \
-inputformat org.apache.hadoop.mapred.TextInputFormat \
-outputformat org.apache.hadoop.mapred.TextOutputFormat