标签: datastax-java-driver

如何使用Datastax Java驱动程序的异步/批量写入功能

我打算使用Datastax Java驱动程序写入Cassandra ..我主要感兴趣的是Datastax java驱动程序Batch WritesAsycnhronous功能,但是我无法获得任何可以解释如何在我的下面使用Datastax的代码中加入这些功能的教程Java驱动程序..

/**
 * Performs an upsert of the specified attributes for the specified id.
 */
public void upsertAttributes(final String userId, final Map<String, String> attributes, final String columnFamily) {

    try {

        // make a sql here using the above input parameters.

        String sql = sqlPart1.toString()+sqlPart2.toString();

        DatastaxConnection.getInstance();
        PreparedStatement prepStatement = DatastaxConnection.getSession().prepare(sql);
        prepStatement.setConsistencyLevel(ConsistencyLevel.ONE);        

        BoundStatement query = prepStatement.bind(userId, attributes.values().toArray(new Object[attributes.size()]));

        DatastaxConnection.getSession().execute(query);

    } catch (InvalidQueryException e) {
        LOG.error("Invalid Query Exception in DatastaxClient::upsertAttributes "+e);
    } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

java cassandra datastax-java-driver

8
推荐指数
2
解决办法
1万
查看次数

如何使用DataStax Java驱动程序设置Cassandra客户端到节点加密?

我在我的Cassandra集群上设置了节点到节点加密.现在我想建立客户端到节点.根据此文档,它应该像获取客户端的SSL证书并将其导入每个节点的信任库一样简单.我还没有这样的证书,但这不是我的问题.

由于我的客户端使用DataStax Java驱动程序,似乎为了从客户端启用SSL,在构建时Cluster我应该使用该withSSL()方法来启用SSL.好的,但我还需要做什么?我不熟悉JSSE,所以我不知道还有什么必要.SSL通信是双向的,即驱动程序是否需要访问群集中每个节点的SSL证书?

ssl jsse cassandra datastax-java-driver cassandra-2.0

8
推荐指数
1
解决办法
7322
查看次数

"所有主机都尝试查询失败"错误

我的Java代码如下:

import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Metadata;
import com.datastax.driver.core.Session;

public class CustomerController {

    public void execute() {
        Cluster cluster = Cluster.builder()
                .addContactPoints("172.16.11.126", "172.16.11.130")
                .withPort(9042)
                .build();
        Session session = cluster.connect();
        String command = "drop keyspace if exists bookstore";
        session.execute(command);
        cluster.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

当我运行代码时,我收到以下错误:

线程"main"中的异常com.datastax.driver.core.exceptions.NoHostAvailableException:所有尝试查询的主机都失败了(试过:/172.16.11.130(com.datastax.driver.core.TransportException:[/172.16.11.130] ]无法连接),/ 177.2.11.126(com.datastax.driver.core.TransportException:[/172.16.11.126]无法连接))
在com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:195)
at Com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:78)
位于com.datastax.driver.core.Cluster $ Manager.init(Cluster.java:1029)
com.datastax.driver.core.Cluster. init(Cluster.java:120)
at com.datastax.driver.core.Cluster.connect(Cluster.java:197)
com.pragatisoftware.datastax99.app.CustomerController.execute(CustomerController.java:12)
at com.pragatisoftware .datastax99.app.Application.run(Application.java:10)
at com.pragatisoftware.datastax99.app.Application.main(Application.java:6)

环境信息:

  • Ubuntu机器
  • Eclipse Luna
  • Java 1.7
  • 卡桑德拉2.0.11

在cassandra.yaml中:

native_transport_port: 9042
Run Code Online (Sandbox Code Playgroud)

Cassandra在上面提供的两个IP地址(172.16.11.130和172.16.11.126)上运行,我可以使用CQLSH连接到这两台机器.

顺便说一下,使用Cassandra 2.0.9在Windows机器上运行相同的代码(具有适当的IP地址).

cassandra datastax-java-driver

8
推荐指数
1
解决办法
2万
查看次数

在一致性ONE的读取查询期间的Cassandra超时(需要1个响应但仅响应0个副本)

我正在对具有500000行的表进行读取和更新查询,并且在处理大约300000行之后有时会低于错误,即使没有节点关闭也是如此.

在一致性ONE的读取查询期间的Cassandra超时(需要1个响应但仅响应0个副本)

基础架构细节:
拥有5个Cassandra节点,5个spark和3个Hadoop节点,每个节点有8个内核和28 GB内存,Cassandra 复制因子3.

卡桑德拉2.1.8.621 | DSE 4.7.1 | Spark 1.2.1 | Hadoop 2.7.1.

Cassandra配置:

read_request_timeout_in_ms (ms): 10000
range_request_timeout_in_ms (ms): 10000
write_request_timeout_in_ms (ms): 5000
cas_contention_timeout_in_ms (ms): 1000 
truncate_request_timeout_in_ms (ms): 60000
request_timeout_in_ms (ms): 10000.
Run Code Online (Sandbox Code Playgroud)

我通过将read_request_timeout_in_ms(ms)增加到20,000来尝试相同的工作,但它没有帮助.

我正在对两张桌子进行查询.下面是其中一个表的create语句:

创建表:

CREATE TABLE section_ks.testproblem_section (
    problem_uuid text PRIMARY KEY,
    documentation_date timestamp,
    mapped_code_system text,
    mapped_problem_code text,
    mapped_problem_text text,
    mapped_problem_type_code text,
    mapped_problem_type_text text,
    negation_ind text,
    patient_id text,
    practice_uid text,
    problem_category text,
    problem_code text,
    problem_comment text,
    problem_health_status_code text,
    problem_health_status_text text,
    problem_onset_date …
Run Code Online (Sandbox Code Playgroud)

hadoop cassandra datastax-java-driver datastax apache-spark

8
推荐指数
1
解决办法
2万
查看次数

如何在cassandra表中添加多个列?

我需要一些添加new columns到我existing column_family/table的卡珊德拉 我可以像这样添加单列:

ALTER TABLE keyspace_name.table_name ADD column_name cql_type;
Run Code Online (Sandbox Code Playgroud)

我可以使用单个查询添加所有新列吗?如果是,如何使用cqldatastax cassandra driver

cql cassandra datastax-java-driver

8
推荐指数
1
解决办法
6467
查看次数

使用DSE的Java API映射Cassandra物化视图

我有一个带有相关物化视图的cassandra表.

主键是uuid类型的单个id,我没有排序键.我们称之为my_table_id.此表包含related_id我要用于搜索的内容.

然后我有一个定义为该表的物化视图

PRIMARY KEY (related_id, my_table_id) WITH CLUSTERING ORDER BY (my_table_id ASC)
Run Code Online (Sandbox Code Playgroud)

PS:我意识到这是在Cassandra中分区数据的错误方法,但不幸的是,这段代码是继承的.

我在我的java代码中定义了我的表:

@Table(table = "my_table")
public class MyTableType {
    @PartitionKey
    @Column("my_table_id")
    @Codec(MyIdCassandraConverter.class)
    CustomUUIDType myTableId;

    @Column("related_id")
    @Codec(MyRelatedIdCassandraConverter.class)
    MyRelatedId relatedId;

   (...)
}
Run Code Online (Sandbox Code Playgroud)

这两个自定义类型只是UUID周围的包装器.再次,继承.

我的物化视图定义为:

@MaterializedView(baseEntity = MyTableType.class, view = "my_table_by_related_id")
public class MyTableTypeByRelatedId {
    @PartitionKey
    @Column("related_id")
    @Codec(MyRelatedIdCassandraConverter.class)
    MyRelatedId relatedId;

    @ClusteringColumn
    @Column("my_table_id")
    @Codec(MyIdCassandraConverter.class)
    CustomUUIDType myTableId;
}
Run Code Online (Sandbox Code Playgroud)

代码似乎生成正确,但是当我启动Spring Boot应用程序时,我得到:

错误:java:找不到视图类'mypackage.MyTableTypeByRelatedId'的基本实体类'mypackage.MyTableType'错误:java:解析时出错:找不到视图类'mypackage.MyTableTypeByRelatedId'的基本实体类'mypackage.MyTableType'

有一些代码生成正在进行,所以它似乎没有正确生成,但我无法弄清楚是什么.

我找到的唯一有用的文档就是这里这里,但似乎都没有提供帮助.

我究竟做错了什么?

java cassandra datastax-java-driver datastax

8
推荐指数
1
解决办法
272
查看次数

Datastax - PreparedStatement线程安全吗?

com.datastax.driver.core.PreparedStatement实例应该是应用程序中的单例吗?

如果是这样,如果连接丢失会发生什么?PreparedStatement是否无效并且必须采取手动操作来"重新制定"?

PreparedStatement用法的一个简单例子(除了准备+在同一方法中执行)将是辉煌的!

prepared-statement cassandra datastax-enterprise datastax-java-driver

7
推荐指数
1
解决办法
2283
查看次数

解决org.glassfish.deployment.common.DeploymentException:CDI部署失败 - Cassandra Datastax Java Driver,Maven,Glassfish 4

我只是将这个作为解决方案发布给那些在Glassfish 4上通过Maven部署使用Datastax的Java驱动程序时遇到错误的人.

正如在Datastax的网站上写的那样,驱动程序的依赖性是:

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>1.0.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

不幸的是,如果你通过Maven将它部署到Glassfish 4,它会抛出org.glassfish.deployment.common.DeploymentException:CDI部署失败......就像下面这样:

org.glassfish.deployment.common.DeploymentException: CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Set<Service>] with qualifiers [@Default] at injection point [[BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject com.google.common.util.concurrent.ServiceManager(Set<Service>)]
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:225)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:131)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:328)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:493)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:219)
at org.glassfish.deployment.admin.DeployCommand.execute(DeployCommand.java:491)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:527)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2$1.run(CommandRunnerImpl.java:523)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:356)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$2.execute(CommandRunnerImpl.java:522)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:546)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.doCommand(CommandRunnerImpl.java:1423)
at com.sun.enterprise.v3.admin.CommandRunnerImpl.access$1500(CommandRunnerImpl.java:108)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1762)
at com.sun.enterprise.v3.admin.CommandRunnerImpl$ExecutionContext.execute(CommandRunnerImpl.java:1674)
at com.sun.enterprise.v3.admin.AdminAdapter.doCommand(AdminAdapter.java:534)
at com.sun.enterprise.v3.admin.AdminAdapter.onMissingResource(AdminAdapter.java:224)
at org.glassfish.grizzly.http.server.StaticHttpHandler.service(StaticHttpHandler.java:297)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:246)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:191)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:168)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:189)
at …
Run Code Online (Sandbox Code Playgroud)

