Hi,
I have done a number of extensive tests using Spark-shell with Hive DB and ORC tables. Now one issue that we typically face is and I quote: Spark is fast as it uses Memory and DAG. Great but when we save data it is not fast enough OK but there is a solution now. If you use Spark with Hive and you are on a descent version of Hive >= 0.14, then you can also deploy Spark as execution engine for Hive. That will make your application run pretty fast as you no longer rely on the old Map-Reduce for Hive engine. In a nutshell what you are gaining speed in both querying and storage. I have made some comparisons on this set-up and I am sure some of you will find it useful. The version of Spark I use for Spark queries (Spark as query tool) is 1.6. The version of Hive I use in Hive 2 The version of Spark I use as Hive execution engine is 1.3.1 It works and frankly Spark 1.3.1 as an execution engine is adequate (until we sort out the Hadoop libraries mismatch). An example I am using Hive on Spark engine to find the min and max of IDs for a table with 1 billion rows: 0: jdbc:hive2://rhes564:10010/default> select min(id), max(id),avg(id), stddev(id) from oraclehadoop.dummy; Query ID = hduser_20160523002031_3e22e26e-4293-4e90-ae8b-72fe9683c006 Starting Spark Job = 5e092ef9-d798-4952-b156-74df49da9151 INFO : Completed compiling command(queryId=hduser_20160523002031_3e22e26e-4293-4e90-ae8b-72fe9683c006); Time taken: 1.911 seconds INFO : Executing command(queryId=hduser_20160523002031_3e22e26e-4293-4e90-ae8b-72fe9683c006): select min(id), max(id),avg(id), stddev(id) from oraclehadoop.dummy INFO : Query ID = hduser_20160523002031_3e22e26e-4293-4e90-ae8b-72fe9683c006 INFO : Total jobs = 1 INFO : Launching Job 1 out of 1 INFO : Starting task [Stage-1:MAPRED] in serial mode Query Hive on Spark job[0] stages: 0 1 Status: Running (Hive on Spark job[0]) Job Progress Format CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount [StageCost] 2016-05-23 00:21:19,062 Stage-0_0: 0/22 Stage-1_0: 0/1 2016-05-23 00:21:20,070 Stage-0_0: 0(+12)/22 Stage-1_0: 0/1 2016-05-23 00:21:23,119 Stage-0_0: 0(+12)/22 Stage-1_0: 0/1 2016-05-23 00:21:26,156 Stage-0_0: 13(+9)/22 Stage-1_0: 0/1 INFO : Query Hive on Spark job[0] stages: INFO : 0 INFO : 1 INFO : Status: Running (Hive on Spark job[0]) INFO : Job Progress Format CurrentTime StageId_StageAttemptId: SucceededTasksCount(+RunningTasksCount-FailedTasksCount)/TotalTasksCount [StageCost] INFO : 2016-05-23 00:21:19,062 Stage-0_0: 0/22 Stage-1_0: 0/1 INFO : 2016-05-23 00:21:20,070 Stage-0_0: 0(+12)/22 Stage-1_0: 0/1 INFO : 2016-05-23 00:21:23,119 Stage-0_0: 0(+12)/22 Stage-1_0: 0/1 INFO : 2016-05-23 00:21:26,156 Stage-0_0: 13(+9)/22 Stage-1_0: 0/1 2016-05-23 00:21:29,181 Stage-0_0: 22/22 Finished Stage-1_0: 0(+1)/1 2016-05-23 00:21:30,189 Stage-0_0: 22/22 Finished Stage-1_0: 1/1 Finished Status: Finished successfully in 53.25 seconds OK INFO : 2016-05-23 00:21:29,181 Stage-0_0: 22/22 Finished Stage-1_0: 0(+1)/1 INFO : 2016-05-23 00:21:30,189 Stage-0_0: 22/22 Finished Stage-1_0: 1/1 Finished INFO : Status: Finished successfully in 53.25 seconds INFO : Completed executing command(queryId=hduser_20160523002031_3e22e26e-4293-4e90-ae8b-72fe9683c006); Time taken: 56.337 seconds INFO : OK +-----+------------+---------------+-----------------------+--+ | c0 | c1 | c2 | c3 | +-----+------------+---------------+-----------------------+--+ | 1 | 100000000 | 5.00000005E7 | 2.8867513459481288E7 | +-----+------------+---------------+-----------------------+--+ 1 row selected (58.529 seconds) 58 seconds first run with cold cache is pretty good And let us compare it with running the same query on map-reduce engine : jdbc:hive2://rhes564:10010/default> set hive.execution.engine=mr; Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. No rows affected (0.007 seconds) 0: jdbc:hive2://rhes564:10010/default> select min(id), max(id),avg(id), stddev(id) from oraclehadoop.dummy; WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. Query ID = hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc Total jobs = 1 Launching Job 1 out of 1 Number of reduce tasks determined at compile time: 1 In order to change the average load for a reducer (in bytes): set hive.exec.reducers.bytes.per.reducer=<number> In order to limit the maximum number of reducers: set hive.exec.reducers.max=<number> In order to set a constant number of reducers: set mapreduce.job.reduces=<number> Starting Job = job_1463956731753_0005, Tracking URL = http://localhost.localdomain:8088/proxy/application_1463956731753_0005/ Kill Command = /home/hduser/hadoop-2.6.0/bin/hadoop job -kill job_1463956731753_0005 Hadoop job information for Stage-1: number of mappers: 22; number of reducers: 1 2016-05-23 00:26:38,127 Stage-1 map = 0%, reduce = 0% INFO : Compiling command(queryId=hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc): select min(id), max(id),avg(id), stddev(id) from oraclehadoop.dummy INFO : Semantic Analysis Completed INFO : Returning Hive schema: Schema(fieldSchemas:[FieldSchema(name:c0, type:int, comment:null), FieldSchema(name:c1, type:int, comment:null), FieldSchema(name:c2, type:double, comment:null), FieldSchema(name:c3, type:double, comment:null)], properties:null) INFO : Completed compiling command(queryId=hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc); Time taken: 0.144 seconds INFO : Executing command(queryId=hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc): select min(id), max(id),avg(id), stddev(id) from oraclehadoop.dummy WARN : Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. INFO : WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. WARNING: Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases. INFO : Query ID = hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc INFO : Total jobs = 1 INFO : Launching Job 1 out of 1 INFO : Starting task [Stage-1:MAPRED] in serial mode INFO : Number of reduce tasks determined at compile time: 1 INFO : In order to change the average load for a reducer (in bytes): INFO : set hive.exec.reducers.bytes.per.reducer=<number> INFO : In order to limit the maximum number of reducers: INFO : set hive.exec.reducers.max=<number> INFO : In order to set a constant number of reducers: INFO : set mapreduce.job.reduces=<number> WARN : Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this. INFO : number of splits:22 INFO : Submitting tokens for job: job_1463956731753_0005 INFO : The url to track the job: http://localhost.localdomain:8088/proxy/application_1463956731753_0005/ INFO : Starting Job = job_1463956731753_0005, Tracking URL = http://localhost.localdomain:8088/proxy/application_1463956731753_0005/ INFO : Kill Command = /home/hduser/hadoop-2.6.0/bin/hadoop job -kill job_1463956731753_0005 INFO : Hadoop job information for Stage-1: number of mappers: 22; number of reducers: 1 INFO : 2016-05-23 00:26:38,127 Stage-1 map = 0%, reduce = 0% 2016-05-23 00:26:44,367 Stage-1 map = 5%, reduce = 0%, Cumulative CPU 4.56 sec INFO : 2016-05-23 00:26:44,367 Stage-1 map = 5%, reduce = 0%, Cumulative CPU 4.56 sec 2016-05-23 00:26:50,558 Stage-1 map = 9%, reduce = 0%, Cumulative CPU 9.17 sec INFO : 2016-05-23 00:26:50,558 Stage-1 map = 9%, reduce = 0%, Cumulative CPU 9.17 sec 2016-05-23 00:26:56,747 Stage-1 map = 14%, reduce = 0%, Cumulative CPU 14.04 sec INFO : 2016-05-23 00:26:56,747 Stage-1 map = 14%, reduce = 0%, Cumulative CPU 14.04 sec 2016-05-23 00:27:02,944 Stage-1 map = 18%, reduce = 0%, Cumulative CPU 18.64 sec INFO : 2016-05-23 00:27:02,944 Stage-1 map = 18%, reduce = 0%, Cumulative CPU 18.64 sec 2016-05-23 00:27:08,105 Stage-1 map = 23%, reduce = 0%, Cumulative CPU 23.25 sec INFO : 2016-05-23 00:27:08,105 Stage-1 map = 23%, reduce = 0%, Cumulative CPU 23.25 sec 2016-05-23 00:27:14,298 Stage-1 map = 27%, reduce = 0%, Cumulative CPU 27.84 sec INFO : 2016-05-23 00:27:14,298 Stage-1 map = 27%, reduce = 0%, Cumulative CPU 27.84 sec 2016-05-23 00:27:20,484 Stage-1 map = 32%, reduce = 0%, Cumulative CPU 32.56 sec INFO : 2016-05-23 00:27:20,484 Stage-1 map = 32%, reduce = 0%, Cumulative CPU 32.56 sec 2016-05-23 00:27:26,659 Stage-1 map = 36%, reduce = 0%, Cumulative CPU 37.1 sec INFO : 2016-05-23 00:27:26,659 Stage-1 map = 36%, reduce = 0%, Cumulative CPU 37.1 sec 2016-05-23 00:27:32,839 Stage-1 map = 41%, reduce = 0%, Cumulative CPU 41.74 sec INFO : 2016-05-23 00:27:32,839 Stage-1 map = 41%, reduce = 0%, Cumulative CPU 41.74 sec 2016-05-23 00:27:39,003 Stage-1 map = 45%, reduce = 0%, Cumulative CPU 46.32 sec INFO : 2016-05-23 00:27:39,003 Stage-1 map = 45%, reduce = 0%, Cumulative CPU 46.32 sec 2016-05-23 00:27:45,173 Stage-1 map = 50%, reduce = 0%, Cumulative CPU 50.93 sec 2016-05-23 00:27:50,316 Stage-1 map = 55%, reduce = 0%, Cumulative CPU 55.55 sec INFO : 2016-05-23 00:27:45,173 Stage-1 map = 50%, reduce = 0%, Cumulative CPU 50.93 sec INFO : 2016-05-23 00:27:50,316 Stage-1 map = 55%, reduce = 0%, Cumulative CPU 55.55 sec 2016-05-23 00:27:56,482 Stage-1 map = 59%, reduce = 0%, Cumulative CPU 60.25 sec INFO : 2016-05-23 00:27:56,482 Stage-1 map = 59%, reduce = 0%, Cumulative CPU 60.25 sec 2016-05-23 00:28:02,642 Stage-1 map = 64%, reduce = 0%, Cumulative CPU 64.86 sec INFO : 2016-05-23 00:28:02,642 Stage-1 map = 64%, reduce = 0%, Cumulative CPU 64.86 sec 2016-05-23 00:28:08,814 Stage-1 map = 68%, reduce = 0%, Cumulative CPU 69.41 sec INFO : 2016-05-23 00:28:08,814 Stage-1 map = 68%, reduce = 0%, Cumulative CPU 69.41 sec 2016-05-23 00:28:14,977 Stage-1 map = 73%, reduce = 0%, Cumulative CPU 74.06 sec INFO : 2016-05-23 00:28:14,977 Stage-1 map = 73%, reduce = 0%, Cumulative CPU 74.06 sec 2016-05-23 00:28:21,134 Stage-1 map = 77%, reduce = 0%, Cumulative CPU 78.72 sec INFO : 2016-05-23 00:28:21,134 Stage-1 map = 77%, reduce = 0%, Cumulative CPU 78.72 sec 2016-05-23 00:28:27,282 Stage-1 map = 82%, reduce = 0%, Cumulative CPU 83.32 sec INFO : 2016-05-23 00:28:27,282 Stage-1 map = 82%, reduce = 0%, Cumulative CPU 83.32 sec 2016-05-23 00:28:33,437 Stage-1 map = 86%, reduce = 0%, Cumulative CPU 87.9 sec INFO : 2016-05-23 00:28:33,437 Stage-1 map = 86%, reduce = 0%, Cumulative CPU 87.9 sec 2016-05-23 00:28:38,579 Stage-1 map = 91%, reduce = 0%, Cumulative CPU 92.52 sec INFO : 2016-05-23 00:28:38,579 Stage-1 map = 91%, reduce = 0%, Cumulative CPU 92.52 sec 2016-05-23 00:28:44,759 Stage-1 map = 95%, reduce = 0%, Cumulative CPU 97.35 sec INFO : 2016-05-23 00:28:44,759 Stage-1 map = 95%, reduce = 0%, Cumulative CPU 97.35 sec 2016-05-23 00:28:49,915 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 99.6 sec INFO : 2016-05-23 00:28:49,915 Stage-1 map = 100%, reduce = 0%, Cumulative CPU 99.6 sec 2016-05-23 00:28:54,043 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 101.4 sec MapReduce Total cumulative CPU time: 1 minutes 41 seconds 400 msec Ended Job = job_1463956731753_0005 MapReduce Jobs Launched: Stage-Stage-1: Map: 22 Reduce: 1 Cumulative CPU: 101.4 sec HDFS Read: 5318569 HDFS Write: 46 SUCCESS Total MapReduce CPU Time Spent: 1 minutes 41 seconds 400 msec OK INFO : 2016-05-23 00:28:54,043 Stage-1 map = 100%, reduce = 100%, Cumulative CPU 101.4 sec INFO : MapReduce Total cumulative CPU time: 1 minutes 41 seconds 400 msec INFO : Ended Job = job_1463956731753_0005 INFO : MapReduce Jobs Launched: INFO : Stage-Stage-1: Map: 22 Reduce: 1 Cumulative CPU: 101.4 sec HDFS Read: 5318569 HDFS Write: 46 SUCCESS INFO : Total MapReduce CPU Time Spent: 1 minutes 41 seconds 400 msec INFO : Completed executing command(queryId=hduser_20160523002632_9f91d42a-ea46-4a66-a589-7d39c23b41dc); Time taken: 142.525 seconds INFO : OK +-----+------------+---------------+-----------------------+--+ | c0 | c1 | c2 | c3 | +-----+------------+---------------+-----------------------+--+ | 1 | 100000000 | 5.00000005E7 | 2.8867513459481288E7 | +-----+------------+---------------+-----------------------+--+ 1 row selected (142.744 seconds) OK Hive on map-reduce engine took 142 seconds compared to 58 seconds with Hive on Spark. So you can obviously gain pretty well by using Hive on Spark. Please also note that I did not use any vendor's build for this purpose. I compiled Spark 1.3.1 myself. HTH Dr Mich Talebzadeh LinkedIn https://www.linkedin.com/profile/view?id=AAEAAAAWh2gBxianrbJd6zP6AcPCCdOABUrV8Pw http://talebzadehmich.wordpress.com/