mapreduce任务使用leveldb多线程问题

来源:互联网 发布:log4j打印sql日志 编辑:程序博客网 时间:2024/06/18 12:00
很多朋友在运行mapreduce时需要使用本地词典,而leveldb是一种较好的解决方案,其优点在于访问速度快,可建超大词典。但是leveldb词典每份数据只能同时一个线程访问,而hadoop计算平台上会把用户指定的词典分发到单机上,每个任务在当前目录下建立一个符号链接指向词典数据,这样无疑会造成一份数据多线程访问的情况。

笔者也被这个问题所困惑,于是探索了两种解决方案。
第一种:单机限制单个并发,每个机器限制一个并发数,这样每台机器上的字典文件不会被两个线程同时访问。此方法会极大影响性能,因为单机只有一个并发。

第二种,也是最优的一种,不需要调并发数,将词典文件分发到单机上。如果是streaming实现的mr任务,比较容易实现,直接将词典文件通过cp命令拷贝到本地,然后解压。如果是java实现的任务,相对麻烦一些,需要在java中调用shell脚本来完成,即在setup阶段运行shell命令,实现文件的拷贝。具体实现细节今后补充。
更多精彩,参考小小程序员
0 0
原创粉丝点击