jprante / elasticsearch-knapsack

Knapsack plugin is an import/export tool for Elasticsearch
Apache License 2.0
472 stars 77 forks source link

knapsack start up problem #75

Open HemaAnusha opened 9 years ago

HemaAnusha commented 9 years ago

Hi, Am using elasticsearch-knapsack plugin for update settings and for few other actions but am unable to start it , I just started using normal client creation as:

public class KnapSackImport {

private static Client client = null;

@Inject public static Client getClient() { Client client = new TransportClient() .addTransportAddress(new InetSocketTransportAddress("192.168.1.59", 9300)); if(client!=null) { System.out.println("client"); } return client; }

public static void main(String args[]) {

getClient();

}

}

So when am running this am getting :

Exception in thread "main" org.elasticsearch.common.inject.CreationException: Guice creation errors:

1) No implementation for org.elasticsearch.cluster.ClusterService was bound. while locating org.elasticsearch.cluster.ClusterService for parameter 1 at org.xbib.elasticsearch.knapsack.KnapsackService.(Unknown Source) at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25)

2) A binding to org.xbib.elasticsearch.knapsack.KnapsackService was already configured at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25). at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25)

2 errors at org.elasticsearch.common.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:344) at org.elasticsearch.common.inject.InjectorBuilder.initializeStatically(InjectorBuilder.java:151) at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:102) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70) at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:59) at org.elasticsearch.client.transport.TransportClient.(TransportClient.java:187) at org.elasticsearch.client.transport.TransportClient.(TransportClient.java:115) at com.knapsack.KnapSackImport.getClient(KnapSackImport.java:21) at com.knapsack.KnapSackImport.main(KnapSackImport.java:33)

Can anyone trace this and tell me how to proceed with this ..

jprante commented 9 years ago

You can not run the Knapsack plugin at transport client side. It must run at server side in a node being part of the cluster.

HemaAnusha commented 9 years ago

Hi, Thanks for your response, but When I used to run with the Node client (the following code).

package com.knapsack;

import java.io.File; import java.io.FileReader; import java.io.IOException; import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.client.Client; import org.elasticsearch.client.transport.TransportClient; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.transport.InetSocketTransportAddress; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import org.xbib.elasticsearch.action.knapsack.exp.KnapsackExportRequest; import org.xbib.elasticsearch.action.knapsack.exp.KnapsackExportRequestBuilder; import org.xbib.elasticsearch.action.knapsack.imp.KnapsackImportRequest;

public class KnapSackImport {

private static Client client = null;
private static Settings settings=null;

public static Client getClient()
{
    settings=ImmutableSettings.settingsBuilder().put("cluster.name", "elasticsearch").build();
    Node node = NodeBuilder.nodeBuilder().settings(settings).node();
    client = node.client();
    return client;
}

public static void main(String args[]) throws IOException, ParseException
{

    KnapsackImportRequest imp=new KnapsackImportRequest();
    String settings=imp.getIndexSettings("sayt");
    CreateIndexRequestBuilder createIndexRequestBuilder=getClient().admin().indices().prepareCreate("sayt1");
    System.out.println(createIndexRequestBuilder);
    imp.addIndexSettings("sayt1", settings);
}

}

Am getting the Exception as:

Exception in thread "main" java.lang.NoSuchFieldError: LUCENE_4_10_1 at org.elasticsearch.Version.(Version.java:206) at org.elasticsearch.node.internal.InternalNode.(InternalNode.java:136) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166) at com.knapsack.KnapSackImport.getClient(KnapSackImport.java:38) at com.knapsack.KnapSackImport.main(KnapSackImport.java:48)

May I know why am getting this exception? and how to solve this

HemaAnusha commented 9 years ago

And May I know why we should not use Transport Client?

jprante commented 9 years ago

You are using a wrong Elasticsearch / Knapsack version combination.

HemaAnusha commented 9 years ago

May I know Which versions combination I have to use?

jprante commented 9 years ago

Knapsack uses indexed data from cluster nodes, it is an internal export/import cluster service. Because TransportClient does not hold any cluster service, this combination is not possible.

jprante commented 9 years ago

The correct ones from the README of course. Example: Elasticsearch 1.5.2 with Knapsack 1.5.2.0

HemaAnusha commented 9 years ago

Hi, I have changed the knapsack jar to 1.4.0.0 as am using Elasticsearch1.4.0 and then I have tried,

package com.knapsack;

import java.io.IOException;

import org.elasticsearch.action.admin.indices.create.CreateIndexRequestBuilder; import org.elasticsearch.client.Client; import org.elasticsearch.node.Node; import static org.elasticsearch.node.NodeBuilder.*; import org.json.simple.parser.ParseException; import org.xbib.elasticsearch.action.knapsack.imp.KnapsackImportRequest;

public class KnapSackImport {

private static Client client = null;

public static Client getClient()
{
    Node node = nodeBuilder().clusterName("elasticsearch").node();
    client = node.client();
    return client;
}

public static void main(String args[]) throws IOException, ParseException
{

    KnapsackImportRequest imp=new KnapsackImportRequest();
    String settings=imp.getIndexSettings("sayt");
    CreateIndexRequestBuilder createIndexRequestBuilder=getClient().admin().indices().prepareCreate("sayt1");
    System.out.println(createIndexRequestBuilder);
    imp.addIndexSettings("sayt1", settings);
}

}

Even am getting the error as: Exception in thread "main" java.lang.NoSuchFieldError: V_1_4_2 at org.elasticsearch.shield.ShieldVersion.(ShieldVersion.java:40) at org.elasticsearch.shield.license.LicenseModule.verifyLicensePlugin(LicenseModule.java:49) at org.elasticsearch.shield.license.LicenseModule.(LicenseModule.java:33) at org.elasticsearch.shield.ShieldModule.spawnModules(ShieldModule.java:55) at org.elasticsearch.shield.support.AbstractShieldModule$Spawn.spawnModules(AbstractShieldModule.java:57) at org.elasticsearch.common.inject.ModulesBuilder.add(ModulesBuilder.java:44) at org.elasticsearch.common.inject.ModulesBuilder.add(ModulesBuilder.java:46) at org.elasticsearch.node.internal.InternalNode.(InternalNode.java:167) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166) at com.knapsack.KnapSackImport.getClient(KnapSackImport.java:21) at com.knapsack.KnapSackImport.main(KnapSackImport.java:31)

Is this problem related to knapsack or any other and may I know the relevant solution

jprante commented 9 years ago

Shield is not supported, sorry. It is not open source.

HemaAnusha commented 9 years ago

So is there any solution for this or else do I need to use knapsack in other way?

jprante commented 9 years ago

Sure, you have to disable Shield or ask Shield support for a solution.

HemaAnusha commented 9 years ago

Okay Thank you So much..

HemaAnusha commented 9 years ago

Hi, As you said I disabled the shield as shown, public class KnapSackImport {

private static Client client = null;

public static Client getClient()
{
    Node node = nodeBuilder().settings(ImmutableSettings.builder().put("shield.enabled",false)).clusterName("elasticsearch").node();
    client = node.client();
    return client;
}

public static void main(String args[]) throws IOException, ParseException
{

    KnapsackImportRequest imp=new KnapsackImportRequest();
    String settings=imp.getIndexSettings("sayt");
    CreateIndexRequestBuilder createIndexRequestBuilder=getClient().admin().indices().prepareCreate("sayt1");
    System.out.println(createIndexRequestBuilder);
    imp.addIndexSettings("sayt1", settings);
}

}

But am getting again the exception as: Exception in thread "main" org.elasticsearch.common.inject.CreationException: Guice creation errors:

1) A binding to org.xbib.elasticsearch.knapsack.KnapsackService was already configured at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25). at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25)

1 error at org.elasticsearch.common.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:344) at org.elasticsearch.common.inject.InjectorBuilder.initializeStatically(InjectorBuilder.java:151) at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:102) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70) at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:59) at org.elasticsearch.node.internal.InternalNode.(InternalNode.java:197) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) at org.elasticsearch.node.NodeBuilder.node(NodeBuilder.java:166) at com.knapsack.KnapSackImport.getClient(KnapSackImport.java:22) at com.knapsack.KnapSackImport.main(KnapSackImport.java:32) ,

May I know the reason and solution to this?

jprante commented 9 years ago

You seem to have an error in your node setup, maybe you initialized twice. The getClient() method makes no sense, there is a node created (and not started) for each client?

This simple node test works: https://github.com/jprante/elasticsearch-knapsack/commit/c20195d208918a8311418aba2eed971788fd2edc

HemaAnusha commented 9 years ago

Hi Jorg, The following changes I have done using that simple node test:

public class KnapSackImport {

private static Client client = null; 
static Node node=null;

public static void main(String args[]) throws IOException, ParseException
{

    Settings settings = settingsBuilder()
    .put("cluster.name", "test-cluster-" + NetworkUtils.getLocalAddress().getHostName())
    .put("gateway.type", "none")
    .put("index.store.type", "memory")
    .put("http.enabled", false)
    .put("discovery.zen.multicast.enabled", false).put("shield.enabled", false)
    .build();

    node = nodeBuilder().settings(settings).build();
    node.start();
    client = node.client();
    client.admin().cluster().prepareHealth().setWaitForGreenStatus().execute().actionGet();
    if(client!=null)
    {
        System.out.println("client created");
    }
    else
        System.out.println("not");

    KnapsackImportRequest imp=new KnapsackImportRequest();
    String settingsSayt=imp.getIndexSettings("sayt");
    CreateIndexRequestBuilder createIndexRequestBuilder=client.admin().indices().prepareCreate("sayt1");
    System.out.println(createIndexRequestBuilder);
    imp.addIndexSettings("sayt1", settingsSayt);

    node.stop();
}

}

Again am getting the exception as:

Exception in thread "main" org.elasticsearch.common.inject.CreationException: Guice creation errors:

1) A binding to org.xbib.elasticsearch.knapsack.KnapsackService was already configured at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25). at org.xbib.elasticsearch.knapsack.KnapsackModule.configure(KnapsackModule.java:25)

1 error at org.elasticsearch.common.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:344) at org.elasticsearch.common.inject.InjectorBuilder.initializeStatically(InjectorBuilder.java:151) at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:102) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:93) at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70) at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:59) at org.elasticsearch.node.internal.InternalNode.(InternalNode.java:197) at org.elasticsearch.node.NodeBuilder.build(NodeBuilder.java:159) at com.knapsack.KnapSackImport.main(KnapSackImport.java:34)

Where am getting the problem at node , May I know solution to this..