您的位置:首页 > 数据库

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所带来的好处:更换执行框架,也可以使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: