首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Apache与Apache的集成

Apache与Apache的集成
EN

Stack Overflow用户
提问于 2018-04-24 07:47:24
回答 1查看 1.2K关注 0票数 1

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

在浏览了网上资源之后,我做了以下工作:

  1. 下载的阿帕奇伊格尼特
  2. 将“libs/可选/”中的所有文件夹复制到“libs/”(我不知道Cassandra需要哪些文件夹)。
  3. 在配置文件夹中创建了3条xml,即"cassandra-config.xml“、”connection-Setings.xml“和”persistance setings.xml“。目前,我对Cassandra和Ignite都使用相同的节点(172.16.129.68)。

cassandra-config.xml

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
<persistence keyspace="test" table="epc_table">
    <keyPersistence class="java.lang.String" strategy="PRIMITIVE" column="imsi"/>
    <valuePersistence strategy="BLOB"/>
</persistence>
  1. 我运行以下命令从bin文件夹启动Ignite。 ignite.sh ./config/Cassandra-config.xml

现在,我想通过sqlline看一下cassandra表。我试过以下几种方法:

./sqlline.sh -u jdbc:cassandra://172.16.129.68:9042/test //(test是键空间的名称)

我得到以下输出:

代码语言:javascript
运行
复制
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>

我也试过:

代码语言:javascript
运行
复制
./sqlline.sh -u jdbc:ignite:thin://172.16.129.68

但是当我用“!table”时,我看不到任何桌子。

到底遗漏了什么?如何使用sqlline访问/修改Cassandra中的表?

操作系统: RHEL 6.5

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-24 08:48:54

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

在您的配置中,您说Ignite要在Cassandra中存储和加载条目,但是Ignite仍然不知道条目结构(BTW Ignite实际上并不关心将哪些对象放入其中)。

为了能够列出表并对其执行查询,您需要创建表。为此,您需要在/lib目录中启动索引,如果已经注释了POJO,则需要设置QueryEntity索引类型。下面是这种配置的示例:

代码语言:javascript
运行
复制
<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()加载卡桑德拉表中的所有内容)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49996112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档