主要还是看场景,如果是实时的,用spark或则storm都是可以的。
对于spark和storm其实都面临的一个难题,就是分割是无序的,否则译出来的信息是不连续的,没有顺序的。
对于spark来说,楼主需要研究下分区。在分区的时候,最好能编个号。自己定义一个分区函数。并且最好对于分割的数据打上标记或则序号。
这样根据标记或则序号,通过程序拼接起来。这个还是挺复杂的。
##############
下面是关于分区的例子
实现一个自定义spark分区的demo
实现的功能是根据key值的最后一位数字,写到不同的文件
例如:
10写入到part-00000
11写入到part-00001
.
.
.
19写入到part-00009
自定义分区:
[mw_shl_code=java,true]import org.apache.spark.{Partitioner, SparkContext, SparkConf}
//自定义分区类,需继承Partitioner类
class UsridPartitioner(numParts:Int) extends Partitioner{
//覆盖分区数
override def numPartitions: Int = numParts
//覆盖分区号获取函数
override def getPartition(key: Any): Int = {
key.toString.toInt%10
}
}
object Test {
def main(args: Array[String]) {
val conf=new SparkConf()
val sc=new SparkContext(conf)
//模拟5个分区的数据
val data=sc.parallelize(1 to 10,5)
//根据尾号转变为10个分区,分写到10个文件
data.map((_,1)).partitionBy(new UsridPartitioner(10)).saveAsTextFile("/chenm/partition")
}
}[/mw_shl_code]更多楼主搜索一下,挺多的
|