Hadoop / Hive分布式缓存的替代解决方案,用于处理非常大的字典文件?

时间:2015-09-14 16:42:08

标签: hadoop hive distributed-cache

我们正在Hadoop和Hive上创建类似应用程序的字典。 一般过程是针对大的固定字典(大约100G,如多语言WordNet字典)批量扫描数十亿个日志数据(例如,单词)。

我们已经有一个java应用程序的机器版本(让我们称之为“singleApp”)来查询这个字典。我们目前无法修改此java应用程序或字典文件,因此我们无法重新设计和重新编写完整的新MapReduce应用程序。我们需要使用这个单机版Java Application作为构建块,将其扩展为MapReduce版本。

目前,我们可以通过调用此“singleApp”创建MapReduce应用程序,并使用分布式缓存传递字典的子集(例如1G字典)。但是,如果我们使用完整字典(100G),那么应用程序的启动速度非常慢。此外,我们确实希望将这些词典安装到Hadoop集群中,而不是每次使用-file或分布式缓存选项都调用它。

我们尝试将字典文件直接复制到从属节点中的本地磁盘并将Java应用程序指向它,但它找不到字典。如果我们想要在这种方法上调试更多,需要做什么的任何文件?

关于什么应该是我们处理这样的情况的最佳实践/过程的任何建议(非常大的字典文件,并且更喜欢一直安装字典文件)?

1 个答案:

答案 0 :(得分:1)

您不需要使用Hadoop来获取100GB的数据。您也可以将分布式缓存用作处理平台。

将分布式缓存视为内存数据网格。

尝试使用Open Source In-Memory DataGridMapReduce使用例如你的{{3}}来使用TayzGrid。

var button : AVAudioPlayer?

in didMoveToView:

if let button = self.setupAudioPlayerWithFile("button", type:"m4a") {
        self.button = button
    }

func setupAudioPlayerWithFile(file:NSString, type:NSString) -> AVAudioPlayer?  {
    let path = NSBundle.mainBundle().pathForResource(file as String, ofType: type as String)
    let url = NSURL.fileURLWithPath(path!)

    var error: NSError?
    var audioPlayer:AVAudioPlayer?
    audioPlayer = AVAudioPlayer(contentsOfURL: url, error: &error)
    return audioPlayer
}