说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二)

HTML文档下载 WORD文档下载 PDF文档下载
Spark,强大的迭代计算框架,内存计算上无可匹敌。Cassandra,优异的列式存储NoSQL,在写入上难逢敌手。《问底》Spark+Cassandra高性能数据分析平台打造进入第二部分,本文主要探讨spark-cassandra-connector。

【导读】笔者( 许鹏)看Spark源码的时间不长,记笔记的初衷只是为了不至于日后遗忘。在源码阅读的过程中秉持着一种非常简单的思维模式,就是努力去寻找一条贯穿全局的主线索。在笔者看来,Spark中的线索就是如何让数据的处理在分布式计算环境下是高效,并且可靠的。

在对Spark内部实现有了一定了解之后,当然希望将其应用到实际的工程实践中,这时候会面临许多新的挑战,比如选取哪个作为数据仓库,是HBase、MongoDB还是Cassandra。即便一旦选定之后,在实践过程还会遇到许多意想不到的问题。

要想快速的解决开发及上线过程中遇到的系列问题,还需要具备相当深度的Linux知识,恰巧之前工作中使用Linux的经验在大数据领域中还可以充分使用。

笔者不才,就遇到的一些问题,整理出来与诸君共同分享。下文为本系列文章的第二部分(点击访问本系列文章开篇):

Cassandra高并发数据读取实现剖析

本文就spark-cassandra-connector的一些实现细节进行探讨,主要集中于如何快速将大量的数据从Cassandra中读取到本地内存或磁盘。

数据分区

存储在Cassandra中的数据一般都会比较多,记录数在千万级别或上亿级别是常见的事。如何将这些表中的内容快速加载到本地内存就是一个非常现实的问题。

解决这一挑战的思路从大的方面来说是比较简单的,那就是将整张表中的内容分成不同的区域,然后分区加载,不同的分区可以在不同的线程或进程中加载,利用并行化来减少整体加载时间。

顺着这一思路出发,要问的问题就是Cassandra中的数据如何才能分成不同的区域。

不同于MySQL,在Cassandra中是不存在Sequence Id这样的类型的,也就是说无法简单的使用seqId来指定查询或加载的数据范围。

既然没有SequenceID,在Cassandra中是否就没有办法了呢?答案显然是否定的,如果只是仅仅支持串行读取,Cassandra早就会被扔进垃圾桶了。

数据分区在Cassandra中至少可以通过两种途径实现 ,一是通过token range,另一个是slice range。这里主要讲解利用token range来实现目的。

1. Token Range

Cassandra将要存储的记录存储在不同的区域中,判断某一记录具体存储在哪个区域的依据是partition key的Hash值。 

在Cassandra 1.2之前,组成Cassandra集群的所有节点(Node),都需要手动指定该节点的Hash值范围也就是Token Range。

手工计算Token Range显然是很繁琐,同时也不怎么容易维护,在Cassandra 1.2之后,引进了虚拟节点(vnode)的概念,主要目的是减少不必要的人工指定,同时也将token range的划分变得更为细粒度。比如原先手工指定token range,只能达到10000这样一个精度,而有了vnode之后,默认安装是每一个物理节点上有256个虚拟节点,这样子的话每一个range的范围就是10000/256,这样变的更为精细。

有关token range的信息存储在cassandra的system命名空间(keyspace)下的local和peers两张表中。其中local表示本节点的token range情况,而peers表示集群中其它节点的token range情况。这两张表中的tokens字段就存储有详细的信息。如果集群中只由一台机器组成,那么peers中的就会什么内容都没有。

简单实验,列出本节点的token range:

use system;desc table local;select tokens from local;
2. Thrift接口

Token Range告诉我们Cassandra的记录是分片存储的,也就意味着可以分片读取。现在的问题转换成为如何知道每一个Token Range的起止范围。

Cassandra支持的Thrift接口中describe_ring就是用来获取token range的具体起止范围的。我们常用的nodetool工具使用的就是thrift接口,nodetool 中有一个describering指令使用的就是describe_ring原语。

可以做一个简单的实验,利用nodetool来查看某个keyspace的token range具体情况。

nodetool -hcassandra_server_addr describering keyspacename

注意将cassandra_server和keyspacename换成实际的内容。

Spark-Cassandra-Connector

