很多朋友在运行mapreduce时需要使用本地词典,而leveldb是一种较好的解决方案,其优点在于访问速度快,可建超大词典。但是leveldb词典每份数据只能同时一个线程访问,而hadoop计算平台上会把用户指定的词典分发到单机上,每个任务在当前目录下建立一个符号链接指向词典数据,这样无疑会造成一份数据多线程访问的情况。
笔者也被这个问题所困惑,于是探索了两种解决方案。
第一种:单机限制单个并发,每个机器限制一个并发数,这样每台机器上的字典文件不会被两个线程同时访问。此方法会极大影响性能