java—为大型数据集(5 gb)提供快速访问键值存储的最佳方法

olqngx59  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(284)

数据集大小约为5gb。这个大数据集每行只有一个键值对。现在需要对键的值进行十亿次的读取。
我已经尝试过基于磁盘的mapdb方法,但是 ConcurrentModification Exception 还不成熟到可以在生产环境中使用。
我也不想把它放在一个数据库中,然后进行数十亿次的调用(不过,这里可以进行一定级别的内存缓存)。
基本上,我需要在hadoop作业步骤的mapper/reducer中访问这些键值数据集。

ybzsozfc

ybzsozfc1#

所以在尝试了很多东西之后,我们现在使用sqlite。
以下是我们所做的:
我们将所有的键值对数据加载到一个预定义的数据库文件中(在key列中对其进行索引,虽然它增加了文件大小,但值得一试)
将此文件(key value.db)存储在s3中。
现在它作为分布式缓存传递给hadoop作业。
在mapper/reducer的configure中,打开到db文件的连接(大约需要50毫秒)
在map/reduce方法中,用键查询这个数据库(它花费的时间可以忽略不计,甚至不需要分析它,它是如此的微不足道!)
关闭mapper/reducer清理方法中的连接

snz8szmq

snz8szmq2#

我会尝试oracleberley db java版这个支持Map,既成熟又可扩展。

nom7f22z

nom7f22z3#

我注意到你用弹性Map缩小标记了这个。。。如果你在aws上运行,也许dynamodb是合适的。
另外,我想澄清一下:这个数据集是您的mapreduce作业的输入,还是在mapreduce作业期间随机访问的补充数据集?

bvuwiixz

bvuwiixz4#

试试redis。看来这正是你需要的。

相关问题