本人对大数据方面也是刚刚研究,由于工作需要在实时查询与统计的性能方面要深入学习。现测试性能如下:
环境:VirtualBox host-only
ubuntu版本: Linux master 4.4.0-47-generic #68-Ubuntu SMP Wed Oct 26 19:39:52 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
XXX.XXX.XXX.101 master
XXX.XXX.XXX.102 Slave1
XXX.XXX.XXX.103 Slave2
XXX.XXX.XXX.104 Client1
XXX.XXX.XXX.1 HOST 数据库安装于宿主机器内
在master中start-all 成功启动后。slave1与Slave2 Work启动成功。
在Client机器中启动 spark-shell --master spark://master:7077 --jars ../lib/ojdbc6.jar 启动成功 执行下面的指令
val url = "jdbc:oracle:thin:@XXX.XXX.XXX.1:1521:orcl" val tableName = "mytables" val prop = new java.util.Properties prop.setProperty("user","test") prop.setProperty("password","test")
prop.setProperty("driver","oracle.jdbc.driver.OracleDriver")
val predicates = Array( "2013-01-01" -> "2014-01-01", "2014-01-01" -> "2015-01-01", "2015-01-01" -> "2016-01-01",
"2016-01-01" -> "2017-01-01" ).map { case (start, end) => s" indbtime>= to_date('$start','yyyy-mm-dd') " + s" AND indbtime<= to_date( '$end','yyyy-mm-dd')" }
val jdbcDF = sqlContext.read.jdbc(url,tableName,predicates,prop)
scala> jdbcDF.count()
16/11/29 17:19:49 INFO DAGScheduler: Job 0 finished: count at <console>:30, took 41.144126 s
res4: Long = 1441039
结论:
1441039的数据耗时要41秒,而在数据库里直接用select count(*) from tables ,不到一秒就返回结果。
我知道集群的spark应该会比单机的oracle功能更强大,请高手指点,哪儿出的问题?
对数据库表里上亿条的数据各种组合条件与统计字段交叉,要求10秒内返回结果,请问大牛们,如何实现??
大数据初学,问题有些低级,望专业人士不要见笑。