es的java bulk load
来源:互联网 发布:ngrok nat123 知乎 编辑:程序博客网 时间:2024/05/16 09:30
es的java bulk load,直接贴代码
public class BulkLoad {
public static void main(String[] args) {
if (args.length != 5) {
System.out.println("参数1 集群名字");
System.out.println("参数2 集群其中一个节点的ip");
System.out.println("参数3 需要导入的文件的位置");
System.out.println("参数4 所以名字");
System.out.println("参数5 批量导入的patch数");
return ;
}
String cluster = args[0];
String ip = args[1];
String path = args[2];
String index = args[3];
int patch = Integer.parseInt(args[4]);
Settings settings = Settings.settingsBuilder().put("cluster.name", cluster)
.put("client.transport.sniff", true).build();
TransportClient client = TransportClient.builder().settings(settings).build();
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip), 9300));
} catch (UnknownHostException e) {
System.out.println("es集群主机名错误");
e.printStackTrace();
}
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(path)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = null;
int count = 1;
try {
BulkRequestBuilder bulkRequest = client.prepareBulk();
long start = System.currentTimeMillis();
while ((line = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex(index, "nature").setSource(buildXContentBuilder(line)));
// 每5w条提交一次
if (count % patch == 0) {
bulkRequest.execute().actionGet();
bulkRequest = client.prepareBulk();
System.out.println("提交了" + count + "条");
}
count++;
}
bulkRequest.execute().actionGet();
long end = System.currentTimeMillis();
System.out.println("插入完毕, 耗时" + (end - start) + "ms");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (client != null) {
client.close();
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static XContentBuilder buildXContentBuilder(String line) throws IOException{
String[] row = line.trim().split("\t");
return jsonBuilder()
.startObject()
.field("field1", row[0])
.field("field2", row[1])
.endObject();
}
}
public static void main(String[] args) {
if (args.length != 5) {
System.out.println("参数1 集群名字");
System.out.println("参数2 集群其中一个节点的ip");
System.out.println("参数3 需要导入的文件的位置");
System.out.println("参数4 所以名字");
System.out.println("参数5 批量导入的patch数");
return ;
}
String cluster = args[0];
String ip = args[1];
String path = args[2];
String index = args[3];
int patch = Integer.parseInt(args[4]);
Settings settings = Settings.settingsBuilder().put("cluster.name", cluster)
.put("client.transport.sniff", true).build();
TransportClient client = TransportClient.builder().settings(settings).build();
try {
client.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName(ip), 9300));
} catch (UnknownHostException e) {
System.out.println("es集群主机名错误");
e.printStackTrace();
}
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader(new File(path)));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
String line = null;
int count = 1;
try {
BulkRequestBuilder bulkRequest = client.prepareBulk();
long start = System.currentTimeMillis();
while ((line = br.readLine()) != null) {
bulkRequest.add(client.prepareIndex(index, "nature").setSource(buildXContentBuilder(line)));
// 每5w条提交一次
if (count % patch == 0) {
bulkRequest.execute().actionGet();
bulkRequest = client.prepareBulk();
System.out.println("提交了" + count + "条");
}
count++;
}
bulkRequest.execute().actionGet();
long end = System.currentTimeMillis();
System.out.println("插入完毕, 耗时" + (end - start) + "ms");
} catch (IOException e) {
e.printStackTrace();
} finally {
if (client != null) {
client.close();
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
private static XContentBuilder buildXContentBuilder(String line) throws IOException{
String[] row = line.trim().split("\t");
return jsonBuilder()
.startObject()
.field("field1", row[0])
.field("field2", row[1])
.endObject();
}
}
利用的是9300的tcp端口,相对于9200的http接口导入速度大概会提高10倍以上,每秒4w左右的索引速度。
注意点:bulkRequest.execute().actionGet()之后需要再次调用prepareBulk,否则client中的数据越积越多,每次bulk之后需要先清空
0 0
- es的java bulk load
- bulk load关于分隔符的问题
- hbase的bulk load一个小改造
- bulk load关于分隔符的问题
- HBase Bulk Load的基本使用
- ES 批量bulk 备忘
- 关于ES的bulk操作的一些问题
- ELK研究(一):elasticsearch java api接口操作ES集群 ---TransportClient的使用介绍 bulk批量提交数据
- ELK研究(一):elasticsearch java api接口操作ES集群 ---TransportClient的使用介绍 bulk批量提交数据
- 漫游es-bulk processor批处理的经典策略
- Trafodion Bulk Load 初试
- hbase的bulk load一个小改造(续)
- Trafodion Bulk Load 对比 Native HBase Bulk Load
- ES优化总结(特别是在bulk大量数据到ES的时候),持续续更新中。。。。
- ES 5.x bulk update重复的文档ID性能低下分析
- 【甘道夫】通过bulk load将HDFS上的数据导入HBase
- bulk-load装载hdfs数据到hbase
- bulk-load 装载HDFS数据到HBase
- 第五周 项目1 建立顺序栈算法库
- ecplice断点不能运行,断点是带斜杠的
- Redis的三种启动方式与检测运行情况
- 第十六天
- TCP/IP源码学习(53)——TCP的连接过程的实现(2)
- es的java bulk load
- 写优雅代码之聊一聊接口
- [POJ 3070] Fibonacci (矩阵快速幂)
- 如何使用gyp管理c++工程(ubuntu版)【转】
- 省考,国考到底有哪些不同
- 协程(一)协程的定义与分类
- leetcode 题解 2. Add Two Numbers
- 栈和队列复习题
- Android自定义环状进度条(带加载动画效果)