环境
- 宿主机:Windows 10 64bit
- 虚拟机:VMware 15 pro
- CentOS 7.5 64bit 3个(1个master、2个slaves)
- Hadoop-2.6.5
- jdk1.8.0_211
- MySQL-5.7.26
- Hive-1.2.2
- ssh工具:SecureCRT 7.3
(MySQL、Hive目前都只在master节点上安装了)
目录
0、准备工作
1、新建配置文件hive-site.xml
2、配置环境变量:/etc/profile
3、将JDBC库文件(jar包)复制到Hive/lib
4、启动Hive
5、Hive安装包-文件目录结构
6、Hive-初步使用
FAQ
正文
0、准备工作
安装依赖Hadoop、JDK、MySQL(它负责为Hive提供元数据存储服务):
- Hadoop集群搭建、JDK安装,参考博客
- MySQL安装,参考博客
下载安装包:hive-1.2.2、JDBC连接工具包
[root@master bigdata]# pwd
/opt/bigdata
[root@master bigdata]# curl -# -O https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
[root@master bigdata]# curl -# -O http://ftp.ntu.edu.tw/MySQL/Downloads/Connector-J/mysql-connector-java-5.1.46.tar.gz
解压:
[root@master bigdata]# tar zxvf apache-hive-1.2.2-bin.tar.gz
[root@master bigdata]# tar zxvf mysql-connector-java-5.1.46.tar.gz
1、新建配置文件hive-site.xml
(因为本身没有这个文件):配置元数据相关信息
[root@master conf]# pwd
/opt/bigdata/apache-hive-1.2.2-bin/conf
[root@master conf]# vi hive-site.xml
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</v
alue>
</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>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>111111</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/opt/bigdata/apache-hive-1.2.2-bin/warehouse</value>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.exec.dynamic.partition.mode</name>
<value>nonstrict</value>
</property>
<!--
<property>
<name>hive.txn.manager</name>
<value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value>
</property>
<property>
<name>hive.compactor.initiator.on</name>
<value>true</value>
</property>
<property>
<name>hive.compactor.worker.threads</name>
<value></value>
</property>
-->
</configuration>
上述注释部分可不要,这些属性都是用于支持事务的。
可能会报错,参考【已解决】Hive启动后报错:FAILED: LockException [Error 10280]: Error communicating with the metastore
2、配置环境变量:/etc/profile
[root@master bigdata]# vi /etc/profile #底部增加两项
...
.....
HIVE_HOME=/opt/bigdata/apache-hive-1.2.2-bin
export PATH=$HIVE_HOME/bin:$PATH
[root@master bigdata]# source /etc/profile
[root@master bigdata]# ls apache-hive-1.2.2-bin/lib/*-bin.jar
apache-hive-1.2.2-bin/lib/mysql-connector-java-5.1.46-bin.jar
3、将JDBC库文件(jar包)复制到$HIVE_HOME/lib
[root@master bigdata]# cp mysql-connector-java-5.1.46/mysql-connector-java-5.1.46-bin.jar apache-hive-1.2.2-bin/lib
4、启动Hive
因为Hive依赖Hadoop,所以得先启动Hadoop集群:
[root@master conf]# /opt/bigdata/hadoop-2.6.5/sbin/start-all.sh
...
[root@master conf]# jps
18641 SecondaryNameNode
18803 ResourceManager
18500 NameNode
18986 Jps
从节点slaves的jps
打印是:
[root@slave1 slave1]# jps
7320 DataNode
7386 NodeManager
7566 Jps
表示启动Hadoop集群成功!
[root@master conf]# hive
Logging initialized using configuration in jar:file:/opt/bigdata/apache-hive-1.2.2-bin/lib/hive-common-1.2.2.jar!/hive-log4j.properties
hive>
启动Hive成功。
5、Hive安装包-文件目录结构
Hive由Java语言编写的。
[root@master apache-hive-1.2.2-bin]# tree -L 2
.
├── bin 包含可以执行各种各样Hive服务的可执行文件。包括CLI
│ ├── beeline
│ ├── ext
│ ├── hive
│ ├── hive-config.sh
│ ├── hiveserver2
│ ├── metatool
│ └── schematool
├── conf 存放配置文件
│ ├── beeline-log4j.properties.template
│ ├── derby.log
│ ├── hive-default.xml.template
│ ├── hive-env.sh.template
│ ├── hive-exec-log4j.properties.template
│ ├── hive-log4j.properties.template
│ ├── hive-site.xml
│ ├── ivysettings.xml
│ └── metastore_db
├── examples
│ ├── files
│ └── queries
├── hcatalog
│ ├── bin
│ ├── etc
│ ├── libexec
│ ├── sbin
│ └── share
├── lib 每个jar包都实现了Hive功能中某个特定的部分
│ ├── ant-1.9.1.jar
│ ├── antlr-2.7.7.jar
│ ├── ....等等
│ └── zookeeper-3.4.6.jar
│ └── 等等各种jar包
├── LICENSE
├── NOTICE
├── README.txt
├── RELEASE_NOTES.txt
└── scripts
└── metastore
6、Hive-初步使用
进入Hive交互窗口
终端键入:hive
原理是:执行了$HIVE_HOME/bin/hive
命令(脚本/可执行文件),即启动了CLI
其中,字符串hive>
是Hive的提示符。
退出Hive,推荐方式:
hive> quit;
Hive中所有的数据都存储在HDFS中,路径是hive-site.xml
中指定的
[root@master conf]# pwd
/opt/bigdata/apache-hive-1.2.2-bin/conf
[root@master conf]# cat hive-site.xml | grep "warehouse"
<name>hive.metastore.warehouse.dir</name>
<value>hdfs://master:9000/user/hive/warehouse</value>
启动Hive的WEB界面
Hive 2.0 以后才支持Web UI的。所以Hive 1.0得自己配置,方法参考文末FAQ 4
[root@master lib]# hive --service hwi
...
浏览器输入:master:9999/hwi/
查看、终止当前正在运行的某进程
ps -ef | grep hive
e:显示每个程序所使用的环境变量。打印多,可以不要
f:用ASCII字符显示树状结构,表达程序间的相互关系
终止进程
kill -9 [PID]
FAQ
FAQ 1:在终端hive启动时,报错:
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
解决:
在hive-site.xml
文件中,连接串中加入指定SSL为false
等内容,具体如下:
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://master:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</v
alue>
</property>
不过要注意:在XML中,包括HTML中,要显示&
这个字符,必须对其进行转义,如上。
FAQ 2:在终端hive启动时,报错:
Exception in thread "main" java.lang.RuntimeException: java.net.ConnectException: Call From master/192.168.11.128 to master:9000 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused
解决:
是因为没有启动Hadoop集群呀。
$HADOOP_HOME/sbin/start-all.sh
FAQ 3:在终端hive启动时,报错:
[ERROR] Terminal initialization failed; falling back to unsupported
java.lang.IncompatibleClassChangeError: Found class jline.Terminal, but interface was expected
这是因为$HIVE_HOME/lib/
下的jline.jar
和$HADOOP_HOME/share/hadoop/yarn/lib/
的jline.jar
版本不一样,导致冲突。
[root@master conf]# pwd
/opt/bigdata/apache-hive-1.2.2-bin/conf
[root@master conf]# ls ../lib/jline*.jar
../lib/jline-2.12.jar
[root@master conf]# ls /opt/bigdata/hadoop-2.6.5/share/hadoop/yarn/lib/jline-*.jar
/opt/bigdata/hadoop-2.6.5/share/hadoop/yarn/lib/jline-0.9.94.jar
解决:
1)删除Hadoop下的低版本jline.jar
:
[root@master conf]# rm -f /opt/bigdata/hadoop-2.6.5/share/hadoop/yarn/lib/jline-0.9.94.jar
2)将Hive的更高版本的jline.jar
复制到Hadoop下:
[root@master conf]# cp ../lib/jline-2.12.jar /opt/bigdata/hadoop-2.6.5/share/hadoop/yarn/lib/
FAQ 4:在终端启动Hive Web命令hive --service hwi
时,报错:
ls: 无法访问/opt/bigdata/apache-hive-1.2.2-bin/lib/hive-hwi-*.war: 没有那个文件或目录
解决:
1)下载、解压
[root@master bigdata]# curl -# -O https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-src.tar.gz
[root@master bigdata]# tar zxvf apache-hive-1.2.2-src.tar.gz
...
2)打包(因为本身是没有这个文件的)
[root@master bigdata]# cd /opt/bigdata/apache-hive-1.2.2-src/hwi
[root@master hwi]# pwd
/opt/bigdata/apache-hive-1.2.2-src/hwi
[root@master hwi]# jar cvfM hive-hwi-1.2.2.war -C web .
3)复制
[root@master hwi]# cp hive-hwi-1.2.2.war /opt/bigdata/apache-hive-1.2.2-bin/lib/
4)在hive-site.xml新增
[root@master hwi]# vi /opt/bigdata/apache-hive-1.2.2-bin/conf/hive-site.xml
...
<property>
<name>hive.hwi.listen.host</name>
<value>master</value>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
</property>
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-1.2.2.war</value>
</property>
</configuration>
5)复制jdk/lib/tools.jar到hive/lib下
[root@master lib]# pwd
/opt/bigdata/jdk1.8.0_211/lib
[root@master lib]# cp tools.jar /opt/bigdata/apache-hive-1.2.2-bin/lib/
6)启动命令hive --service hwi
[root@master lib]# hive --service hwi
19/06/13 04:03:41 INFO hwi.HWIServer: HWI is starting up
19/06/13 04:03:42 INFO mortbay.log: Logging to org.slf4j.impl.Log4jLoggerAdapter(org.mortbay.log) via org.mortbay.log.Slf4jLog
19/06/13 04:03:42 INFO mortbay.log: jetty-6.1.26
19/06/13 04:03:42 INFO mortbay.log: Extract /opt/bigdata/apache-hive-1.2.2-bin/lib/hive-hwi-1.2.2.war to /tmp/Jetty_master_9999_hive.hwi.1.2.2.war__hwi__9kfwh7/webapp
19/06/13 04:03:42 INFO mortbay.log: Started SocketConnector@master:9999
上述方式启动以后,不能后台运行。不过可以使用nohup
来过滤一切终止命令,然后把日志全部抛出,把错误和正确的都使用一个通道,这个命令组合是:
nohup hive --service hwi > /dev/null 2 > & 1 &。