将 Apache Cassandra 与 Apache Ignite 集成 [英] Integrating Apache Cassandra with Apache Ignite

查看:37
本文介绍了将 Apache Cassandra 与 Apache Ignite 集成的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将 Apache Ignite 与 Apache Cassandra(3.11.2) 集成,因为我想使用 Ignite 来缓存现有 Cassandra 数据库中的数据.

I'm trying to integrate Apache Ignite with Apache Cassandra(3.11.2) as I want to use Ignite to cache the data present in my already existing Cassandra database.

在浏览了在线资源后,我已经完成了以下工作:

After going through the online resources, I've done the following till now:

  1. 已下载 Apache Ignite.
  2. 复制libs/optional/"中存在的所有文件夹;到libs/"(我不知道 Cassandra 需要哪些).
  3. 在 config 文件夹中创建了 3 个 xml,即cassandra-config.xml"、connection-settings.xml";和持久性设置.xml".目前,我为 Cassandra 和 Ignite 使用相同的节点 (172.16.129.68).

cassandra-config.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Cassandra connection settings -->
<import resource="connection-settings.xml" />

<!-- Persistence settings for 'cache1' -->
<bean id="cache1_persistence_settings" class="org.apache.ignite.cache.store.cassandra.persistence.KeyValuePersistenceSettings">
        <constructor-arg type="org.springframework.core.io.Resource" value="file:/home/cass/apache_ignite/apache-ignite-fabric-2.4.0-bin/config/persistance-settings.xml" />
</bean>
<!-- Ignite configuration -->
<bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <list>
            <!-- Configuring persistence for "cache1" cache -->
            <bean class="org.apache.ignite.configuration.CacheConfiguration">
                <property name="name" value="cache1"/>
                <property name="readThrough" value="true"/>
                <property name="writeThrough" value="true"/>
                <property name="writeBehindEnabled" value="true"/>
                <property name="cacheStoreFactory">
                    <bean class="org.apache.ignite.cache.store.cassandra.CassandraCacheStoreFactory">
                        <property name="dataSourceBean" value="cassandraAdminDataSource"/>
                        <property name="persistenceSettingsBean" value="cache1_persistence_settings"/>
                    </bean>
                </property>
            </bean>
        </list>
    </property>
    <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
    <property name="discoverySpi">
        <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="ipFinder">
                <!--
                    Ignite provides several options for automatic discovery that can be used
                    instead os static IP based discovery. For information on all options refer
                    to our documentation: http://apacheignite.readme.io/docs/cluster-config
                -->
                <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
                <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
                <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                    <property name="addresses">
                        <list>
                            <!-- In distributed environment, replace with actual host IP address. -->
                            <value>172.16.129.68:47500..47509</value>
                        </list>
                    </property>
                </bean>
            </property>
        </bean>
    </property>
</bean>

connection-settings.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="loadBalancingPolicy" class="com.datastax.driver.core.policies.TokenAwarePolicy">
    <constructor-arg type="com.datastax.driver.core.policies.LoadBalancingPolicy">
        <bean class="com.datastax.driver.core.policies.RoundRobinPolicy"/>
    </constructor-arg>
</bean>

<bean id="cassandraAdminDataSource" class="org.apache.ignite.cache.store.cassandra.datasource.DataSource">
    <property name="port" value="9042"/>
    <property name="contactPoints" value="172.16.129.68"/>
    <property name="readConsistency" value="ONE"/>
    <property name="writeConsistency" value="ONE"/>
    <property name="loadBalancingPolicy" ref="loadBalancingPolicy"/>
</bean>

persistance-settings.xml

<persistence keyspace="test" table="epc_table">
    <keyPersistence class="java.lang.String" strategy="PRIMITIVE" column="imsi"/>
    <valuePersistence strategy="BLOB"/>
</persistence>

  1. 我运行以下命令从 bin 文件夹启动 Ignite.

  1. I run the following command to start Ignite from bin folder.

ignite.sh ../config/cassandra-config.xml

ignite.sh ../config/cassandra-config.xml

现在,我想通过 sqlline 查看 cassandra 表.我尝试了以下方法:

