Skip to content
Snippets Groups Projects
Commit d66e856a authored by Jason Tedor's avatar Jason Tedor
Browse files

Elasticsearch 5: Remove support for embedded node

Upstream Elasticsearch does not support embedded nodes as of
Elasticsearch 5. This commit removes the usage of embedded nodes within
YCSB.
parent 23163cc1
No related branches found
No related tags found
No related merge requests found
...@@ -39,16 +39,11 @@ Then, run the workload: ...@@ -39,16 +39,11 @@ Then, run the workload:
Note that the `<path>` specified in each execution should be the same. Note that the `<path>` specified in each execution should be the same.
The Elasticsearch 5 binding has two modes of operation, embedded mode and remote The Elasticsearch 5 binding requires a standalone instance of Elasticsearch.
mode. In embedded mode, the client creates an embedded instance of You must specify a hosts list for the transport client to connect to via
Elasticsearch that uses the specified `<path>` to persist data between `-p es.hosts.list=<hostname1:port1>,...,<hostnamen:portn>`:
executions.
In remote mode, the client will hit a standalone instance of Elasticsearch. To ./bin/ycsb run elasticsearch5 -s -P workloads/workloada \
use remote mode, add the flags `-p es.remote=true` and specify a hosts list via
`-p es.hosts.list=<hostname1:port1>,...,<hostnamen:portn>`.
./bin/ycsb run elasticsearch5 -s -P workloads/workloada -p es.remote=true \
-p es.hosts.list=<hostname1:port1>,...,<hostnamen:portn>` -p es.hosts.list=<hostname1:port1>,...,<hostnamen:portn>`
Note that `es.hosts.list` defaults to `localhost:9300`. For further Note that `es.hosts.list` defaults to `localhost:9300`. For further
...@@ -61,9 +56,8 @@ The default setting for the Elasticsearch node that is created is as follows: ...@@ -61,9 +56,8 @@ The default setting for the Elasticsearch node that is created is as follows:
es.index.key=es.ycsb es.index.key=es.ycsb
es.number_of_shards=1 es.number_of_shards=1
es.number_of_replicas=0 es.number_of_replicas=0
es.remote=false
es.newdb=false es.newdb=false
es.hosts.list=localhost:9300 (only applies if es.remote=true) es.hosts.list=localhost:9300
### Custom Configuration ### Custom Configuration
If you wish to customize the settings used to create the Elasticsearch node If you wish to customize the settings used to create the Elasticsearch node
...@@ -82,10 +76,6 @@ If you wish to change the default index name you can set the following property: ...@@ -82,10 +76,6 @@ If you wish to change the default index name you can set the following property:
es.index.key=my_index_key es.index.key=my_index_key
If you wish to run against a remote cluster you can set the following property:
es.remote=true
By default this will use localhost:9300 as a seed node to discover the cluster. By default this will use localhost:9300 as a seed node to discover the cluster.
You can also specify You can also specify
......
...@@ -17,25 +17,25 @@ ...@@ -17,25 +17,25 @@
package com.yahoo.ycsb.db.elasticsearch5; package com.yahoo.ycsb.db.elasticsearch5;
import com.yahoo.ycsb.*; import com.yahoo.ycsb.ByteIterator;
import org.apache.http.HttpHost; import com.yahoo.ycsb.DB;
import com.yahoo.ycsb.DBException;
import com.yahoo.ycsb.Status;
import com.yahoo.ycsb.StringByteIterator;
import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest; import org.elasticsearch.action.admin.cluster.health.ClusterHealthRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest; import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.delete.DeleteResponse; import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.Client; import org.elasticsearch.client.Client;
import org.elasticsearch.client.Requests; import org.elasticsearch.client.Requests;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.node.Node; import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeValidationException;
import org.elasticsearch.rest.RestStatus; import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.transport.client.PreBuiltTransportClient; import org.elasticsearch.transport.client.PreBuiltTransportClient;
import java.io.IOException;
import java.net.InetAddress; import java.net.InetAddress;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.HashMap; import java.util.HashMap;
...@@ -58,12 +58,10 @@ public class ElasticsearchClient extends DB { ...@@ -58,12 +58,10 @@ public class ElasticsearchClient extends DB {
private static final String DEFAULT_REMOTE_HOST = "localhost:9300"; private static final String DEFAULT_REMOTE_HOST = "localhost:9300";
private static final int NUMBER_OF_SHARDS = 1; private static final int NUMBER_OF_SHARDS = 1;
private static final int NUMBER_OF_REPLICAS = 0; private static final int NUMBER_OF_REPLICAS = 0;
private Node node;
private Client client; private Client client;
private String indexKey; private String indexKey;
private Boolean remoteMode;
/** /**
*
* Initialize any state for this DB. Called once per DB instance; there is one * Initialize any state for this DB. Called once per DB instance; there is one
* DB instance per client thread. * DB instance per client thread.
*/ */
...@@ -71,16 +69,8 @@ public class ElasticsearchClient extends DB { ...@@ -71,16 +69,8 @@ public class ElasticsearchClient extends DB {
public void init() throws DBException { public void init() throws DBException {
final Properties props = getProperties(); final Properties props = getProperties();
// Check if transport client needs to be used (To connect to multiple elasticsearch nodes)
remoteMode = Boolean.parseBoolean(props.getProperty("es.remote", "false"));
final String pathHome = props.getProperty("path.home"); final String pathHome = props.getProperty("path.home");
// when running in embedded mode, require path.home
if (!remoteMode && (pathHome == null || pathHome.isEmpty())) {
throw new IllegalArgumentException("path.home must be specified when running in embedded mode");
}
this.indexKey = props.getProperty("es.index.key", DEFAULT_INDEX_KEY); this.indexKey = props.getProperty("es.index.key", DEFAULT_INDEX_KEY);
int numberOfShards = parseIntegerProperty(props, "es.number_of_shards", NUMBER_OF_SHARDS); int numberOfShards = parseIntegerProperty(props, "es.number_of_shards", NUMBER_OF_SHARDS);
...@@ -105,46 +95,29 @@ public class ElasticsearchClient extends DB { ...@@ -105,46 +95,29 @@ public class ElasticsearchClient extends DB {
final String clusterName = settings.get("cluster.name"); final String clusterName = settings.get("cluster.name");
System.err.println("Elasticsearch starting node = " + clusterName); System.err.println("Elasticsearch starting node = " + clusterName);
System.err.println("Elasticsearch node path.home = " + settings.get("path.home")); System.err.println("Elasticsearch node path.home = " + settings.get("path.home"));
System.err.println("Elasticsearch Remote Mode = " + remoteMode);
// Remote mode support for connecting to remote elasticsearch cluster settings.put("client.transport.sniff", true)
if(remoteMode) { .put("client.transport.ignore_cluster_name", false)
RestClient restClient = RestClient.builder( .put("client.transport.ping_timeout", "30s")
new HttpHost("localhost", 9200, "http")).build(); .put("client.transport.nodes_sampler_interval", "30s");
} // Default it to localhost:9300
if (remoteMode) { String[] nodeList = props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST).split(",");
settings.put("client.transport.sniff", true) System.out.println("Elasticsearch Remote Hosts = " + props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST));
.put("client.transport.ignore_cluster_name", false) TransportClient tClient = new PreBuiltTransportClient(settings.build());
.put("client.transport.ping_timeout", "30s") for (String h : nodeList) {
.put("client.transport.nodes_sampler_interval", "30s"); String[] nodes = h.split(":");
// Default it to localhost:9300
String[] nodeList = props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST).split(",");
System.out.println("Elasticsearch Remote Hosts = " + props.getProperty("es.hosts.list", DEFAULT_REMOTE_HOST));
TransportClient tClient = new PreBuiltTransportClient(settings.build());
for (String h : nodeList) {
String[] nodes = h.split(":");
try {
tClient.addTransportAddress(new InetSocketTransportAddress(
InetAddress.getByName(nodes[0]),
Integer.parseInt(nodes[1])
));
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Unable to parse port number.", e);
} catch (UnknownHostException e) {
throw new IllegalArgumentException("Unable to Identify host.", e);
}
}
client = tClient;
} else { // Start node only if transport client mode is disabled
settings.put("transport.type", "local");
settings.put("http.enabled", "false");
node = new Node(settings.build());
try { try {
node.start(); tClient.addTransportAddress(new InetSocketTransportAddress(
} catch (NodeValidationException e) { InetAddress.getByName(nodes[0]),
throw new DBException(e); Integer.parseInt(nodes[1])
));
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Unable to parse port number.", e);
} catch (UnknownHostException e) {
throw new IllegalArgumentException("Unable to Identify host.", e);
} }
client = node.client();
} }
client = tClient;
final boolean exists = final boolean exists =
client.admin().indices() client.admin().indices()
...@@ -176,15 +149,6 @@ public class ElasticsearchClient extends DB { ...@@ -176,15 +149,6 @@ public class ElasticsearchClient extends DB {
client.close(); client.close();
client = null; client = null;
} }
if (!remoteMode && node != null && !node.isClosed()) {
try {
node.close();
node = null;
} catch (IOException e) {
throw new DBException(e);
}
}
} }
@Override @Override
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment