2

我正在做一个需要将数据插入 Cassandra 数据库的项目。因此,我正在使用Pelops client.

我有一个多线程代码,它将使用Pelops client. 我正在使用ExecutorService它。

在我的程序中,每个线程都会在某个范围内工作,比如

Thread1 will work on 1 to 20
Thread2 will work on 21 to 40
...
...

下面是我用来插入 Cassandra 数据库的代码 -

private static int noOfThreads = 5;
private static int noOfTasks = 100;
private static int startRange = 1;

    public static void main(String[] args) {

        LOG.info("Loading data in Cassandra database..!!");

        ExecutorService service = Executors.newFixedThreadPool(noOfThreads);

        try {
            // queue some tasks
            for (int i = 0, nextId = startRange; i < noOfThreads; i++, nextId += noOfTasks) {

                service.submit(new CassandraTask(nextId, noOfTasks));
            }

            service.shutdown();

            service.awaitTermination(Long.MAX_VALUE, TimeUnit.DAYS);
        } catch (InterruptedException e) {
            LOG.warn("Threw a Interrupted Exception in" + CNAME + ".PelopsLnPClient: boss told me to stop...Not my fault!!");
        } catch (Exception e) {
            LOG.error("Threw a Exception in" + CNAME + e);
        } 
    }

下面是CassandraTask class实现的Runnable interface

class CassandraTask implements Runnable {

    private final int id;
    private final int noOfTasks;

    private final String nodes = "localhost";
    private final String thrift_connection_pool = "Test Cluster";
    private final String keyspace = "my_keyspace";
    private final String column_family = "PROFILE_USER";

        public CassandraTask(int nextId, int noOfTasks) {
            this.id = nextId;
            this.noOfTasks = noOfTasks;

        }


        public void run() {

            try {

                cassandraConnection();
                Mutator mutator = Pelops.createMutator(thrift_connection_pool);

                for (int userId = id; userId < id + noOfTasks; userId++) {

                    mutator.writeColumns(column_family, String.valueOf(userId),
                            mutator.newColumnList(
                                    mutator.newColumn("unt", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("rtising", "{\"lv\":[{\"v\":{\"thirdPartyAdsOnhostdomain\":null,\"hostdomainAdsOnThirdParty\":null,\"userId\":" + userId + "},\"cn\":2}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("selling_price_main_cats", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("and_keyword_rules", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("categories_purchased", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("omer_service", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("graphic", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}"), 
                                    mutator.newColumn("rite_searches", "{\"lv\":[{\"v\":{\"regSiteId\":null,\"userState\":null,\"userId\":" + userId + "},\"cn\":1}],\"lmd\":20130206211109}")
                                    ));
                }

                mutator.execute(ConsistencyLevel.ONE);

            } catch (Exception e) {
                System.err.println("Threw a Exception in " + e);
            } finally {
                Pelops.shutdown();
            }
        }

        /**
         * Making a Cassandra Connection by adding nodes
         *
         /
        private void cassandraConnection() {

            Cluster cluster = new Cluster(nodes, 9160);
            Pelops.addPool(thrift_connection_pool, cluster, keyspace);

        }
    }

每当我运行上述程序时,我总是遇到异常 -

Threw a Exception in java.lang.RuntimeException: exception while registering MBean, com.scale7.cassandra.pelops.pool:type=PooledNode-my_keyspace-localhost

谁能帮我解决我在这里做错了什么?我相信我在这里犯了一些小错误?如果我跑得很慢,那么我不会得到这个例外。慢,我的意思是,通过在代码中放置断点。不知何故很奇怪。

我正在使用 Cassandra 1.2.3

任何帮助将不胜感激。

4

1 回答 1

1

您使用的是哪个客户端版本?据我所见,每个线程都为 cassandra 创建了一个池(同名!),每个线程都关闭了 Pelops 客户端。

在主类中移动池创建,只创建一个池并从线程访问它,并且在最后一个线程执行 execute 方法之前永远不要调用 Pelops.shutdown()。

卡罗

于 2013-04-09T14:46:55.597 回答