1.安装MySQL(hive的元数据库)并创建一个普通用户,并且授权
CREATE USER 'laoli'@'%' IDENTIFIED BY '123568';
GRANT ALL PRIVILEGES ON hivedb.* TO 'laoli'@'%' IDENTIFIED BY '123568' WITH GRANT OPTION;
FLUSH PRIVILEGES;
#在spark的conf目录下创建一个hive的配置文件
2.添加一个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://pro01: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>
#用户名
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>laoli</value>
<description>username to use against metastore database</description>
</property>
#密码
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123568</value>
<description>password to use against metastore database</description>
</property>
</configuration>
3.上传一个mysql连接驱动(sparkSubmit也要连接MySQL,获取元数据信息)
./spark-sql --master spark://node-4:7077,node-5:7077 --driver-class-path /root/mysql-connector-java-5.1.7-bin.jar
jar包下载地址:链接: https://pan.baidu.com/s/1smGoGr45EsjRqu0kuciIpg 提取码: kr29 复制这段内容后打开百度网盘手机App,操作更方便哦
4.sparkSQL会在mysql上创建一个database,需要手动改一下DBS表中的DB_LOCATION_UIR改成hdfs的地址
5.要在/etc/profile中配置一个环节变量(让sparkSQL知道hdfs在哪里,其实就是namenode在哪里)
exprot HADOOP_CONF_DIR
注:配置完后记得source etc/profile
6.重新启动SparkSQL的命令行(完成)
Hive原来的计算模型是MR,有点慢(将中间结果写入到HDFS中)
Hive On Spark 使用RDD(DataFrame),然后运行在spark 集群上
hive跟mysql的区别?
真正要计算的数据是保存在HDFS中,mysql这个元数据库,保存的是hive表的描述信息,描述了有哪些database、table、以及表有多少列,每一列是什么类型,还要描述表的数据保存在hdfs的什么位置?
hive是一个数据仓库(存储数据并分析数据,分析数据仓库中的数据量很大,一般要分析很长的时间)
mysql是一个关系型数据库(关系型数据的增删改查(低延迟))
hive的元数据库中保存怎知要计算的数据吗?
不保存,保存hive仓库的表、字段、等描述信息
真正要计算的数据保存在哪里了?
保存在HDFS中了
hive的元数据库的功能
建立了一种映射关系,执行HQL时,先到MySQL元数据库中查找描述信息,然后根据描述信息生成任务,然后将任务下发到spark集群中执行
#spark sql 整合hive,将hive的sql写在一个文件中执行(用-f这个参数)
/bigdata/spark-2.2.0-bin-hadoop2.7/bin/spark-sql --master spark://node-4:7077,node-5:7077 --driver-class-path /home/xiaoniu/mysql-connector-java-5.1.7-bin.jar -f hive-sqls.sql
在idea中开发,整合hive
<!-- spark如果想整合Hive,必须加入hive的支持 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-hive_2.11</artifactId>
<version>2.2.0</version>
</dependency>
//如果想让hive运行在spark上,一定要开启spark对hive的支持
val spark = SparkSession.builder()
.appName("HiveOnSpark")
.master("local[*]")
.enableHiveSupport()//启用spark对hive的支持(可以兼容hive的语法了)
.getOrCreate()
在driver端执行时我们可以在后面加一些命令
-e sql语句
-f SQL文件
注:该sql文件可以加入多条sql语句,以;结尾
注:在idea中执行时必须将我们先前设置的hive-site.xml文件复制到resources文件夹中,并且还有我们hadoop的两个配置文件拷贝下来放入