Spark SQL整合Hive使用
2018-03-28 22:51
465 查看
Spark SQL整合Hive的使用
步骤:将
$HIVE_HOME/conf/hive-site.xml拷贝到
$SPARK_HOME/conf下
整合之后启动spark-shell:
$>./spark-shell --master local[2]
产生报错:
java.net.ConnectException: Call From hadoop001/192.168.26.131 to hadoop001:8020 failed on connection exception:
java.net.ConnectException: Connection refused;
访问不到hadoop001这台机器
原因分析:
我们已经将
hive-site.xml拷贝到
$SPARK_HOME/conf下来了;Hive的数据是存放在HDFS下的;所以我们想要访问,就必须先启动HDFS
再度报错:
Caused by: org.datanucleus.store.rdbms.connectionpool.DatastoreDriverNotFoundException: The specified datastore driver ("com.mysql.jdbc.Driver") was not found in the CLASSPATH. Please check your CLASSPATH specification, and the name of the driver.
driver找不到,还需要添加个driver的jar包 因为元数据存在MySQL中
再度启动:
$>./spark-shell --master local[2] --jars /opt/software/mysql-connector-java-5.1.39-bin.jar
思考:
QA1:什么时候需要启动HDFS
QA2:Metastore ==> MySQL Driver
测试对比 Spark SQL 和 Hive 的性能:
Spark SQL:
scala>spark.sql("show tables").show //显示Hive里面的表 scala>spark.sql("select * from emp").show scala>spark.sql("select * from emp e join dept d on e.deptno=d.deptno").show //测试join操作
Hive:
// 由于Hive表中没有dept表,因此需要先创建dept表 hive>create table dept( deptno int, dname string, loc string ) row format delimited fields terminated by '\t'; // 加载数据到dept表 hive>load data local inpath '/home/hadoop/data/dept.txt' into table dept; // 使用hive进行相同的join操作 hive>select * from emp e join dept d on e.deptno=d.deptno
测试结果:
Spark SQL的速度要比Hive的稍微要快一些
使用spark-sql 进行启动:
$>./spark-sql --master local[2] --jars /opt/software/mysql-connector-java-5.1.39-bin.jar
启动成功之后并测试:
spark-sql (default)>show databases; 18/03/28 13:10:26 INFO SparkSqlParser: Parsing command: show databases 18/03/28 13:10:28 INFO HiveMetaStore: 0: get_databases: * 18/03/28 13:10:28 INFO audit: ugi=hadoop ip=unknown-ip-addr cmd=get_databases: * 18/03/28 13:10:29 INFO CodeGenerator: Code generated in 426.655397 ms default ruozedata test Time taken: 3.2 seconds, Fetched 3 row(s) 18/03/28 13:10:29 INFO CliDriver: Time taken: 3.2 seconds, Fetched 3 row(s)
default来源于hive-site.xml的配置内容:
<property> <name>hive.cli.print.current.db</name> <value>true</value> </property>
所以说Hive里的东西在Spark SQL里是通用的
spark-sql (default)>select * from emp e join dept d on e.deptno=d.deptno
跑出来的结果是一样的
刚刚在Hive里创建的表,在Spark SQL中也可以使用,这就是metasotore所带来的好处:更换执行框架,也可以使用
相关文章推荐
- SparkSQL与Hive的整合
- Spark(Hive) SQL中UDF的使用(Python)
- Spark(Hive) SQL中UDF的使用(Python)【转】
- spark sql与hive整合
- SQLContext/HiveContext/SparkSession的使用(一)
- SparkSQL:Spark整合Hive
- sparksql与hive整合
- SparkSql整合Hive注意点
- Spark-Sql整合hive,在spark-sql命令和spark-shell命令下执行sql命令和整合调用hive
- SparkSQL 初步应用(HiveContext使用)
- 3.sparkSQL整合Hive
- SQLContext/HiveContext/SparkSession的使用(三)
- spark sql on hive配置及其使用
- 实战 - Spark SQL 整合Hive时,报错找不到mysql驱动
- Spark-SQL与hive整合【版本spark1.6.0+hive0.14】--Standalone模式
- 使用java代码提交Spark的hive sql任务,run as java application
- 【Spark篇】---SparkSQL on Hive的配置和使用
- spark sql 使用hive作为数据源
- SparkSQL与Hive的整合
- Spark-sql 结合hive使用