Spark SQL 3.Hive On Spark


1. Spark on hive 与 Hive on Spark 的区别

  • Spark on hive

Spark通过Spark-SQL使用hive 语句操作hive,底层运行的还是 spark rdd

  1. 就是通过sparksql,加载hive的配置文件,获取到hive的元数据信息

  2. spark sql获取到hive的元数据信息之后就可以拿到hive的所有表的数据

  3. 接下来就可以通过spark sql来操作hive表中的数据

  • Hive on Spark

把hive查询从mapreduce 的 MapReduce计算引擎,操作替换为spark 执行引擎, 相对于spark on hive,这个要实现起来则麻烦很多, 必须重新编译你的spark和导入jar包,不过目前大部分使用的是spark on hive。

2. SparkSQL与hive进行整合

  1. 拷贝hive-site.xml配置文件

将node3服务器安装的hive家目录下的conf文件夹下面的hive-site.xml拷贝到spark安装的各个机器节点,node3执行以下命令进行拷贝

cd /opt/install/hive-1.1.0-cdh5.14.2/conf
scp hive-site.xml  node01:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
scp hive-site.xml  node02:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
scp hive-site.xml  node3:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
  1. 拷贝mysql连接驱动包

将hive当中mysql的连接驱动包拷贝到spark安装家目录下的lib目录下,node3执行下命令拷贝mysql的lib驱动包

cd /opt/install/hive-1.1.0-cdh5.14.2/lib/
scp mysql-connector-java-5.1.38.jar  node01:/opt/install/spark-2.3.3-bin-hadoop2.7/jars/
scp mysql-connector-java-5.1.38.jar  node02:/opt/install/spark-2.3.3-bin-hadoop2.7/jars/
scp mysql-connector-java-5.1.38.jar  node3:/opt/install/spark-2.3.3-bin-hadoop2.7/jars/
  1. 进入spark-sql直接操作hive数据库当中的数据

在spark2.0版本后由于出现了sparkSession,在初始化sqlContext的时候,会设置默认的==spark.sql.warehouse.dir=spark-warehouse==,

此时将hive与sparksql整合完成之后,在通过spark-sql脚本启动的时候,还是会在哪里启动spark-sql脚本,就会在当前目录下创建一个spark.sql.warehouse.dir为spark-warehouse的目录,存放由spark-sql创建数据库和创建表的数据信息,与之前hive的数据息不是放在同一个路径下(可以互相访问)。但是此时spark-sql中表的数据在本地,不利于操作,也不安全。

所有在启动的时候需要加上这样一个参数:

–conf spark.sql.warehouse.dir=hdfs://node01:8020/user/hive/warehouse

保证spark-sql启动时不在产生新的存放数据的目录,sparksql与hive最终使用的是hive同一存放数据的目录。

node01直接执行以下命令,进入spark-sql交互界面,然后操作hive当中的数据,

cd /opt/install/spark-2.3.3-bin-hadoop2.7/

bin/spark-sql  --master local[2] \
--executor-memory 512m --total-executor-cores 3 \
--conf  spark.sql.warehouse.dir=hdfs://node01:8020/user/hive/warehouse \
--jars /opt/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/common/hadoop-lzo-0.4.20.jar

使用sparkSQL有hive进行整合之后,就可以通过sparkSQL语句来操作hive表数据了

  • 应用场景
#!/bin/sh
#定义sparksql提交脚本的头信息
SUBMITINFO="spark-sql --master spark://node01:7077 --executor-memory 1g --total-executor-cores 4 --conf spark.sql.warehouse.dir=hdfs://node01:8020/user/hive/warehouse" 
#定义一个sql语句
SQL="select * from default.hive_source;" 
#执行sql语句   类似于 hive -e sql语句
echo "$SUBMITINFO" 
echo "$SQL"
$SUBMITINFO -e "$SQL"

3. 启用spark thrift server与hive交互

除了可以通过spark-shell来与hive进行整合之外,我们也可以通过spark的thrift服务来远程与hive进行交互

  1. 修改hive-site.xml的配置

node3执行以下命令修改hive-site.xml的配置属性,添加以下几个配置

cd /opt/install/hive-1.1.0-cdh5.14.2/conf
vim hive-site.xml


<property>
   <name>hive.metastore.uris</name>
   <value>thrift://node3:9083</value>
   <description>Thrift URI for the remote metastore</description>
 </property>
 <property>
       <name>hive.server2.thrift.min.worker.threads</name>
       <value>5</value>
  </property>
  <property>
       <name>hive.server2.thrift.max.worker.threads</name>
       <value>500</value>
  </property>
  <property>
       <name>hive.server2.thrift.port</name>
       <value>10000</value>
  </property>
  <property> 
      <name>hive.server2.thrift.bind.host</name>
       <value>node3</value>
  </property>
  1. 修改完的配置文件分发到其他机器

node3执行以下命令分发hive配置文件

 cd /opt/install/hive-1.1.0-cdh5.14.2/conf
 scp hive-site.xml  node01:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
 scp hive-site.xml  node02:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
 scp hive-site.xml  node3:/opt/install/spark-2.3.3-bin-hadoop2.7/conf/
  1. node3启动metastore服务

node3执行以下命令启动metastore服务

cd /opt/install/hive-1.1.0-cdh5.14.2/
bin/hive --service metastore
  1. node3执行以下命令启动spark的thrift server

==注意:hive安装在哪一台,就在哪一台服务器启动spark的thrift server==

我的hive安装在node3服务器,所以我在node3服务器上面启动spark的thrift server服务

node3执行以下命令启动thrift server服务

cd /opt/install/spark-2.3.3-bin-hadoop2.7

sbin/start-thriftserver.sh --master local[2]  --executor-memory 5g --total-executor-cores 5 --jars /opt/install/hadoop-2.6.0-cdh5.14.2/share/hadoop/common/hadoop-lzo-0.4.20.jar 
  1. 直接使用beeline来连接

直接在node3服务器上面使用beeline来进行连接spark-sql

cd /opt/install/spark-2.3.3-bin-hadoop2.7
bin/beeline 

beeline> !connect jdbc:hive2://node3:10000
Connecting to jdbc:hive2://node3:10000
Enter username for jdbc:hive2://node3:10000: hadoop
Enter password for jdbc:hive2://node3:10000: ******

文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
Spark SQL 4.架构介绍 Spark SQL 4.架构介绍
1. SparkSQL架构介绍 SparkSQL 是spark技术栈当中又一非常实用的模块, SparkSQL 通过引入SQL的支持,大大降低了学习成本,让我们开发人员直接使用SQL的方式就能够实现大数据的开发, SparkSQL 同时支持
2018-06-05
下一篇 
倒排索引 倒排索引
1. 介绍倒排索引源于实际应用中需要根据属性的值来查找记录。 这种索引表中的每一项都包括一个属性值和具有该属性值的各记录的地址。 由于不是由记录来确定属性值, 而是由属性值来确定记录的位置, 因而称为倒排索引(inverted index)
2018-05-29
  目录