hostname | hadoopSvr1 | hadoopSvr3 | hadoopSvr4 |
---|---|---|---|
IP | 10.62.124.41 | 10.62.124.43 | 10.62.124.44 |
Hive | hive/MySql |
Hive的元数据和数据是分开存放的,数据存放在HDFS上,而元数据默认是存在Hive自带的Derby数据库,但由于Derby只支持同时一个用户访问Hive,所以不推荐使用。我们将使用MySql作为Hive的元数据库。MySql的安装方法如下(以root用户在从节点hadoopSvr3上安装为例)
MySql安装参考:https://blog.csdn.net/wangkai_123456/article/details/87603464
MySql授权允许远程访问的账号信息如下
允许访问的主机:不限
用户名:root
密码:xhw888
tar zxvf apache-hive-3.1.1-bin.tar.gz
mv apache-hive-3.1.1-bin hive //重命名目录
vi /etc/profile
打开后,在文档最下方添加如下配置:
export HIVE_HOME=/usr/local/hive
export PATH=$HIVE_HOME/bin:$PATH
:wq!保存退出,执行如下命令,使更改生效
source /etc/profile
执行hive --version
[root@hadoopSvr3 local]# hive --version
有hive的版本显现,表示安装成功!
切换目录到$HIVE_HOME/conf/下
cd hive/conf/ #进入hive配置目录
#从配置模板复制
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
在hive-env.sh末尾添加以下内容(这是我的配置,你可以自行修改):
HADOOP_HOME=/usr/local/hadoop-3.2.0
这里修改成自己的hadoop安装目录;
#从配置模板复制
cp hive-default.xml.template hive-site.xml
vi hive-site.xml
将里面的内容修改为
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://10.62.124.43: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.cj.jdbc.Driver</value>
</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>xhw888</value>
<description>password to use against metastore database</description>
</property>
</configuration>
“hive-site.xml”是一个“hive-default.xml.template”的一个拷贝,里面的配置参数非常之多,但是并不是我们都需要的,我们知道,Hive系统会加载两个配置文件一个默认配置文件“hive-default.xml”,另一个就是用户自定义文件“hive-site.xml”。当“hive-site.xml”中的配置参数的值与“hive-default.xml”文件中不一致时,以用户自定义的为准。所以我们就把我们不需要的参数都删除掉,只留下上面所示的内容。
进入 hadoop 安装目录 执行hadoop命令新建如下目录,并授权,用于存储文件
cd hadoop-3.2.0
bin/hadoop fs -mkdir -p /user/hive/warehouse
bin/hadoop fs -mkdir -p /user/hive/tmp
bin/hadoop fs -chmod -R 777 /user/hive/tmp
用以下命令检查目录是否创建成功
bin/hadoop fs -ls /user/hive
修改 hive-site.xml,在hive-site.xml文件中增加如下配置内容
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
<description>location of default database for the warehouse</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
<description>HDFS root scratch dir for Hive jobs which gets created with write all (733) permission. For each connecting user, an HDFS scratch dir: ${hive.exec.scratchdir}/<username> is created, with ${hive.scratch.dir.permission}. </description>
</property>
hive的使用需要访问hdfs,hdfs不允许匿名访问,配置代理用户使用属性 hadoop.proxyuser.$superuser.hosts 或则使用 hadoop.proxyuser.$superuser.groups 和 adoop.proxyuser.$superuser.users,这里配置使用超级用户hadoop来代理其它用户(如hive用户)
配置方法:进入到hadoop的安装目录下的etc/hadoop文件夹,配置其中的core-site.xml文件,在最后新增如下配置
<property>
<name>hadoop.proxyuser.XXX.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.XXX.groups</name>
<value>*</value>
</property>
其中,XXX是用来代理其它用户访问hdfs的用户名,此处我的配置如下
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.haoop.groups</name>
<value>*</value>
</property>
然后重启hdfs。
hive使用MySql作为元数据库,需要下载mysql的jdbc
下载地址:https://dev.mysql.com/downloads/connector/j/
Select Operating System:Platform Independent
选择下载:mysql-connector-java-8.0.15.tar.gz
#解压
tar zxvf mysql-connector-java-8.0.15.tar.gz
#将解压后mysql-connector-java-8.0.15目录下的mysql-connector-java-8.0.15.jar放到hive安装包的lib目录下
cp mysql-connector-java-8.0.15.jar /usr/local/hive/lib/
cd /usr/local/hive/bin
./schematool -initSchema -dbType mysql
如果看到如下信息,表示初始化成功
Metastore connection URL: jdbc:mysql://10.62.124.43:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver : com.mysql.cj.jdbc.Driver
Metastore connection User: root
Starting metastore schema initialization to 3.1.0
Initialization script hive-schema-3.1.0.mysql.sql
Initialization script completed
schemaTool completed
nohup hive --service metastore &
在hadoopSvr3上执行hive
which: no hbase in (/usr/local/hive/bin:/usr/local/spark/bin:/usr/local/hadoop-3.2.0/bin:/usr/local/scala/bin:/usr/local/mongodb/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/hadoop-3.2.0/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Hive Session ID = 42d35ec5-5cc7-4b52-8cfe-39242f17292c
Logging initialized using configuration in jar:file:/usr/local/hive/lib/hive-common-3.1.1.jar!/hive-log4j2.properties Async: true
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
hive>
若成功进入hive界面,则证明hive配置完成。
Hive在生产上是不需要部署集群的,操作Hive只需要通过它提供的客户端即可,Hive提供了大致三类客户端:
hive shell:通过hive shell来操作hive,但是至多只能存在一个hive shell,启动第二个会被阻塞,也就是说hive shell不支持并发操作。
WebUI: 通过HUE/Zeppelin来对Hive表进行操作。
基于JDBC等协议:启动hiveserver2,通过jdbc协议可以访问hive,hiveserver2支持高并发。
简而言之,hiveserver2是Hive启动了一个server,客户端可以使用JDBC协议,通过IP+ Port的方式对其进行访问,达到并发访问的目的。
本次演示使用的Hive版本是:apache-hive-2.1.0,开发工具是IDEA2018
启动Hive有两条命令:$HIVE_HOME/bin/./hive --service hiveserver2 或者
$HIVE_HOME/bin/./hiveserver2,hiveserver2的服务端口默认是10000,WebUI端口默认是10002,在终端使用命令netstat -anop|grep 10000 和 netstat -anop|grep 10002:
参数名 | 默认值 | 说明 | 建议 |
---|---|---|---|
hive.default.fileformat | hive的默认存储格式 | 建议配置为ORC存储格式 |