将 wso2 BAM 与外部 Cassandra 集成



我正在尝试将外部Cassandra集成到BAM中。我已经更改了卡桑德拉组件.xml。

1)我想知道如何在外部Cassandra上创建密钥空间,因为当我运行BAM时, 我收到错误Unknown keyspace EVENT_KS.

2) 我的 wso2 日志中出现以下错误

TID: [0] [BAM] [2014-02-11 15:28:30,905]  WARN {org.apache.hadoop.mapred.JobClient} -  Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. {org.apache.hadoop.mapred.JobClient}
TID: [0] [BAM] [2014-02-11 15:37:04,393] ERROR {org.apache.hadoop.hive.ql.exec.ExecDriver} -  Job Submission failed with exception 'java.lang.RuntimeException(org.apache.thrift.transport.TTransportException)'
java.lang.RuntimeException: org.apache.thrift.transport.TTransportException
    at org.apache.cassandra.hadoop.ColumnFamilyInputFormat.getRangeMap(ColumnFamilyInputFormat.java:297)
    at org.apache.cassandra.hadoop.ColumnFamilyInputFormat.getSplits(ColumnFamilyInputFormat.java:105)
    at org.apache.hadoop.hive.cassandra.input.HiveCassandraStandardColumnInputFormat.getSplits(HiveCassandraStandardColumnInputFormat.java:291)
    at org.apache.hadoop.hive.cassandra.input.HiveCassandraStandardColumnInputFormat.getSplits(HiveCassandraStandardColumnInputFormat.java:216)
    at org.apache.hadoop.hive.ql.io.HiveInputFormat.getSplits(HiveInputFormat.java:302)
    at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getSplits(CombineHiveInputFormat.java:292)
    at org.apache.hadoop.mapred.JobClient.writeOldSplits(JobClient.java:933)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:925)
    at org.apache.hadoop.mapred.JobClient.access$500(JobClient.java:170)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:839)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:792)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1123)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:792)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:766)
    at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:460)
    at org.apache.hadoop.hive.ql.exec.ExecDriver.main(ExecDriver.java:733)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
Caused by: org.apache.thrift.transport.TTransportException

EVENT_KS 仅在我记得的第一个事件发布到 BAM 后创建。如果您在创建之前尝试访问它,可能会出现错误。

在 BAM 2.4.0 中,首次运行 BAM 时会创建EVENT_KS。(但在以前的版本中,EVENT_KS将在第一个事件发布到 BAM 时创建)。请确保您的 cassandra-component.xml 看起来像下面这样。另外告诉我们您正在使用的Cassandra版本。

<Cassandra><Cluster>
    <Name>Test Cluster</Name>
    <DefaultPort>9160</DefaultPort>
    <Nodes>localhost:9160</Nodes>
    <AutoDiscovery disable="false" delay="1000"/>
</Cluster></Cassandra>

首先,您需要检查以下内容:

  1. 您是否将Cassandra组件.xml正确地指向外部Cassandra。这样,您发布的数据将存储在预期的外部Cassandra数据库中。
  2. 您是否安装了包含预期流定义的工具箱?或者,您是否触发了将数据发布到 BAM?在这两种情况下,都将使用名为 stream 的列系列创建EVENT_KS。
  3. 您是否修改了 $BAM_HOME/repository/conf/datasource/master-datasource.xml 以指向外部 cassandra databse?您需要验证数据源中提供的 cassandra 数据库配置WSO2BAM_CASSANDRA_DATASOURCE。对于默认工具箱,这是正在使用的默认 cassandra 数据源,默认情况下它指向 localhost。如果在 hive 脚本中使用它,则需要更改此配置。

经过许多努力,我认为在将外部Cassandra的cassendra.yaml的数据目录更改为repository/database/cassandra/data之后,外部cassandra一切正常。更不用说版本1.1.3了。我想知道这个外部Cassandra配置还有其他解决方法吗?

最新更新