基于Spark2.0搭建Hive on Spark环境(Mysql本地和远程两种情况)

 Hive的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据,毕竟精通SQL语言的人要比精通Java语言的多得多。Hive适合处理离线非实时数据。

 hive on spark大体与SparkSQL结构类似,只是SQL引擎不同,但是计算引擎都是spark!

这里说的Hive on Spark是Hive跑在Spark上,用的是Spark执行引擎,而不是MapReduce。

sparksql和hive on spark时间差不多,但都比hive on mapreduce快很多,官方数据认为spark会比传统mapreduce快10-100倍。

1、mysql在本地的情况

依赖环境

JDK:1.8     Hadoop 2.7.4     spark版本2.1.1   centos:7.3  
hadoop001(master)  主机: 192.168.119.51
hadoop002(slave1)  从机: 192.168.119.52 
hadoop003(slave2)  从机: 192.168.119.53

一台物理机(windows10 64位),安装三台虚拟机(master ,slave1 ,slave2)。

安装

 Mysql,Hive都安装在master这台机器上。首先在master上面安装Mysql5.7(参考其他资料安装)。

下载解压

 下载apache-hive-2.3.2-bin.tar.gz,通过rz命令上传到master。解压文件,tar -zxvf apache-hive-2.3.2-bin.tar.gz。修改文件夹名称,mv apache-hive-2.3.2-bin hive。

环境变量

 如果是对所有的用户都生效就修改vi /etc/profile 文件

 如果只针对当前用户生效就修改 vi ~/.bahsrc 文件

sudo vi /etc/profile

#hive
export PATH=${HIVE_HOME}/bin:$PATH
export HIVE_HOME=/home/hadoop/app/hive/

使环境变量生效,运行 source /etc/profile使/etc/profile文件生效

Hive 配置 Hadoop HDFS

在conf目录下,拷贝模板进行配置:
mv hive-default.xml.template hive-site.xml

mv hive-env.sh.template hive-env.sh

在目录$HIVE_HOME/bin下面,修改文件hive-env.sh,增加以下内容:
export HADOOP_HOME=/home/hadoop/app/hadoop
export HIVE_CONF_DIR=/home/hadoop/app/hive/conf

export HIVE_AUX_JARS_PATH=/home/hadoop/app/hive/lib

修改hive-site.xml文件,修改内容如下:

<configuration>
<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://192.168.119.51:3306/hive_db?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>hive</value>
   <description>username to use against metastore database</description>
 </property>
 <property>
   <name>javax.jdo.option.ConnectionPassword</name>
   <value>hive</value>
   <description>password to use against metastore database</description>
 </property>
 </configuration>


防止hive启动报错:system:java.io.tmpdir等
解决方法:
在hive-site.xml中添加

<property>
   <name>system:java.io.tmpdir</name>
   <value>/home/hadoop/app/hive/tmpdir</value>
</property>
<property>
     <name>system:user.name</name>
     <value>hive</value>
</property>


hive-site配置内的其他内容可以不用动。

运行进入mysql,添加hive用户,并授权。

mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all on *.* to 'hive'@localhost identified by 'hive';
mysql> flush privileges;

拷贝一个mysql的连接jar包到lib目录下,我用的是 mysql-connector-java-5.1.42.jar

这样就可以开始初始化了,先启动hadoop,然后在hive的bin目录下执行命令:

./schematool -initSchema -dbType mysql
如果看到如下,表示初始化成功
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed

schemaTool completed

配置hive on spark

将hadoop的配置文件core-site.xml和hive的配置文件hive-site.xml拷贝到spark的conf目录下,并将mysql-connector-java-5.1.42.jar拷贝到spark的jars目录下。

进入spark的bin目录,运行如下命令:

hadoop@hadoop001 bin]$ ./spark-sql \
> --master spark://hadoop001:7077 \
> --executor-memory 1g \
> --total-executor-cores 2 \

> --driver-class-path /home/hadoop/app/hive/lib/mysql-connector-java-5.1.42-bin.jar;

mysql-connector-java-5.1.42.jar拷贝到spark的jars目录后--driver该条命令可以省略

进入spark-sql。

测试spark-sql

首先在本地新建一个叫person.txt的文件,内容如下:

1,zhangsan,18
2,lisi,20
3,wangwu,22
4,zhaoliu,24

spark-sql>show databases;

可以看到有一个默认的数据库名字叫default。(就是配置中的初始化的hive_db数据库)

使用默认数据库

spark-sql>use default;

新建person数据表

spark-sql>create table person(id int,name string,age int) row format delimited fields terminated by ",";

加载本地数据信息

spark-sql>load data local inpath "/home/hadoop/files/person.txt" into table person;

查询表信息

spark-sql>select * from person order by age desc;

可以得到测试数据:

4,zhaoliu,24
3,wangwu,22
2,lisi,20
1,zhangsan,18

说明hive on spark 安装成功。

2、mysql在远程的情况

依赖环境

JDK:1.8     Hadoop 2.7.4     spark版本2.1.1   centos:7.3  
hadoop001(master)  主机: 192.168.119.51
hadoop002(slave1)  从机: 192.168.119.52 
hadoop003(slave2)  从机: 192.168.119.53

一台物理机(windows10 64位),安装三台虚拟机(master ,slave1 ,slave2)。

Mysql在远程的情况是Mysql安装在物理机(windows10)上面。Hive要安装在master上面。

关键的区别在于Hive的hive-site.xml配置中的IP地址要修改成物理机的地址。

由于物理机与虚拟机之间使用的连接是:VMware Virtual Ethernet Adapter for VMnet8

IPv4 地址: 192.168.119.1,所以将hive-site.xml修改如下:

<configuration>
<property>
   <name>javax.jdo.option.ConnectionURL</name>
   <value>jdbc:mysql://192.168.119.1:3306/hive_db?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>hive</value>
   <description>username to use against metastore database</description>
 </property>
 <property>
   <name>javax.jdo.option.ConnectionPassword</name>
   <value>hive</value>
   <description>password to use against metastore database</description>
 </property>
 </configuration>

关键点说明:要保证虚拟机的hive与物理机的mysql正确连接一定要注意以下几点:

1、关闭物理机的防火墙!!!关闭物理机的防火墙!!!关闭物理机的防火墙!!!重要的事情说三遍!

有些时候配置都正确,ping物理机也能通,但是就是连不通,报一些连接失败的信息,其实是防火墙在作怪。

2、在物理机mysql执行命令:

mysql> create user 'hive'@'%' identified by 'hive';
mysql> grant all on *.* to 'hive'@localhost identified by 'hive';

mysql> flush privileges;

创建hive用户,授权可以远程访问。

3、在物理机Mysql新建hive_db数据库后,执行命令:

alter database hive character set latin1;

因为物理机默认是UTF-8的编码,而centos默认的编码是latin1。

4、修改hive-site.xml配置之后,对hive进行初始化

./schematool -initSchema -dbType mysql

其他步骤和Mysql本地的配置安装步骤相同,就不再赘述。

猜你喜欢

转载自blog.csdn.net/sonicgyq_gyq/article/details/79294940
今日推荐