安装Hive及配置HiveSever2
Hive是一个数据仓库基础工具在Hadoop中用来处理结构化数据。它架构在Hadoop之上,提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行,使查询和分析方便。
1.安装配置hive
这里使用的是hive-2.3.7版,下载地址:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
下载后使用filezilla上传虚拟机并解压命令:tar -zxvf 要解压的文件名
配置环境变量 vi /etc/profile #追加以下内容
export HIVE_HOME=hive文件路径
export PATH=$PATH:$HIVE_HOME/bin
配置后使用 source /etc/profile #更新源
进入到hive的conf目录下
(1).配置配置hive-env.sh文件,但是并没有,我们需要把hive-env.sh.template拷贝一份
cp hive-env.sh.template hive-env.sh
vi hive-env.sh #追加以下内容
export JAVA_HOME=/opt/jdk1.8.0_161 #这里写你的配置jdk的路径
export HADOOP_HOME=/opt/hadoop-2.6.0-cdh5.7.0 #这里写你的配置hadoop的路径
(2).配置hive-site.xml(需要创建)
touch 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://192.168.56.2:3306/hive?useSSL=false&createDatabaseIfNotExist=true&characterEncoding=UTF-8</value>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value> # mysql用户
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>123456</value> # mysql密码
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
</property>
</configuration>
*注意在上面配置中 useSSL=false 解决SSL警告(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议,设置useSSL = true并为服务器证书验证提供信任库。
配置文件是 .XML 格式,而在xml文件中&;才表示&。
property标签的内容意义如下:
配置参数 | 值配置 | 注解 |
---|---|---|
javax.jdo.option.ConnectionURL | jdbc:mysql://<host name>/<database name>?createDatabaseIfNotExist=true |
元数据存储在mysql服务器中 |
javax.jdo.option.ConnectionDriverName | com.mysql.jdbc.Driver |
mysql jdbc驱动程序类 |
javax.jdo.option.ConnectionUserName | <user name> |
连接到MySQL server的用户名 |
javax.jdo.option.ConnectionPassword | <password> |
连接到MySQL server的密码 |
datanucleus.schema.autoCreateAll | true/false |
自动生成设置表 |
(3).将mysql驱动包 mysql-connector-java-5.1.45-bin.jar 导入hive的lib下
注意在mysql里创建hive并赋权(配置mysql请参考:https://www.cnblogs.com/A-Nan-q/p/14164177.html)
(4).启动Hadoop 使用schematool 初始化hive的元数据
schematool -initSchema -dbType mysql
如果安全模式则,只要在Hadoop的目录下输入:bin/hadoop dfsadmin -safemode leave
初始化失败原因有很多,如配置文件是否无误,mysql里的hive数据库等等..
(5).启动hive
hive (因为在/etc/profile中配置过$HIVE_HOME所以可以直接使用have启动)
启动报错1
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/hadoop-2.7.3/share/hadoop/common/lib/slf4j-log4j12-1.7.10.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]
错误原因log4j冲突,删掉一个
rm -r /opt/hive-2.3.7/lib/log4j-slf4j-impl-2.6.2.jar
启动报错2
Logging initialized using configuraion in file:/opt/hive-2.3.7/conf/hive-log4j2.properties Async: true
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Call From wuya/192.168.56.2 to wuya:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:610)
at org.apache.hadoop.hive.ql.session.SessionState.beginStart(SessionState.java:553)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:750)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:686)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136
错误原因 hadoop未启动
2.配置HiveSever2
hiveserver 在老版本中还能使用,但现在的新版本已经不在支持 1.2开始就不再支持,hiveserver2 为了区分新老版本,名字就叫做hiveserver2。
hive配置成功后配置hiveserver2需要:
1.进入hive的conf的目录下配置hive-site.xml
<!-- 这是hiveserver2 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>127.0.0.1</value>
</property>
**2.hadoop的配置也需要修改 core-site.xml **
注意:如果是hadoop集群而不是单机版,需要更改所有虚拟机上的core-site.xml文件
vi /hadoop安装路径/etc/hadoop/core-site.xml
<!-- 如果连接不上10000 -->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.master.hosts</name> #master配置的主机名 hostname命令查看主机名
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.master.groups</name> #master配置的主机名
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hive.groups</name>
<value>*</value>
</property>
3.测试
首先启动你集群中的Zookeeper和Hadoop
然后在安装hive的主机上启动hiveserver2
[root@master ~]# hiveserver2
#或者
[root@master ~]# hive --service hiveserver2
这个时候你的页面会一直卡在这里,这是正常的,因为你是启动了一个服务
你只需要再开一个Xshell窗口连接即可在新开的窗口操作
[root@master ~]# beeline
Beeline version 2.3.7 by Apache Hive
beeline> !connect jdbc:hive2://192.168.56.2:10000
Connecting to jdbc:hive2://192.168.56.2:10000
Enter username for jdbc:hive2://192.168.56.2:10000: root #用户名root
Enter password for jdbc:hive2://192.168.56.2:10000: ****** #密码root
Connected to: Apache Hive (version 2.3.7)
Driver: Hive JDBC (version 2.3.7)
Transaction isolation: TRANSACTION_REPEATABLE_READ
0: jdbc:hive2://192.168.56.2:10000>
然后使用浏览器在你的192.168.56.2(安装hive的主机ip地址):10002查看
接下来可以在hiveserver2中操作,基本操作和hive中一样
0: jdbc:hive2://192.168.56.2:10000> show databases;
+----------------+
| database_name |
+----------------+
| default |
+----------------+
1 row selected (2.006 seconds)