我在两个表之间执行简单连接时收到此错误.我在Hive命令行中运行此查询.我将表命名为a&b.表a是Hive内部表,b是外部表(在Cassandra中).表a只有1610行,表b有~8百万行.在实际生产场景中,表a可以达到100K行.下面显示的是我与表b的连接作为连接中的最后一个表
选择a.col1,a.col2,b.col3,b.col4 FROM JOIN b ON(a.col1 = b.col1 AND a.col2 = b.col2);
下面显示的是错误
总MapReduce作业= 1
执行日志位于:/tmp/pricadmn/.log
2014-04-09 07:15:36开始启动本地任务来处理地图联接; 最大内存= 932184064
2014-04-09 07:16:41处理行数:200000哈希表大小:199999内存使用情况:197529208百分比:0.212
2014-04-09 07:17:12处理行数:300000哈希表大小:299999内存使用情况: 163894528比例:0.176
2014年4月9日七时十七分43秒处理行:400000哈希表大小:399999内存使用:347109936比例:0.372
... ...
... ...
... ...
2014年4月9日7时24分29秒处理行:1600000哈希表大小:1599999内存使用情况:714454400百分比:0.766
2014-04-09 07:25:03处理行:1700000哈希表大小:1699999内存使用情况:901427928百分比:0.967
执行失败,退出状态:3
获取错误信息
任务失败!
任务ID:
Stage- 5日志
:
/u/applic/pricadmn/dse-4.0.1/logs/hive/hive.log
FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.mr返回代码3 .MapredLocalTask
我正在使用DSE 4.0.1.以下是我可能感兴趣的一些设置
mapred.map.child.java.opts = -Xmx512M
mapred.reduce.child.java.opts = -Xmx512M
mapred.reduce.parallel.copies = 20
hive.auto.convert .加入=真
我将mapred.map.child.java.opts增加到了1G,我得到了更多的记录然后出错了.它看起来不是一个好的解决方案.我也改变了连接中的顺序但没有帮助.我看到这个链接Hive Map join:out of memory Exception但是没有解决我的问题.
对我来说,看起来Hive试图在本地任务阶段将更大的表放在内存中,我感到困惑.根据我的理解,第二张表(在我的情况下表b)应该流入.如果我错了,请纠正我.我们非常感谢您解决此问题的任何帮助.
我有一个webservice API允许客户端插入到Cassandra中.我阅读了datastax页面上的文档(http://www.datastax.com/drivers/java/2.0/com/datastax/driver/core/Session.html),声明我们应该保持会话和集群对象,直到申请结束.我想知道我应该在每次web API调用之后调用session.close()和cluster.close(),或者我只是保持会话直到我关闭web服务器?
我正在使用DSE进行Cassandra/Solr集成,以便将数据存储在Cassandra中并在Solr中编制索引.使用Cassandra处理CRUD操作并分别使用Solr进行全文搜索是非常自然的,DSE可以真正简化Cassandra和Solr之间的数据同步.
但是,在查询方面,实际上有两种方法:Cassandra辅助/手动配置索引与Solr.我想知道何时使用哪种方法以及通常的性能差异,特别是在DSE设置下.
这是我项目中的一个示例用例.我有一个存储一些项目实体数据的Cassandra表.除了基本的CRUD操作之外,我还需要在某些字段(比如类别)上按等号检索项目,然后按某种顺序排序(在我的例子中,这是一个like_count字段).
我可以想到三种不同的方法来处理它:
第一种方法似乎是最简单的实现和维护.我只是写了一些简单的Solr访问代码,其余的繁重工作由Solr/DSE搜索处理.
第二种方法需要在创建和更新时进行手动非规范化.我还需要维护一个单独的表.还有墓碑问题,因为like_count可能会经常更新.好的部分是读取可能更快(如果没有过多的墓碑).
第三种方法可以以一个额外的分类组件为代价来减轻墓碑问题.
您认为哪种方法是最佳选择?性能有何不同?
当我发出
$ nodetool compactionhistory
Run Code Online (Sandbox Code Playgroud)
我明白了
. . . compacted_at bytes_in bytes_out rows_merged
. . . 1404936947592 8096 7211 {1:3, 3:1}
Run Code Online (Sandbox Code Playgroud)
什么{1:3, 3:1}意思?我能找到的唯一文档是这其中规定
合并的分区数
这并没有解释为什么多个值和冒号意味着什么.
我正在尝试使用Apache Drill查询Cassandra.我能找到的唯一连接器是:http: //www.confusedcoders.com/bigdata/apache-drill/sql-on-cassandra-querying-cassandra-via-apache-drill
然而,这不构建.它提出了一个未找到工件的错误.我还有另一个更熟悉这些工具的开发人员,但他也没有运气.
我试过联系我引用的插件的开发者,但博客不起作用,不会让我发表评论.有没有人有这个插件工作(如果是这样?)或是否有另一个插件或方法,我可以用来连接apache钻到Cassandra?如果有人能告诉我如何连接执行一个简单的SQL查询,将非常感激.
我有一个旧的Cassandra集群需要恢复生机.我想清除所有用户和系统数据,所有存储的令牌,所有内容并从一个干净的平板开始 - 是否有推荐的方法这样做?
我有数千万行数据.是否可以使用火花流在一周或一天内分析所有这些?在数据量方面,火花流的限制是什么?我不确定什么是上限,什么时候我应该将它们放入我的数据库,因为Stream可能无法再处理它们了.我也有不同的时间窗口1,3,6小时等,我使用窗口操作来分隔数据.
请在下面找到我的代码:
conf = SparkConf().setAppName(appname)
sc = SparkContext(conf=conf)
ssc = StreamingContext(sc,300)
sqlContext = SQLContext(sc)
channels = sc.cassandraTable("abc","channels")
topic = 'abc.crawled_articles'
kafkaParams = {"metadata.broker.list": "0.0.0.0:9092"}
category = 'abc.crawled_article'
category_stream = KafkaUtils.createDirectStream(ssc, [category], kafkaParams)
category_join_stream = category_stream.map(lambda x:read_json(x[1])).filter(lambda x:x!=0).map(lambda x:categoryTransform(x)).filter(lambda x:x!=0).map(lambda x:(x['id'],x))
article_stream = KafkaUtils.createDirectStream(ssc, [topic], kafkaParams)
article_join_stream=article_stream.map(lambda x:read_json(x[1])).filter(lambda x: x!=0).map(lambda x:TransformInData(x)).filter(lambda x: x!=0).flatMap(lambda x:(a for a in x)).map(lambda x:(x['id'].encode("utf-8") ,x))
#axes topic integration the article and the axes
axes_topic = 'abc.crawled_axes'
axes_stream = KafkaUtils.createDirectStream(ssc, [axes_topic], kafkaParams)
axes_join_stream = axes_stream.filter(lambda x:'delete' not …Run Code Online (Sandbox Code Playgroud) 我只是将这个作为解决方案发布给那些在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
我已经看到在将新节点引导到Datastax Enterprise Cassandra集群时经常发生的问题(版本:2.0.10.71)
启动要引导的新节点时,引导过程开始从群集中的其他节点流式传输数据.在短时间内(通常为一分钟或更短时间) - 群集中的其他节点显示高Par New GC暂停时间,然后节点从群集中退出,导致流会话失败.
INFO [main] 2015-04-27 16:59:58,644 StreamResultFuture.java(第91行)[Stream#d42dfef0-ecfe-11e4-8099-5be75b0950b8]使用/10.1.214.186开始流会话
INFO [GossipTasks:1] 2015-04-27 17:01:06,342 Gossiper.java(第890行)InetAddress /10.1.214.186现在已关闭
INFO [HANDSHAKE-/10.1.214.186] 2015-04-27 17:01:21,400 OutboundTcpConnection.java(第386行)握手版本/10.1.214.186
INFO [RequestResponseStage:11] 2015-04-27 17:01:23,439 Gossiper.java(第876行)InetAddress /10.1.214.186现已启动
然后在另一个节点上:
10.1.214.186错误[STREAM-IN-/10.1.212.233] 2015-04-27 17:02:07,007 StreamSession.java(第454行)[Stream#d42dfef0-ecfe-11e4-8099-5be75b0950b8]发生流错误
还可以查看日志中的内容:
10.1.219.232 INFO [ScheduledTasks:1] 2015-04-27 18:20:19,987 GCInspector.java(第116行)用于ParNew的GC:2个集合118272 ms,使用980357368; 最大值是12801015808
10.1.221.146 INFO [ScheduledTasks:1] 2015-04-27 18:20:29,468 GCInspector.java(第116行)用于ParNew的GC:154911 ms用于1个集合,1287263224使用; 最大值是12801015808`
每次我们尝试引导新节点时,它似乎都发生在不同的节点上.
我找到了这张相关的票. https://issues.apache.org/jira/browse/CASSANDRA-6653
我唯一的猜测是,当新节点出现时,很多压缩都会启动并且可能导致GC暂停时间,我考虑过设置 concurrent_compactors = 1/2 my total CPU
有人有想法吗?
编辑:有关GC设置的更多详细信息在EC2上使用i2.2xlarge节点:
MAX_HEAP_SIZE = "12G"
HEAP_NEWSIZE = "800M"
也
JVM_OPTS ="$ JVM_OPTS -XX:+ UseParNewGC"
JVM_OPTS ="$ JVM_OPTS -XX:+ …
我尝试阅读有关数据存储博客和文档但未找到任何具体内容
有没有办法让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
cassandra ×8
datastax ×3
apache-drill ×1
apache-spark ×1
cql3 ×1
glassfish-4 ×1
hive ×1
hiveql ×1
maven ×1
solr ×1