一、搭建准备环境

在搭建HiveSparkSql进行整合之前,首先需要搭建完成HDFSSpark相关环境

这里使用HiveSpark进行整合的目的主要是:

1、使用HiveSparkSql中产生的表或者库的元数据进行管理(因为SparkSql没有提供相关的功能,官方提供的是和Hive的整合方案,官方之所以不在独立去开发一个元数据管理模块是为了防止重复造轮子),所以直接复用了Hive的元数据管理这一套内容

2、单独使用Hive的话速度太慢,所以在前期就打算切换到Spark作为计算引擎,然后使用了Spark的thriftserver向外提供JDBC相关的服务

环境准备:

hadoop版本:Hadoop-2.7.7

spark版本:Spark-2.4.0

相关安装包准备:

Mysqlmysql57-community-release-el7-11.noarch.rpm

Hiveapach-hive-1.2.2.tar.gz

Mysql驱动mysql-connector-java-5.1.47-bin.jar

如上内容是安装Hive所需要的环境

这里说一下Hive官方所推荐的Hive On Spark安装方法,官方说需要编译一个不包含Hive依赖的纯净版本的Spark版本,但是使用这种方式编译出来的内容和Spark官方编译出来的包,缺少了一些依赖,主要是在组件上,比如K8s\docker\parquert等等所以不用这种方式;并且Hive官方的支持也很慢,从官方看,没有经过测试的版本和Spark2.4进行整合的稳定版本;Spark官方目前还是集成的Hive1.2.1版本的Hive,所以这里选择跟着Spark官方走

我们后面还是主要使用的是SparkSql作为主要的使用手段,只是借助了Hive作为元数据管理的角色,至于他的那些新特性,到后面Spark进行升级的时候再进行考虑

二、Mysql搭建

这里暂时就单节点进行部署,到后面可能会考虑主-主备份的方式保证元数据安全,现在数据很少就不进行考虑了!如果后面再进行搭建,直接加一个节点部署就完了

首先我目前的服务器上是没有安装mysql的,如果安装了mysql的需要自己注意,我先检查Mysql是否有其他版本内容,若果有卸载,其他环境的话需要注意,不要印象其他业务,这里Mysql可以部署在任何一台能访问的机器上

查看是否有多余的包

$ rpm -qa |grep -i mysql

删除不需要或者多余的包

$ yum remove mysql-community mysql-community-server mysql-community-libs mysql-community-common

删除Mysql安装生成的路径

$ whereis mysql

根据情况删除出现的路径

安装msyql

$ wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
$ yum -y install mysql57-community-release-el7-10.noarch.rpm
$ yum -y install mysql-community-server
$ systemctl start mysqld.service
$ systemctl status mysqld.service #查看是否启动
$ cat /var/log/mysqld.log | grep password #记住默认密码,等会还要进行修改
$ mysql -uroot -p #此时登录进去,需要重设密码 mysql > set global validate_password_policy='LOW'; #密码校验不区分大小写
mysql > set global validate_password_length=6; #校验时密码长度
mysql > ALTER USER USER() IDENTIFIED BY '123456'; #在Mysql新 5.7.6 版本设置密码使用
mysql > ALTER USER 'hive'@'%' IDENTIFIED BY '123456'; #设置密码,这里我还把root设置(当前设置老版本使用,新版本报错)
mysql > GRANT ALL ON *.* TO 'hive'@'%' IDENTIFIED BY '123456'; #赋权限
mysql > SELECT Host,User FROM user; #删除掉一些多余的用户和权限,防止权限影响

主要登录的是hive中所要使用的用户,查看在当前机器和在其他机器上是否都能进行登录和进行相关操作,如果一切正常,那么久可以进行Hive相关内容搭建,如上内容可以在root用户或者hadoop用户都行

三、Hive环境搭建

这里Hive只是作为元数据管理角色使用,或者在某些情况下也可以使用Hive进行操作,比如,HIve delete AND update(sparkSql中不能进行删除相关操作,但是Hive中也是需要进行配置才能开启的,因为HDFS中的数据是不能进行修改的,所以基本上不推荐使用,这里也就不进行开启,后面需要再开启)

下面搭建需要再hadoop用户进行搭建

$ tar -zxvf apache-hive-1.2.2-bin.tar.gz
$ mv apache-hive-1.2.2-bin hive-1.2.2

配置Hive环境变量

/etc/profile

export HIVE_HOME=/home/hadoop/hive-1.2.2
export PATH=$PATH:$HIVE_HOME/bin
$ source /etc/profile

~/hive-1.2.2/conf/hive.site.xml配置(在进行下面配置的时候,里面配置非常多,我将其删除了,然后只留下如下配置,相当于只是覆盖了下面内容)

$ cp ~/hive-1.2.2/conf/hive.default.template ~/hive-1.2.2/conf/hive.site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master1:3306/hive?createDatabaseIfNotExist=true&amp;useSSL=false</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>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>
</configuration>

如上根据自己的Mysql地址进行配置相关地址、用户名、密码等信息

配置完成之后需要将改配置文件复制到spark/conf目录下,然后需要将mysql驱动分别复制到hive/libspark/jars目录下

上面内容设置完成之后需要进行

初始化元数据

$ schematool -dbType mysql -initSchema

数据初始换成之后会在Mysql中创建hive的库,并且在Hdfs中创建/tmp/hive/user/hive/warehouse

这两个路径都是可以在hive.site.xml中进行设置的,配置完成之后进入hive终端

$ ./hive #在使用过程中需要开启yarn hdfs
hive > show databases;
hive > use default;
hive > show tables;
hive > create table spark_on_hive(id int,username String);
hive > insert into spark_on_hive values(1,'zhangsan');
hive > select * from spark_on_hive;

执行如上命令进行相关测试,看Hive是否能够进行正常工作

出现如上内容说明配置正确,下面和sparkSql进行相关整合

四、Hive和SparkSql进行整合

上面内容中已近将Mysql驱动hive.site.xml拷贝到了Spark中,这个时候需要将Spark集群进行重启,重启完成之后,需要启动Spark的thriftserver服务

启动这个服务主要是通过这个服务进行监听JDBC的相关操作,默认端口为10000

$ ./spark-2.4.0/sbin/start-thriftserver.sh

启动完成之后可以通过Spark中自带的beeline服务来进行JDBC连接,连接到SparkSql

$ ./spark-2.4.0/bin/beeline
beeline > !connect jdbc:hive2://master1:10000/default
Enty Username : hadoop
Enty password : (空)

如上内容说明配置成功,在这里面能够查询出刚才通过hive终端创建的表和数据,同样的可以进行相关查询创建操作

beelin可以使用hive中的也可以使用spark中带的,都可以;

经过上面的测试说明jdbc也是能够进行访问SparkSql中的数据的,并且根据日志看出来所有的查询或者是创建操作走的都是Spark而不是MapReduce

如上内容可以看出走的是Spark

五、代码验证

通过使用代码进行验证是否能够使用JDBC的方式来获取查询创建SparkSql中的数据和内容

创建一个Maven项目

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.isoon.sparksql</groupId>
<artifactId>sparkjdbc</artifactId>
<version>1.0-SNAPSHOT</version> <properties>
<hive.version>1.2.1</hive.version>
</properties> <dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>${hive.version}</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.7</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>${hive.version}</version>
</dependency>
</dependencies> <build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
package com.demo;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet; /**
* created by mojita on 2019/4/8
*/
public class SparkSqlDemo { //使用jdbc进行对sparksql相关操作
public static void main(String[] args) {
try {
Class.forName("org.apache.hive.jdbc.HiveDriver");
//这里需要进行配置相关验证内容
Connection connection = DriverManager.getConnection("jdbc:hive2://192.168.8.236:10000/default","hadoop","");
ResultSet rs = connection.createStatement().executeQuery("select * from spark_on_hive");
while (rs.next()) {
System.out.printf("%d / %s\r\n", rs.getInt(1), rs.getString(2));
}
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}

如上内容说明也是能够访问成功的

六、集群搭建总览和动态资源配置

上面内容部署完成之后,只有Master节点能够提供访问,下面再进行其他节点部署,使其也能够提供正常访问

1、将Spark/conf目录下的hive-site.xml文件拷贝到需要提供访问的节点

2、拷贝mysql驱动到指定节点的spark/jars文件夹中

3、需要开启spark/sbin/start-thriftserver.sh服务

这里也只是多开启了一个客户端支持访问,并不是高可用的,Mysql同样也不是高可用的

整个部署的结构如下:

节点 hive与spark整合 hive mySql thriftServer服务
192.168.8.106 * * * *
192.168.8.236 * *

在启动thriftserver服务的时候可以设置JDBC提交Sql执行资源情况

sh $SPARK_HOME/sbin/start-thriftserver.sh \
--hiveconf hive.server2.thrift.port=10000 \
--master MASTER_URL \ //master的URL,如spark://host:port, mesos://host:port, yarn, 或local
--queue queue_name \ //如果使用yarn模式,设置队列名字
--num-executors NUM \ //executor的数目
--conf spark.driver.memory=40g \ //driver内存的大小
--driver-cores NUM \ //driver CPU数目,cluster模式才有这个参数
--executor-memory 6g \ //executor内存大小,如果开启动态分配,这个就不需要了
--conf spark.yarn.executor.memoryOverhead=2048 \ //overhead大小

如上内容为实例,想要获取更多关于./start-thriftserver.sh服务的参数可以使用如下命令./start-thriftserver.sh --help查看

使用上面内容进行提交的任务,一直会占用资源,下面进行提交和配置动态的资源分配,在任务执行完成之后根据策略回收Spark集群计算资源

设置任务动态资源提交,需要对spark配置文件进行修改spark/conf/spark-default.xml

配置Spark/conf/spark-default.xml

spark.shuffle.service.enabled true #默认值为false
spark.sql.warehouse.dir hdfs://mycluster/user/hive/warehouse

设置完成之后再每次提交任务的时候加入如下两个参数,这两个参数也可以在代码中直接指定

--conf spark.dynamicAllocation.enabled=true
--conf spark.shuffle.service.enabled=true

下面是一些策略配置(下面这些都是默认值)

spark/conf/spark-default.xml

spark.dynamicAllocation.executorIdleTimeout 60s		#60秒没有任务请求删除executors
spark.dynamicAllocation.cachedExecutorIdleTimeout infinity #如果启用了动态分配并且具有高速缓存数据块的执行程序已空闲超过此持续时间,则将删除executors
spark.dynamicAllocation.initialExecutors spark.dynamicAllocation.minExecutors #启用动态分配时要运行的初始执行程序数 如果设置了`--num-executors`(或`spark.executor.instances`)并且大于此值,它将用作执行程序的初始数。
spark.dynamicAllocation.maxExecutors infinity #启用动态分配时执行程序数的上限。
spark.dynamicAllocation.minExecutors 0 #启用动态分配时执行程序数的下限。
spark.dynamicAllocation.executorAllocationRatio 1
spark.dynamicAllocation.schedulerBacklogTimeout 1s #如果启用了动态分配,并且已有挂起的任务积压超过此持续时间,则将请求新的executor。
spark.dynamicAllocation.sustainedSchedulerBacklogTimeout schedulerBacklogTimeout #与之相同spark.dynamicAllocation.schedulerBacklogTimeout,但仅用于后续执行程序请求。 #因为使用spark作为执行引擎,让sparksql知道仓库位置,配置默认仓库位置,如果代码中使用到别的仓库可以手动指定
spark.sql.warehouse.dir hdfs://mycluster/user/hive/warehouse

如上内容根据自己需求进行配置,目前使用的都是默认的参数,没有进行更多的修改

下面是启动thriftserver服务其实这个服务也是提交了一个application所以和执行spark-submit application是一样的

./start-thriftserver.sh \
--conf spark.dynamicAllocation.enabled=true \
--conf spark.shuffle.service.enabled=true \
--conf spark.driver.maxResultSize=10g \
--master spark://master1:7077 \
--driver-memory 10g \
--driver-cores 3 \
--executor-memory 6g \
--executor-cores 3 \
--total-executor-cores 220

下面只是一个示例,在连接的时候最好还是指定仓库地址

$ ./bin/beeline --hiveconf hive.server2.thrift.port=1000 --hiveconf "hive.metastore.warehouse.dir=hdfs://master1:9000/user/hive/warehouse"

Hive环境搭建和SparkSql整合的更多相关文章

  1. Spark环境搭建(四)-----------数据仓库Hive环境搭建

    Hive产生背景 1)MapReduce的编程不便,需通过Java语言等编写程序 2) HDFS上的文缺失Schema(在数据库中的表名列名等),方便开发者通过SQL的方式处理结构化的数据,而不需要J ...

  2. 《OD大数据实战》Hive环境搭建

    一.搭建hadoop环境 <OD大数据实战>hadoop伪分布式环境搭建 二.Hive环境搭建 1. 准备安装文件 下载地址: http://archive.cloudera.com/cd ...

  3. 《Programming Hive》读书笔记(一)Hadoop和hive环境搭建

    <Programming Hive>读书笔记(一)Hadoop和Hive环境搭建             先把主要的技术和工具学好,才干更高效地思考和工作.   Chapter 1.Int ...

  4. Hive环境搭建

    hive 环境搭建需要hadoop的环境.hadoop环境的搭建不在这里赘述.参考:http://www.cnblogs.com/parkin/p/6952370.html 1.准备阶段 hive 官 ...

  5. Hadoop生态圈-Hive快速入门篇之Hive环境搭建

    Hadoop生态圈-Hive快速入门篇之Hive环境搭建 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据仓库(理论性知识大多摘自百度百科) 1>.什么是数据仓库 数据 ...

  6. Hive——环境搭建

    Hive--环境搭建 相关hadoop和mysql环境已经搭建好.我博客中也有相关搭建的博客. 一.下载Hive并解压到指定目录(本次使用版本hive-1.1.0-cdh5.7.0,下载地址:http ...

  7. elasticsearch + hive环境搭建

    一.环境介绍: elasticsearch:2.3.1 hive:0.12 二.环境搭建 2.1 首先获取elasticsearc-hadoop的jar包 链接地址:http://jcenter.bi ...

  8. 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)

    引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...

  9. Mac上Hive环境搭建

    本文介绍在Mac上搭建Hive环境. 建议首先配置好Hadoop,搭建与配置可以参考我之前的博文Mac Hadoop的安装与配置. 当然你也可以选择使用Docker搭建环境,本文不作介绍. 安装 对于 ...

随机推荐

  1. Springboot:异步业务处理(十二)

    说明 当正常业务处理调用一个复杂业务或者耗时较长的请求时,客户等待时间会比较长,造成不好的用户体验,所以这时候需要用的异步处理 构建一个群发邮件的service接口及实现(模拟) 接口:com\spr ...

  2. 微信小程序标签常见知识点归纳整理

    1. <image src='/images/logo.png' mode='widthFix'></image> mode 属性表示图片随着指定的宽度自动拉伸以显示原图的正确 ...

  3. jest enzyme unit test react

    1. 测试类型 单元测试:指的是以原件的单元为单位,对软件进行测试.单元可以是一个函数,也可以是一个模块或一个组件,基本特征就是只要输入不变,必定返回同样的输出.一个软件越容易些单元测试,就表明它的模 ...

  4. 数据源管理 | PostgreSQL环境整合,JSON类型应用

    本文源码:GitHub·点这里 || GitEE·点这里 一.PostgreSQL简介 1.和MySQL的比较 PostgreSQL是一个功能强大的且开源关系型数据库系统,在网上PostgreSQL和 ...

  5. 数值计算方法实验之Hermite 多项式插值 (Python 代码)

    一.实验目的 在已知f(x),x∈[a,b]的表达式,但函数值不便计算,或不知f(x),x∈[a,b]而又需要给出其在[a,b]上的值时,按插值原则f(xi)= yi(i= 0,1…….,n)求出简单 ...

  6. testlink配置修改

    1.      Read/write permissions报错 问题: Checking if  /var/testlink/logs/ directory exists [S] </B< ...

  7. sqlilab11-14

    less11 抓包 ' " 实验发现'构成闭合,存在注入点 less-12 a,b都有注入点,b比较好判断闭合 less13 less14

  8. Selenium常见报错问题(3)- 解决和分析NoSuchElementException

    如果你在跑selenium脚本时,需要某些异常不知道怎么解决时,可以看看这一系列的文章,看看有没有你需要的答案 https://www.cnblogs.com/poloyy/category/1749 ...

  9. 不论是 Basic Auth 还是 Digest Auth,都会有 Authorization 字段

    GET /dir/index.html HTTP/1.0 Host: localhost Authorization: Digest username="Mufasa", real ...

  10. notepad正则删除关键词所在行

    转自:http://www.gangzi.net/article/615.htm 查找:^.*大师兄.*$替换为:(空) 如果不留空行:查找:^.*大师兄.*\r?\n替换为:(空)注意:Notepa ...