注意点: 

  • Spark是完全兼容hive的,若之前hive有自己的元数据库,则spark可以直接使用,若之前没有,则可以用spark创建hive元数据库
  • 元数据库保存的是许多描述信息,也就是数据库和表的各种信息,如数据存储信息、表结构信息等
  • 原始数据保存在HDFS中

1.首先要找到hive元数据库在什么位置

此时要导入一个配置文件,即将hive-site.xml导入到spark安装目录下的conf文件夹中,在配置文件中设置各种参数

hive-site.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://linux01:3306/hivedb?createDatabaseIfNotExist=true</value>
    <description>JDBC connect string for a JDBC metastore</description>
  </property>

   <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

  <!-- 创建一个普通用户hive,密码是123456 -->
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>username to use against metastore database</description>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>123456</value>
    <description>password to use against metastore database</description>
  </property>

  <!-- 不校验元数据 -->
  <property>
        <name>hive.metastore.schema.verification</name>
        <value>false</value>
  </property>
  <!-- 若元数据不存在,则自动生成 -->
  <property>
        <name>datanucleus.schema.autoCreateAll</name>
        <value>true</value>
  </property>

</configuration>

2.创建一个普通用户

这里不使用root用户,因为root用户操作权限太高,实际开发中不太可能用到

首先要设定密码安全等级:

查看 mysql 初始的密码策略:SHOW VARIABLES LIKE 'validate_password%'; 

设置密码的验证强度等级:set global validate_password_policy=LOW;

设置密码长度:set global validate_password_length=6;

创建用户,并且授权任何主机都可访问db

创建用户:CREATE USER 'hive'@'%' IDENTIFIED BY '123456'; 
设置权限:GRANT ALL PRIVILEGES ON hivedb.* TO 'hive'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
刷新权限:FLUSH PRIVILEGES;

注意:上述标红的hive是新建的用户,标红的hivedb是元数据库名,与配置文件中指定的相同

3.上传mysql驱动

由于要读取mysql中元数据库的信息,因此需要用到mysql驱动,即jdbc,有如下两种方式使用jdbc:

  • 将对应的驱动jar包放入到spark安装目录中的lib目录下
  • 将驱动jar包放在任意目录下,使用 --driver-class-path jar包路径 使用该驱动

推荐使用第二种方式,不建议将很多jar包放到lib下

4.设置数据存储位置

若之前不存在hive元数据库,则需要让spark创建元数据库(配置文件中已经设置好)

spark创建元数据库有一个小问题,就是数据存储默认为本地

此时需要修改生成的元数据库中的DBS表中的数据存储路径(即DB_LOCATION_URL字段),改为自己的hdfs路径,如下:

hdfs://linux01:9000/user/hive/warehouse

5.启动SparkSQL

由于没有将mysql驱动jar包放在spark的lib路径下,因此要指定 --driver-class-path 参数

/opt/apps/spark-3.0.1-bin-hadoop3.2/bin/spark-sql --master spark://linux01:7077 --driver-class-path /root/mysql-connector-java-5.1.49.jar

6.启动HiveServer

启动hiveserver服务,就可以从外界进行连接,注意这里也要指定mysql驱动jar包

/opt/apps/spark-3.0.1-bin-hadoop3.2/sbin/start-thriftserver.sh --master spark://linux01:7077 --driver-class-path /root/mysql-connector-java-5.1.49.jar

这里不指定执行内存大小与核数

使用beeline进行连接:

/opt/apps/spark-3.0.1-bin-hadoop3.2/bin/beeline -u jdbc:hive2://linux01:10000