Now, I want to take a look at the cassandra table via sqlline. I've tried the following:

./sqlline.sh -u jdbc:cassandra://172.16.129.68:9042/test//(test是keyspace的名字)

./sqlline.sh -u jdbc:cassandra://172.16.129.68:9042/test //(test is the name of the keyspace)

我得到以下输出:

No known driver to handle "jdbc:cassandra://172.16.129.68:9042/test". Searching for known drivers...
java.lang.NullPointerException
sqlline version 1.3.0
0: jdbc:cassandra://172.16.129.68:9042/test>

我也试过:

./sqlline.sh -u jdbc:ignite:thin://172.16.129.68

但是当我使用!tables"时,我看不到任何表格.

but when I use "!tables", I'm not able to see any table.

到底缺少什么?如何使用 sqlline 访问/修改 Cassandra 中存在的表?

What exactly has been missing? How to access/modify the tables present in Cassandra using sqlline?

操作系统:RHEL 6.5

Operating System: RHEL 6.5

推荐答案

Apache Ignite 是一个键值数据库,默认情况下没有创建可以使用 JDBC 连接器查看的表.CacheStore 是一种将 Ignite 与外部数据库或任何其他存储集成的方法,它将数据作为键值对加载.

Apache Ignite is a key-value database and there are no tables created by default that you are able to view with JDBC connector. CacheStore is a way to integrate Ignite with external DB or any other storage, and it loads data as a key-value pair.

在您的配置中,您说 Ignite 您想在 Cassandra 中存储和加载条目,但 Ignite 仍然不知道条目结构(顺便说一句,Ignite 真的不在乎放入了哪些对象).

In your config you said Ignite that you want to store and load entries in/from Cassandra, but still Ignite doesn't know entries structure (BTW Ignite really doesn't care what objects were putted into it).

为了能够列出表格并对其进行查询,您需要创建表格.为此,您需要在/lib 目录中设置 ignite-indexing 并设置 QueryEntity索引类型 如果您已注释 POJO.以下是此类配置的示例:

To be able to list tables and do queries on it, you need to create tables. For that you need to have ignite-indexing in /lib directory and set QueryEntity or indexed types if you have annotated POJOs. Here is example of such configuration:

<bean class="org.apache.ignite.configuration.CacheConfiguration">
<property name="name" value="mycache"/>
<!-- Configure query entities -->
<property name="queryEntities">
    <list>
        <bean class="org.apache.ignite.cache.QueryEntity">
            <property name="keyType" value="java.lang.Long"/>
            <property name="valueType" value="org.apache.ignite.examples.Person"/>

            <property name="fields">
                <map>
                    <entry key="id" value="java.lang.Long"/>
                    <entry key="orgId" value="java.lang.Long"/>
                    <entry key="firstName" value="java.lang.String"/>
                    <entry key="lastName" value="java.lang.String"/>
                    <entry key="resume" value="java.lang.String"/>
                    <entry key="salary" value="java.lang.Double"/>
                </map>
            </property>

            <property name="indexes">
                <list>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="id"/>
                    </bean>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="orgId"/>
                    </bean>
                    <bean class="org.apache.ignite.cache.QueryIndex">
                        <constructor-arg value="salary"/>
                    </bean>
                </list>
            </property>
        </bean>
    </list>
</property>

如果您配置它,您将能够通过 SQLine 登记和查询该表.(请注意,您无法查询未加载到 Ignite 中的数据.要加载它们,您可以使用 IgniteCache.get() 并启用 readThrough 选项或 IgniteCache.loadCache() 加载 Cassandra 表中的所有内容.

If you configure that, you'll get an ability to enlist and query that tables over SQLine. (Please note, that you cannot query data that are not loaded into Ignite. To load them, you may use IgniteCache.get() with enabled readThrough option or IgniteCache.loadCache() to load everything from Cassandra table).

要使用JDBC查询Cassandra,您需要一个JDBC驱动程序,例如DBSchema.

To query Cassandra with JDBC, you need a JDBC driver for it, try, for example DBSchema.

这篇关于将 Apache Cassandra 与 Apache Ignite 集成的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