1,261
社区成员
发帖
与我相关
我的任务
分享
System.out.println("0>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url", "jdbc:oracle:thin:@192.168.56.1:1521:orcl")
.option("dbtable", "testTable")
.option("user", "test")
.option("password", "test")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
jdbcDF.select("testcol", "testcol1").orderBy("testcol").write().parquet("hdfs://master:9000/test.parquet");
System.out.println("1>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> parquetFileDF = spark.read().parquet("hdfs://master:9000/test.parquet");
System.out.println("2>>>>>>>>>>>>>>>" + Util.toStr(null));
parquetFileDF.createOrReplaceTempView("parquetFile");
String sql = "SELECT testcol,count(*) c FROM parquetFile group by testcol order by c desc";
System.out.println("sql:"+ sql);
Dataset<Row> namesDF = spark.sql(sql);
System.out.println("3>>>>>>>>>>>>>>>" + Util.toStr(null));
System.out.println("4>>>>>>>>>>>>>>>" + Util.toStr(null));
namesDF.show();
System.out.println("5>>>>>>>>>>>>>>>" + Util.toStr(null));
结果发现,把parquet读出到运算得出结果大约7秒左右,比oracle运行速度稍慢一点点。
我的spark用的是三台linux虚拟机,一台master,两台worker。
请问有没有更好的方法,进一步提高效率?秒级的响应速度 。我用的测试数据是百万级别。[/quote]
首先group by count不要作为性能评估依据。。。其次你用SparkSQL就是要用UDF/UDAF以及要跑很久的复杂查询,否则你直接JDBC查Oracle算了。。。最后3台虚拟机。。。给个眼神你自己体会[/quote]
你好,还要继续请教。
现在客户数据库单张表内有5000万打的数据,每条数据大约100个字段,要求各种组合条件与分组统计的结果,要在10秒以内得出。请问,用大数据的什么方案可以完美解决此需求。现在我的问题主要是没有思路。[/quote]
SparkSQL去做没有问题,但是影响性能的首先肯定是集群硬件,其次是SQL的性能优化。。。3台虚拟机10秒内完成5kw数据的聚合查询,可能有点吃紧。另外你可以看看其他的SQL on Hadoop。impala据称是可以做到毫秒级的响应,靠的是数据的预聚合 System.out.println("0>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url", "jdbc:oracle:thin:@192.168.56.1:1521:orcl")
.option("dbtable", "testTable")
.option("user", "test")
.option("password", "test")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
jdbcDF.select("testcol", "testcol1").orderBy("testcol").write().parquet("hdfs://master:9000/test.parquet");
System.out.println("1>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> parquetFileDF = spark.read().parquet("hdfs://master:9000/test.parquet");
System.out.println("2>>>>>>>>>>>>>>>" + Util.toStr(null));
parquetFileDF.createOrReplaceTempView("parquetFile");
String sql = "SELECT testcol,count(*) c FROM parquetFile group by testcol order by c desc";
System.out.println("sql:"+ sql);
Dataset<Row> namesDF = spark.sql(sql);
System.out.println("3>>>>>>>>>>>>>>>" + Util.toStr(null));
System.out.println("4>>>>>>>>>>>>>>>" + Util.toStr(null));
namesDF.show();
System.out.println("5>>>>>>>>>>>>>>>" + Util.toStr(null));
结果发现,把parquet读出到运算得出结果大约7秒左右,比oracle运行速度稍慢一点点。
我的spark用的是三台linux虚拟机,一台master,两台worker。
请问有没有更好的方法,进一步提高效率?秒级的响应速度 。我用的测试数据是百万级别。[/quote]
首先group by count不要作为性能评估依据。。。其次你用SparkSQL就是要用UDF/UDAF以及要跑很久的复杂查询,否则你直接JDBC查Oracle算了。。。最后3台虚拟机。。。给个眼神你自己体会[/quote]
你好,还要继续请教。
现在客户数据库单张表内有5000万打的数据,每条数据大约100个字段,要求各种组合条件与分组统计的结果,要在10秒以内得出。请问,用大数据的什么方案可以完美解决此需求。现在我的问题主要是没有思路。 System.out.println("0>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url", "jdbc:oracle:thin:@192.168.56.1:1521:orcl")
.option("dbtable", "testTable")
.option("user", "test")
.option("password", "test")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
jdbcDF.select("testcol", "testcol1").orderBy("testcol").write().parquet("hdfs://master:9000/test.parquet");
System.out.println("1>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> parquetFileDF = spark.read().parquet("hdfs://master:9000/test.parquet");
System.out.println("2>>>>>>>>>>>>>>>" + Util.toStr(null));
parquetFileDF.createOrReplaceTempView("parquetFile");
String sql = "SELECT testcol,count(*) c FROM parquetFile group by testcol order by c desc";
System.out.println("sql:"+ sql);
Dataset<Row> namesDF = spark.sql(sql);
System.out.println("3>>>>>>>>>>>>>>>" + Util.toStr(null));
System.out.println("4>>>>>>>>>>>>>>>" + Util.toStr(null));
namesDF.show();
System.out.println("5>>>>>>>>>>>>>>>" + Util.toStr(null));
结果发现,把parquet读出到运算得出结果大约7秒左右,比oracle运行速度稍慢一点点。
我的spark用的是三台linux虚拟机,一台master,两台worker。
请问有没有更好的方法,进一步提高效率?秒级的响应速度 。我用的测试数据是百万级别。[/quote]
首先group by count不要作为性能评估依据。。。其次你用SparkSQL就是要用UDF/UDAF以及要跑很久的复杂查询,否则你直接JDBC查Oracle算了。。。最后3台虚拟机。。。给个眼神你自己体会[/quote]
你好,还要继续请教。
现在客户数据库单张表内有5000万打的数据,每条数据大约100个字段,要求各种组合条件与分组统计的结果,要在10秒以内得出。请问,用大数据的什么方案可以完美解决此需求。现在我的问题主要是没有思路。[/quote]
SparkSQL去做没有问题,但是影响性能的首先肯定是集群硬件,其次是SQL的性能优化。。。3台虚拟机10秒内完成5kw数据的聚合查询,可能有点吃紧。另外你可以看看其他的SQL on Hadoop。impala据称是可以做到毫秒级的响应,靠的是数据的预聚合[/quote]
看样我需要研究impala了。 System.out.println("0>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url", "jdbc:oracle:thin:@192.168.56.1:1521:orcl")
.option("dbtable", "testTable")
.option("user", "test")
.option("password", "test")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
jdbcDF.select("testcol", "testcol1").orderBy("testcol").write().parquet("hdfs://master:9000/test.parquet");
System.out.println("1>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> parquetFileDF = spark.read().parquet("hdfs://master:9000/test.parquet");
System.out.println("2>>>>>>>>>>>>>>>" + Util.toStr(null));
parquetFileDF.createOrReplaceTempView("parquetFile");
String sql = "SELECT testcol,count(*) c FROM parquetFile group by testcol order by c desc";
System.out.println("sql:"+ sql);
Dataset<Row> namesDF = spark.sql(sql);
System.out.println("3>>>>>>>>>>>>>>>" + Util.toStr(null));
System.out.println("4>>>>>>>>>>>>>>>" + Util.toStr(null));
namesDF.show();
System.out.println("5>>>>>>>>>>>>>>>" + Util.toStr(null));
结果发现,把parquet读出到运算得出结果大约7秒左右,比oracle运行速度稍慢一点点。
我的spark用的是三台linux虚拟机,一台master,两台worker。
请问有没有更好的方法,进一步提高效率?秒级的响应速度 。我用的测试数据是百万级别。[/quote]
首先group by count不要作为性能评估依据。。。其次你用SparkSQL就是要用UDF/UDAF以及要跑很久的复杂查询,否则你直接JDBC查Oracle算了。。。最后3台虚拟机。。。给个眼神你自己体会 System.out.println("0>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> jdbcDF = spark.read().format("jdbc")
.option("url", "jdbc:oracle:thin:@192.168.56.1:1521:orcl")
.option("dbtable", "testTable")
.option("user", "test")
.option("password", "test")
.option("driver", "oracle.jdbc.driver.OracleDriver")
.load();
jdbcDF.select("testcol", "testcol1").orderBy("testcol").write().parquet("hdfs://master:9000/test.parquet");
System.out.println("1>>>>>>>>>>>>>>>" + Util.toStr(null));
Dataset<Row> parquetFileDF = spark.read().parquet("hdfs://master:9000/test.parquet");
System.out.println("2>>>>>>>>>>>>>>>" + Util.toStr(null));
parquetFileDF.createOrReplaceTempView("parquetFile");
String sql = "SELECT testcol,count(*) c FROM parquetFile group by testcol order by c desc";
System.out.println("sql:"+ sql);
Dataset<Row> namesDF = spark.sql(sql);
System.out.println("3>>>>>>>>>>>>>>>" + Util.toStr(null));
System.out.println("4>>>>>>>>>>>>>>>" + Util.toStr(null));
namesDF.show();
System.out.println("5>>>>>>>>>>>>>>>" + Util.toStr(null));
结果发现,把parquet读出到运算得出结果大约7秒左右,比oracle运行速度稍慢一点点。
我的spark用的是三台linux虚拟机,一台master,两台worker。
请问有没有更好的方法,进一步提高效率?秒级的响应速度 。我用的测试数据是百万级别。