数据集大小约为5gb。这个大数据集每行只有一个键值对。现在需要对键的值进行十亿次的读取。我已经尝试过基于磁盘的mapdb方法,但是 ConcurrentModification Exception 还不成熟到可以在生产环境中使用。我也不想把它放在一个数据库中,然后进行数十亿次的调用(不过,这里可以进行一定级别的内存缓存)。基本上,我需要在hadoop作业步骤的mapper/reducer中访问这些键值数据集。
ConcurrentModification Exception
ybzsozfc1#
所以在尝试了很多东西之后,我们现在使用sqlite。以下是我们所做的:我们将所有的键值对数据加载到一个预定义的数据库文件中(在key列中对其进行索引,虽然它增加了文件大小,但值得一试)将此文件(key value.db)存储在s3中。现在它作为分布式缓存传递给hadoop作业。在mapper/reducer的configure中,打开到db文件的连接(大约需要50毫秒)在map/reduce方法中,用键查询这个数据库(它花费的时间可以忽略不计,甚至不需要分析它,它是如此的微不足道!)关闭mapper/reducer清理方法中的连接
snz8szmq2#
我会尝试oracleberley db java版这个支持Map,既成熟又可扩展。
nom7f22z3#
我注意到你用弹性Map缩小标记了这个。。。如果你在aws上运行,也许dynamodb是合适的。另外,我想澄清一下:这个数据集是您的mapreduce作业的输入,还是在mapreduce作业期间随机访问的补充数据集?
bvuwiixz4#
试试redis。看来这正是你需要的。
4条答案
按热度按时间ybzsozfc1#
所以在尝试了很多东西之后,我们现在使用sqlite。
以下是我们所做的:
我们将所有的键值对数据加载到一个预定义的数据库文件中(在key列中对其进行索引,虽然它增加了文件大小,但值得一试)
将此文件(key value.db)存储在s3中。
现在它作为分布式缓存传递给hadoop作业。
在mapper/reducer的configure中,打开到db文件的连接(大约需要50毫秒)
在map/reduce方法中,用键查询这个数据库(它花费的时间可以忽略不计,甚至不需要分析它,它是如此的微不足道!)
关闭mapper/reducer清理方法中的连接
snz8szmq2#
我会尝试oracleberley db java版这个支持Map,既成熟又可扩展。
nom7f22z3#
我注意到你用弹性Map缩小标记了这个。。。如果你在aws上运行,也许dynamodb是合适的。
另外,我想澄清一下:这个数据集是您的mapreduce作业的输入,还是在mapreduce作业期间随机访问的补充数据集?
bvuwiixz4#
试试redis。看来这正是你需要的。