尝试了Java和Python批量导入数据到ES
每条数据34个字段
1.每一百万条数据【mac 到 mac本地】大概需要5分钟
2.【win 到 win 本地】未测时间
Java中可使用BulkRequestBuilder来add数据;
Python中可使用elasticsearch模块的helpers.bulk来添加数据
Java解决报错【org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: no requests added;】
【Java源码中:最终执行的是requests.add(request);
,调用的是List中的add】
【final List<DocWriteRequest> requests = new ArrayList<>();
】
【super.request.add(request);
】
BulkRequestBuilder调用ActionRequestBuilder的request()方法获得Request对象,该对象再调用BulkRequest的requests()方法获得List< DocWriteRequest>
if (bulkRequest.request().requests().size() > 0 )
判断
utils—配置类
package util;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* <p>package: util,descirption:</p>
*
* @author 王海
* @version V1.0
* @since <pre>2018/5/30 20:03</pre>
*/
public class EsPropertiesUtils {
// 配置文件封装于map
private static Map<String, Object> properties = new HashMap<>();
/**
* 获取配
*
* @param key 配置信息的键
* @return 配置值
*/
static Object getProperty(String key) {
return properties.get(key);
}
// static块,项目启动时执行
static {
// 加载配置文件
Properties prop = new Properties();
InputStream input;
try {
// 获取ES的配置信息,然后加载到prop中
input = EsPropertiesUtils.class.getResourceAsStream("/es.properties");
prop.load(input);
// 配置使用跨平台提交任务
properties.put("cluster.name", prop.getProperty("cluster.name"));
properties.put("server", prop.getProperty("server"));
properties.put("port", prop.getProperty("port"));
} catch (IOException e) {
e.printStackTrace();
}
}
public static Map<String,Object> getConf(){
return properties;
}
}
utils—open/close
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.InetAddress;