在第一节中讲解了Cassandra中Token Range信息的存储位置,以及可以使用哪些API来获取token range信息。

接下来就分析spark-cassandra-connector是如何以cassandra为数据源将数据加载进内存的。

以简单的查询语句为例,假设用户要从demo这个keyspace的tableX表中加载所有数据,用CQL来表述就是:

select * from demo.tableX
上述的查询使用spark-cassandra-connector来表述就是:

sc.cassandraTable(“demo”,”tableX”)

尽管上述语句没有触发Spark Job的提交,也就是说并不会将数据直正的从Cassandra的tableX表中加载进来,但spark-cassandra-connector还是需要进行一些数据库的操作。要解决的主要问题就是schema相关。

cassandraTable(“demo”,”tableX”)只是说要从tableX中加载数据,并没有告诉connector有哪些字段,每个字段的类型是什么。这些信息对后面使用诸如get[String](“fieldX”)来说却是非常关键的。

为了获取字段类型信息的元数据,需要读取system.schema_columns表,利用如下语句可以得到schema_columns表结构的详细信息:

desc table system.schema_columns
如果在conf/log4j.properties中将日志级别设置为DEBUG,然后再执行sc.cassandraTable语句就可以看到具体的CQL查询语句是什么。

1. CassandraRDDPartitioner

Spark-cassandra-connector添加了一种新的RDD实现,即CassandraRDD。我们知道对于一个Spark RDD来说,非常关键的就是确定getPartitions和compute函数。

getPartitions函数会调用CassandraRDDPartitioner来获取分区数目:

