安装hive前提是要先安装hadoop集群,并且hive只需要在NameNode节点集群中安装即可,可以不在DataNode节点的机器上安装。另外还需要说明的是,虽然修改配置文件并不需要你已经把hadoop跑起来,但是本文中用到了hadoop命令,在执行这些命令前你必须确保hadoop是在正常跑着的,而且启动hive的前提也是需要hadoop在正常跑着,所以建议你先将hadoop跑起来在按照本文操作。
1.前提环境
这里需要提前安装好mysql数据库,将mysql数据库作为hive的元数据库。
mysql连接器下载地址:mysql-connector-java-5.1.32-bin.jar
hive数据仓库的下载地址: hive-2.3.2/
2.Hive的安装和配置
2.1配置环境变量
编辑/etc/profile
文件,添加hive的环境变量
执行以下命令让配置生效:source /etc/profile
2.2使用mysql作为默认的元数据库
将mysql-connector-java-5.1.32-bin.jar
驱动包上载Hive的lib目录下:/usr/local/hadoop/apache-hive-2.3.2-bin/lib/
用hive/lib/jline-2.12.jar
替换$HADOOP_HOME/share/hadoop/yarm/lib/
,如果没有替换,运行./bin/hive
命令会出错。
cp jline-2.12.jar /usr/local/hadoop/hadoop-2.8.2/share/hadoop/yarn/lib/
3.配置hive-site.xml文件
3.1新建hive-site.xml(建议使用touch)
在/usr/local/hadoop/apache-hive-2.3.2-bin/conf
目录下新建hive-site.xml
,执行下面命令将hive-default.xml.template
复制到hive-site.xml
cp hive-default.xml.template hive-site.xml
3.2使用hadoop新建HDFS目录
因为在hive-site.xml中有这样的配置
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
所以要在hadoop集群新建/user/hive/warehouse目录,执行命令
cd $HADOOP_HOME #进入Hadoop主目录
bin/hadoop fs -mkdir -p /user/hive/warehouse #创建目录
bin/hadoop fs -chmod -R 777 /user/hive/warehouse #新建的目录赋予读写权限
bin/hadoop fs -mkdir -p /tmp/hive/#新建/tmp/hive/目录
bin/hadoop fs -chmod -R 777 /tmp/hive #目录赋予读写权限
#用以下命令检查目录是否创建成功
bin/hadoop fs -ls /user/hive
bin/hadoop fs -ls /tmp/hive
3.3修改hive-site.xml数据库相关的配置
将下面的配置信息添加到hive-site.xml
文件中:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://59.68.29.105:3306/hive?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>root</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>
3.4修改hive-site.xml临时目录
1、将hive-site.xml
文件中的${system:java.io.tmpdir}
替换为hive的临时目录例如:/usr/local/apache-hive-2.3.2-bin/bin/tmp/
,该目录如果不存在则要自己手工创建,并且赋予读写权限chmod -R 777 tmp/
。
2、将${system:user.name}
都替换为root
。
注意:将该配置文件中的所有
${system:java.io.tmpdir}
,${system:user.name}
全部替换掉。
3.修改hive-env.sh文件
同样将hive-env.sh.template
复制到hive-env.sh
,添加hadoop的安装目录:
cp hive-env.sh.template hive-env.sh
# Set HADOOP_HOME to point to a specific hadoop install directory
# HADOOP_HOME=${bin}/../../hadoop
HADOOP_HOME=/usr/local/hadoop/hadoop-2.8.2
# Hive Configuration Directory can be controlled by:
# export HIVE_CONF_DIR=
export HIVE_CONF_DIR=/usr/local/apache-hive-2.3.2-bin/conf
# Folder containing extra libraries required for hive compilation/execution can be controlled by:
# export HIVE_AUX_JARS_PATH=
export HIVE_AUX_JARS_PATH=/usr/local/apache-hive-2.3.2-bin/lib
4.启动和测试
4.1.对mysql数据库进行初始化
进入到hive的bin
目录,对数据库进行初始化,执行命令:(默认情况下,Hive元数据保存在内嵌的Derby数据库中,只能允许一个会话连接,只适合简单的测试,在实际生产环境中选择mysql作为元数据存储)
schematool -initSchema -dbType mysql
如果出现以下错误的情况:
上面的是将hive-default.xml.template
的内容复制到hive-default.xml
,现在解决这个问题的方法是直接新建这个hive-default.xml
这个文件,然后将关于mysql的相关配置复制上去即可。
4.2启动hive
进入hive的bin目录下执行hive的启动脚本命令:./hive
如果输入SQL语句出现下面错误
则执行./hive --service metastore &
,出现下面页面则表示启动成功:
启动mysql之后会出现hive数据库(这里不知道会不会出现hive表,我这里是手动创建的Hive数据库
mysql>create database hive;
-
grant all on *.* to root@localhost identified by '密码';
这里的root和密码是和上面的mysql配置是一致的。 flush privileges;
用数据库客户端查看hive数据库中表;
创建数据库
create database db_hive_test;
use db_hive_test;
创建测试表
create table student(id int,name string) row format delimited fields terminated by '\t';
加载数据到表中
在/home/hadoop
目录下新建student.txt文件,在该文件中写入数据(id,name 按tab键分隔)
load data local inpath '/home/hadoop/student.txt' into table db_hive_test.student;
通过UI页面查看创建的数据的位置:
http://59.68.29.105:50070/explorer.html#/user/hive/warehouse/db_hive_test.db
通过mysql查看创建的表:
select * from TBLS;
5.Spark SQL整合Hive
5.1新建hive-site.xml文件
在Spark的安装包下的conf下创建一个文件 hive-site.xml,不需要更新到其他的节点,只需要在Master节点有一份hive-site.xml就可以了。
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?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>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>NewThread506/</value>
<description>password to use against metastore database</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
//使用Hive的MetaStore,因此需要在Spark中添加其uris
<property>
<name>hive.metastore.uris</name>
<value>thrift://master:9083</value>
<description>Thrift URI for remote metastore.Used by metastore client to connect to remote metastore</description>
</property>
</configuration>
5.2开启Hive的MetaStore服务
在使用Spark SQL CLI之前需要启动Hive的MetaStore。如果数据存放在HDFS文件系统中,还需要启动Hadoop的HDFS服务。使用下面命令可启动hive的MetaStore并在后台运行。
nohup hive --service metastore > metastore.log 2>&1 &
5.3启动spark-shell
启动spark-shell之前,先spark集群start-all.sh
。
import org.apache.spark.sql.hive.HiveContext
val hc = new HiveContext(sc)
hc.sql("show databases").show
hc.sql("use db_hive_test")
hc.sql("select * from student").show
6.参考资料
https://www.jianshu.com/p/83b2f9cb3d33
https://www.cnblogs.com/kinginme/p/7233315.html