cassandra maven datastax-enterprise glassfish-4 datastax-java-driver

7
推荐指数
0
解决办法
6407
查看次数

如何防止Cassandra提交日志填满磁盘空间

我正在AWS上运行双节点Datastax AMI集群.昨天,卡桑德拉开始拒绝一切的联系.系统日志没有显示.经过大量的修补,我发现提交日志已经填满了分配的挂载上的所有磁盘空间,这似乎导致连接拒绝(删除了一些提交日志,重新启动并且能够连接).

我在使用DataStax AMI 2.5.1和Cassandra 2.1.7

如果我决定从头开始擦除并重新启动所有内容,我该如何确保不再发生这种情况?

cassandra datastax-java-driver datastax cassandra-2.1

7
推荐指数
1
解决办法
1万
查看次数

如何在同一分区中保留2个Cassandra表

我尝试阅读有关数据存储博客和文档但未找到任何具体内容

有没有办法让Cassandra中的2个表属于同一个分区?例如:

CREATE TYPE addr (
  street_address1 text,
  city text,
  state text,
  country text,
  zip_code text,
);

CREATE TABLE foo (
  account_id timeuuid,
  data text,
  site_id int,
  PRIMARY KEY (account_id)
};

CREATE TABLE bar (
  account_id timeuuid,
  address_id int,
  address frozen<addr>,
  PRIMARY KEY (account_id, address_id)
);
Run Code Online (Sandbox Code Playgroud)

在这里,我需要确保这两个表/ CF都将存在于同一个分区,对于同一个account_id,这两组数据都可以从同一个节点获取

任何指针都非常感谢.

此外,如果有人在使用UDT(用户定义类型)方面有一些经验,我想了解向后兼容性如何工作.如果我修改"addr"UDT以获得更多属性(例如zip_code2 int和name text),具有这些属性的旧行如何工作?它甚至兼容吗?

谢谢

cassandra datastax-enterprise cql3 datastax-java-driver datastax

7
推荐指数
1
解决办法
971
查看次数