我正在尝试从ycsb load data命令加载redis服务器中的数据。它运行良好,有1百万条记录,但当我尝试加载更多数据(如2.5亿条记录)时,它会运行一段时间,然后通过提供以下异常显示加载错误。任何人都可以建议哪里出错了?
我收到以下错误:
redis.clients.jedis.exceptions.JedisConnectionException:java.net.SocketTimeoutException:read timed out at redis.clients.jedis.Protocol.process(Protocol.java:74) at redis.clients.jedis.Protocol.read(Protocol.java:122) at redis.clients.jedis.Connection.getIntegerReply(Connection.java:178) at redis.clients.jedis.Jedis.zadd(Jedis.java:1448) 在com.yahoo.ycsb.db.RedisClient.insert(RedisClient.java:97) 在com.yahoo.ycsb.DBWrapper.insert(DBWrapper.java:148) 在com.yahoo.ycsb.workloads.CoreWorkload.doInsert(CoreWorkload.java:461) 在com.yahoo.ycsb.ClientThread.run(Client.java:269)
由于
答案 0 :(得分:1)
听起来问题是暂停。考虑到您定义的巨大工作量,这并不奇怪。
您可以尝试修改YCSB连接到Redis的方式,以添加比默认时间更长的超时。
在com.yahoo.ycsb.db.RedisClient中,替换
jedis = new Jedis(host, port);
与
jedis = new Jedis(host, port, TIMEOUT);
TIMEOUT是一个整数。 Jedis中的默认值是2000,我假设这意味着2秒。