override def getPartitions: Array[Partition] = {    verify // let's fail fast    val tf = TokenFactory.forCassandraPartitioner(cassandraPartitionerClassName)    val partitions = new CassandraRDDPartitioner(connector, tableDef, splitSize)(tf).partitions(where)    logDebug(s"Created total ${partitions.size} partitions for $keyspaceName.$tableName.")    logTrace("Partitions: \n" + partitions.mkString("\n"))    partitions  }
CassandraRDDPartitioner中的partitions的处理逻辑大致如下:

  1. 首先确定token range,使用describe_ring
  2. 然后根据Cassandra中使用的Partitioner来确定某一个token range中可能的记录条数,这么做的原因就是为进一步控制加载的数据,提高并发度。否则并发度就永远是256了,比如有一个物理节点,其中有256个vnodes,也就是256个token分区。如果每个分区中大致的记录数是20000,而每次加载最大只允许1000的话,整个数据就可以分成256x2=512个分区。
  3. 对describeRing返回的token range进一步拆分的话,需要使用splitter,splitter的构建需要根据keyspace中使用了何种Partitioner来决定,Cassandra中默认的Partitioner是Murmur3Partitioner,Murmur3Hash算法可以让Hash值更为均匀的分布到不同节点。
  4. splitter中会利用到配置项spark.cassandra.input.split.size和spark.cassandra.page.row.size,分别表示一个线程最多读取多少记录,另一个表示每次读取多少行。

partitions的源码详见CasssandraRDDParitioner.scala

compute函数就利用确定的token的起止范围来加载内容,这里在理解的时候需要引起注意的就是flatMap是惰性执行的,也就是说只有在真正需要值的时候才会被执行,延迟触发。

数据真正的加载是发生在fetchTokenRange函数,这时使用到的就是Cassandra Java Driver了,平淡无奇。

2. fetchTokenRange

fetcchTokenRange函数使用Cassandra Java Driver提供的API接口来读取数据,利用Java API读取数据一般遵循以下步骤:

val cluster = ClusterBuilder.addContactPoint(“xx.xx.xx.xx”).buildval session = cluster.connectval stmt = new SimpleStatement(queryCQL)session.execute(session)session.closecluster.close

addContactPoint的参数是cassandra server的ip地址,在后面真正执行cql语句的时候,如果集群有多个节点构成,那么不同的cql就会在不同的节点上执行,自动实现了负载均衡。可以在addContactPoint的参数中设定多个节点的地址,这样可以防止某一节点挂掉,无法获取集群信息的情况发生。

session是线程安全的,在不同的线程使用同一个session是没有问题的,建议针对一个keySpace只使用一个session。

3. RDD中使用Session

在Spark RDD中是无法使用SparkContext的,否则会形成RDD嵌套的现象,因为利用SparkContext很容易构造出RDD,如果在RDD的函数中如map中调用SparkContext创建一个新的RDD,则形成深度嵌套进而导致Spark Job有嵌套。

但在实际的情况下,我们需要根据RDD中的值再去对数据库进行操作,那么有什么办法来打开数据库连接呢?

解决的办法就是直接使用Cassandra Java Driver而不再使用spark-cassandra-connector的高级封装,因为不能像这样子来使用cassandraRDD。

sc.cassandraRDD(“ks”,”tableX”).map(x=>sc.cassandraRDD(“ks”,”tableX”).where(filter))
如果是直接使用Cassandra Java Driver,为了避免每个RDD中的iterator都需要打开一个session,那么可以使用foreachPartition函数来进行操作,减少打开的session数。

val  rdd1 = sc.cassandraTable(“keyspace”,”tableX”)	rdd1.foreachPartition( lst => {		val cluster = ClusterBuilder.addContactPoint(“xx.xx.xx.xx”).build		val session = cluster.connect		while ( iter.hasNext ) {		 	val  elem = iter.next			//do something by using session and elem		}		session.close		cluster.close	})

其实最好的办法是在外面建立一个session,然后在不同的partition中使用同一个session,但这种方法不行的原因是在执行的时候会需要”Task not Serializable”的错误,于是只有在foreachPartition函数内部新建session。

数据备份

尽管Cassandra号称可以做到宕机时间为零,但为了谨慎起见,还是需要对数据进行备份。

Cassandra提供了几种备份的方法

  1. 将数据导出成为json格式
  2. 利用copy将数据导出为csv格式
  3. 直接复制sstable文件

导出成为json或csv格式,当表中的记录非常多的时候,这显然不是一个好的选择。于是就只剩下备份sstable文件了。

问题是将sstable存储到哪里呢?放到HDFS当然没有问题,那有没有可能对放到HDFS上的sstable直接进行读取呢,在没有经过任务修改的情况下,这是不行的。

试想一下,sstable的文件会被拆分为多个块而存储到HDFS中,这样会破坏记录的完整性,HDFS在存储的时候并不知道某一block中包含有完成的记录信息。

为了做到记录信息不会被拆分到多个block中,需要根据sstable的格式自行提取信息,并将其存储到HDFS上。这样存储之后的文件就可以被并行访问。

Cassandra中提供了工具sstablesplit来将大的sstable分割成为小的文件。

DataStax的DSE企业版中提供了和Hadoop及Spark的紧密结合,其一个很大的基础就是先将sstable的内容存储到CFS中,大体的思路与刚才提及的应该差不多。

对sstable存储结构的分析是一个研究的热门,可以参考如下的链接。

  • https://www.fullcontact.com/blog/cassandra-sstables-offline/

之所以要研究备份策略是想将对数据的分析部分与业务部分相分离开,避免由于后台的数据分析导致Cassandra集群响应变得缓慢而致前台业务不可用,即将OLTP和OLAP的数据源分离开。

通过近乎实时的数据备份,后台OLAP就可以使用Spark来对数据进行分析和处理。

高级查询 Cassandra+Solr

与传统的RDBMS相比,Cassandra所能提供的查询功能实在是弱的可以,如果想到实现非常复杂的查询功能的,需要将Cassandra和Solr进行结合。

DSE企业版提供了该功能,如果想手工搭建的话,可以参考下面的链接:

  1. http://www.slideshare.net/planetcassandra/an-introduction-to-distributed-search-with-cassandra-and-solr 
  2. https://github.com/Stratio/stratio-cassandra开源方面的尝试 Cassandra和Lucene的结合

共享SparkContext

SparkContext可以被多个线程使用,这意味着同个Spark Application中的Job可以同时提交到Spark Cluster中,减少了整体的等待时间。

在同一个线程中, Spark只能逐个提交Job,当Job在执行的时候,Driver Application中的提交线程是处于等待状态的。如果Job A没有执行完,Job B就无法提交到集群,就更不要提分配资源真正执行了。

那么如何来减少等待时间呢,比如在读取Cassandra数据的过程中,需要从两个不同的表中读取数据,一种办法就是先读取完成表A与读取表B,总的耗时是两者之和。

如果利用共享SparkContext的技术,在不同的线程中去读取,则耗时只是两者之间的最大值。

在Scala中有多种不同的方式来实现多线程,现仅以Future为例来说明问题:

val ll  = (1 to 3 toList).map(x=>sc.makeRDD(1 to 100000 toList, 3))val futures = ll.map ( x => Future {		x.count()	})val fl = Future.sequencce(futures)Await.result(fl,3600 seconds)

  1. 简要说明一下代码逻辑
  2. 创建三个不同的RDD
  3. 在不同的线程(Future)中通过count函数来提交Job
  4. 使用Await来等待Future执行结束

更多《问底》内容

  • 【问底】严澜:数据挖掘入门(一)——分词
  • 【问底】Yao Yu谈Twitter的百TB级Redis缓存实践
  • 【问底】王帅:深入PHP内核(一)——弱类型变量原理探究 
  • 【问底】王帅:深入PHP内核(二)——SAPI探究
  • 【问底】王帅:深入PHP内核(三)——内核利器哈希表与哈希碰撞攻击
  • 【问底】静行:FastJSON实现详解
  • 【问底】李平:大型网站的灵魂——性能
  • 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(一)
  • 【问底】许鹏:使用Spark+Cassandra打造高性能数据分析平台(二)
  • 【问底】徐汉彬:大规模网站架构的缓存机制和几何分形学
  • 【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群
《问底》是CSDN云计算频道新建栏目,以实践为本,分享个人对于新时代软件架构与研发的深刻见解。在含有“【问底】”字样标题的文章中,你会看到某个国外IT巨头的架构分享,会看到国内资深工程师对某个技术的实践总结,更会看到一系列关于某个新技术的探索。《问底》邀请对技术具有独特/深刻见解的你一起打造一片只属于技术的天空,详情可邮件至zhonghao@csdn.net。

CSDN诚邀您参加中国大数据有奖大调查活动,只需回答23个问题就有机会获得最高价值2700元的大奖(共10个), 速度参与进来吧!

第八届中国大数据技术大会(Big Data Technology Conference 2014,BDTC 2014)将于2014年12月12日-14日在北京新云南皇冠假日酒店召开。传承自2008年,历经七届沉淀,“中国大数据技术大会”是目前国内最具影响、规模最大的大数据领域技术盛会。本届会议,你不仅可以了解到Apache Hadoop提交者Uma Maheswara Rao G(兼项目管理委员会成员)、Yi Liu,以及Apache Hadoop和Tez项目管理委员会成员Bikas Saha等分享的通用大数据开源项目的最新成果和发展趋势,还将斩获来自腾讯、阿里、Cloudera、LinkedIn、网易等机构的数十场干货分享。 门票限时折扣中, 预购从速。


免费订阅“CSDN大数据”微信公众号,实时了解最新的大数据进展!

CSDN大数据,专注大数据资讯、技术和经验的分享和讨论,提供Hadoop、Spark、Impala、Storm、HBase、MongoDB、Solr、机器学习、智能算法等相关大数据观点,大数据技术,大数据平台,大数据实践,大数据产业资讯等服务。

七牛资深前端工程师马逸清:前端测试探索实践 实战iOS 9:开发者必须掌握的三种搜索API 腾讯Bugly干货分享:浅谈Swift在实际项目中的应用 【前端人生】ThoughtWorks黄峰达:利用横向扩展方式,快速学习前端新框架 这是前端最好的时代——论前端的“三化”建设 游戏引擎网络开发者的64做与不做(一):客户端方面 六问七牛CDN:打造融合CDN管理服务平台 《近匠》Wilddog野狗,跨平台的实时通信云服务 【CTO讲堂】招人不易留人更难——创业团队要闯哪些关? iOS UIView动画实践(四):过渡与伪3D动画 日程全公布|年度人工智能技术精英聚会 7月26-27相约北京 TypeScript 1.5发布,支持大量ES6新特性 快快快!27个提升效率的iOS开源库推荐 《近匠》Maxense,“云+传感”推动产业变革 【探秘ES6】系列专栏(九):使用Babel和Broccoli 2015年Postgres全球开发者大会参会总结 英特尔硬享公社启动“创意原型拍卖” 对接创意与商机 详解Swift 2.0(一):苹果做的25项改变 2015甲骨文数据库大会:回顾、感恩、展望,欲续写辉煌 Nokia进军VR领域:让人欢喜让人忧 2015中国人工智能大会在京成功召开 成为糟糕游戏设计师的五种打开方式 Stripe使用指南:Swift开发中的信用卡支付 将安全延伸至云端以及更远的地方 专访FreeWheel北京研发中心:一流技术型人才应具有国际化视野 iOS UIView动画实践(五):Keyframe Animation 【CTO讲堂】简说创业公司的技术选型,从BearyChat的开发说起 《近匠》Webix,跨浏览器的JavaScript UI组件库 微软正式推送Windows 10,你会升级最后一款Windows产品? Cinatra:高性能现代C++ Web框架 《移动App测试实战》作者邱鹏:我在测试过程中遇到的那些坑 在VB中能否将时间格式化为显示出毫秒来? 寻求驱动 如何给回答我问题的人加分? 如何在mshflexgrid中输入字符 如何改变当前打印机的纸型? 请问在WINXP下的怎设置IIS? 我在用 DataReport 控件对数据库进行输出时 为什么运行时总是弹出选择数据库的对话框? 这个数据库连接不是已经设置好了吗? 怎样取消textbox的凹凸感? 为什么在IE6 中使用Ctrl+Shift组合健得到的连接是http://www.china.co.cn 为什么总是出现Invalid BLOB handle in record buffer错误 大家晚上好,怎么让我的程序里有一小块是网页的内容呢?(全部家档!!) 关于Database和Session的问题!火急!(快乐的程序员) jsp+mysql如何在linux上配置 有知道黑龙江高程查分方法的吗????? *******我要一个这样的类:显示淡入淡出的菜单(最好还能有半透明的功能) *************** 特急,各位帮忙。怎么样在字符串中包含'(单引号)? 高分求助用paradox数据库保存JPEG图片的代码,我试过网上好多都没成功。markoni@21cn.com 吴文智、袁飞、Jinesc、Jneu、Amoon、ttyp、icevi、progame 快请进 请教一个表与表之间比较数据的问题,由于数据量大,造成事务不够,请教解决方案 execcommand的使用方法求救。高手请进,一定给分。 我的时钟怎么回事? Matlab论坛 打印机的取消按钮 dbgrid中当某个单元格失去焦点时触发什么事件? 关于Database和Session的问题!火急! yanxu1 学习unix下的c编程,该如何学?请介绍方法,资料什么的--我对unix和c都还熟悉。 打印机死机作何解?????? 我是新来的,请各位大哥、大姐们多多关照!!!(有内容) 再次发问关于sql server7的问题?? SQL SERVER中的一个触发器的问题!!! xml里有什么method可以取得子节点在父节点中的位置(序号)? please help me 怎么样才可以把系统存储过程的结果写到结果集里? 如何声明和使用自定义对象(如:Tdataset)的事件(beforecancel)?? 一个奇怪的问题? 各位兄弟,谁知道哪里有pb7的下载? 天呐 我提的问题从来没人回答 SQL Server小小问题 请问那里有DELPHI第二张光盘下载! 如何是使用describe来获取datawindow中的带区参数? 谁有早期的TeeChart5.ocx,文件大小为2,576,384,发行日期在2001-06-17号以前的,我这里有个crack软件,但是新下载的不行,所以重金寻求!!! 请问C语言中有字符串查找函数吗? 请问如何动态的改变应用程序的图标,一定给分 Query主从表编辑问题,从不丢失! 急急急!!!! 高分求禁止IE的自动谈出的广告,有个软见也行,或者告诉实现方法。请告诉下载的网址。 打印一些清单在delphi中用哪些控件比较好? 如何打印到文件 如何得到WINDOWS的拼音字库 如何在BCB中进行SDK编程? 一个简单关于对话框的问题------->> 甲乙两个加油站,间距为3600米,路旁有路标,原来40米一个(起点,终点各有一个),现在要改成50米一个,将有多少旧路标可以留用 一堆煤,第一次运走了总量的4分之1还少3吨,第二次运了余下的3分之1还多2吨,第三次运走了在余下的2分之1,还剩10吨,这堆煤原有几吨? 某大楼地上共有12层,地下共有4层,某人乘电梯从地下3层地上7层,电梯一共升了多少层?要列式 4.某路公共汽车,包括起点和终点共有15个车站,有一辆车除终点外,每一站上车的乘客中,恰好有一位乘客到以后的每一站下车,为了使每位乘客都有座位,问这辆公共汽车最少要有多少个座位? 连接A,B两城的高速公路,全长120km,在AB上建有两个收费站C和D,已知AC:DB=11:1`,一辆小汽车从站行驶3/4h, 一个长方体,它的高和宽相等,如果把长去掉2.5dm,就是成为一个表面积150平方分米的正方体.原长方体的体积是多少立方分米? 地下停车库入口坡道多少米? 方舟子靠什么赚钱 一个长方体,它的高和宽相等,如果把长去掉2.5dm,就成为一个表面积是150平方分米的正方体.这个长方体的长是宽的几倍?要算式 为缓解“停车难”的问题,某单位拟建造地下停车库,建筑设计师提供了该地下停车库的设计示意图为标明限高,请你根据该图计算CE.(精确到0.1m)图 一个棱长1cm的正方体拼成长方体的表面积事多少平方厘米? 一个长方体去掉俩分米后,这个长方体就变成了正方体,表面积就减少了48平方米,原来长方体表面积是多少? 转基因大米对人有危害吗 把3个棱长是1cm的正方体拼成一个长方体,这个长方体的表面积比三个正方体的表面积和减少了( )平方厘米快 来此购~急 5.长方体体积的计算方法一个长方体,它的高和宽相等,如果把长去掉1.6分米,就成为一个表面积216平方分米的正方体.原长方体的体积是多少立方分米?6.正方体体积的计算方法把一块棱长6cm的正 合肥市庐阳区某路段新建一家饭店,地面上18层,地下一层,地面上一楼为接待处,顶楼为公共设施处,其余16层为客房,地面下一楼为停车场.某日,电梯检修停电,一服务生在停车场停好汽车后,只能 数学题:为了缓解“停车难”的问题,某单位拟建造地下停车库,建筑设计师提供了地下停车库的设计示意%C地下停车库坡道口上方要张贴限高标志,来告知停车人车辆能否安全驶入,为标明限高, 某大楼地上共有12层,地下共有4层,8米,请用正负数表示.这栋楼每层的楼 abc三条公路如图所示,现在要建一个货物车站,是他到这三条公路的距离相等,做图思路 转基因大米有什么不好 某大楼共有12层,其中地下有4层,请用正负数表示这栋大楼每层的楼层数( )某人从地下2层乘电梯到地上8层,电梯一共开了几层? 什么是转基因大米 数学题为缓解“停车难”的问题,某单位拟建造地下停车库,设计师提供了车库入口设计示意图(下图),按规定为缓解“停车难”的问题,某单位拟建造地下停车库,设计师提供了车库入口设计示意 我国的转基因农作物的了解 某商场有一自动扶梯,小明以速度v沿开动(上行)的自动扶梯走上楼时,所用时间为T1,当他以相同的速度沿开动(上行)的自动扶梯走下楼时所用时间为T2,则该自动扶梯上行的速度为多少? 为了缓解“停车难”的问题,某单位拟建造地下停车库,建筑设计师提供了地下停车库的设计示意为了缓解“停车难”的问题,某单位拟建造地下停车库,建筑设计师提供了地下停车库的设计示意 高速公路建设正在招标,现有甲乙工程队竞标.若甲乙两队合作24天可以完成,需费用120万元;若甲乙两队合作20天后,剩下由乙对做,还需40天才能完成,共需费用110万元.问:(1)甲、乙两队单独 顾客站在商场自动扶梯的水平台阶上随自动扶梯匀速上升.顾客在上升过程中(c) A、机械能保持不变 B、运动状态在不断变化 C、相对于其站立的台阶是静止的 D、受到重力、支持力和摩擦 3路:每隔6分钟发一次车 5路:每隔8分钟发一次车 3路和5路的起点站都在这儿. 它们刚才同时发的车.这两路公共汽车同时发车以后,至少过多少分钟两路车才第二次同时发车?要过程! 正在修建中的某段公路在招标,现有甲乙两个工程队,若甲乙两队合作,24天可以完成,需要费用120万元;若甲队独做20天,剩下的工程由乙队做,还需40天完成,这样需要费用110万元,问:1.甲、乙两个 小明站在超市的自动扶梯上,随着自动扶梯匀速上升的过程中,小明()A.动能转化为势能,机械能减小B.只受到重力与支持力的作用C.如果选“自动扶梯”为参照物,小明是运动的D.自动扶梯对小 把7分之4千克的黄豆平均分成6份,每份是1千克的几分之几,每份是4千克的几分之几.马上要交了. 正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万,若甲单独作20...正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万, 乘超市的自动扶梯,自动扶梯的长度是22,求小明的速度与自动扶梯的速度的数学问晓明顺着扶梯的方向走,用了一分钟,用同样速度逆着走,用11分钟,自动扶梯的长度是22米, 一条72米长的路,原来从一端起,每隔9米有一盏灯(起点和终点都装有路灯).现在一条72米长的路,原来从一端起,每隔9米有一盏灯(起点和终点都装有路灯)。现在重新安装,要从一端起每 正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万元;若甲单独做20天后剩下的工程由乙做,还需40天完成,这样需费用110万元,问:(1)甲、乙两队单独完成 7明明和玲玲每个都有一些本子,如果明明给玲玲2本,两人就一样多,如果玲玲给明明1本,明明的本子就是玲玲的7倍.问明明和玲玲各有多少本子 不能用方程解 一栋大楼地下共4层地上共18层史师傅从地下4层到地上3层用了7/60分钟王老师乘电梯从地下3层到地上7层需多少分钟?(算术) 26、正在修建的某条公路招标,现有甲乙两个工程队,若甲乙合作24天可以完成,需要费用120万元;若甲单独做 "一栋大楼共20层.李叔叔乘电梯从地上10层到地下9层要20分之3李叔叔乘电梯从地下8层"到地下一层车库要多少分钟 一栋大楼地下4层,地上有18层,史师傅乘电梯从地下4层到地上4层,要六十分之七分钟,王师傅乘电梯从地下4层到地上7层,用多少分钟 一个长方体它的宽和高相等如果把长去掉2.5cm就成为一个表面积150cm的平方的正方体,长是宽的几倍 一个长方体的总和是60cm,它正好能被切成3个同样的正方体.原来的长方体的表面积是? 把三个棱长1cm的正方体拼成一个长方体,长方体的表面积是18cm2吗? 一个长方体它的宽和高相等,如果把长去掉2.5cm,就成为一个表面积150cm的平方的正方体,那么原来长方体积是多少立方厘米? 转基因的危害 转基因大米什么样 用5个棱长为1cm的小正方体拼成一个长方体,这个长方体的表面积是多少平方厘米? 一个长方体它的宽和高相等,如果把长去掉2.5cm,就成为一个表面积150cm的平方的正方体,那么原来长方体体积是多少立方厘米 一个长60cm,横截面是正方体的长方体.如果长增加6cm,表面积就增加96cm,求原来长方体的表面积和体积. 某人乘电梯从地下2层上升18层后,发现自已走错了楼层,又下降了3层,此人现在在处级 有一个长方体的表面积是150cm²,沿截面刚好锯成7个完全相同的正方体,求每个正方体的表面积.希望加上解题思路. 转基因大米人吃了有什么危害 有一段长340米的马路,要在这条马路的两侧植树.从一端为起点,每隔8.5米中一棵树,一共要种多少棵树 仓库里有60吨钢材,第一次用去总数的五分之一,第二次比第一次多用四分之一.第二次用了多少吨 一个长方体棱长总和60Cm,正好切成3个相同的正方体,原长方体体积是? 在一条长600米的公路两边植树,要求每边都每隔3米栽一棵树,如果从公路的起点栽起,一直栽到终点,一共需要多少棵树苗? 高速公路限速120KM 我跑了123KM要罚款吗?也就是在同一个地方我被拍了3次,都是超过3-5KM,我打电话问过12122,他们的解释是120KM以上的话超过1KM都要罚款,我问不是超过%20才罚款吗,交警的回答是限 每瓶饮料Xml,5瓶这样的饮料平均分给3个同学,每人可分到多少ml? 把四个棱长是1cm的正方体,拼成一个长方体,拼成的长方体的表面积.最小是()cm2 线段AB是连接A,B两城市的高速公路,全长300km,在AB上建有一个休息处C,已知AC:CB=7:3,一辆客车的速度是70km/h,请你求出这辆客车从A到C所用的时间.
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn