1 启动条件
Hive需要安装在成功部署的Hadoop平台上,并且要求Hadoop已经正常启动。所以,读者需要首先验证自己计算机上的Hadoop是否处于正常运行状态,方法是执行一个Hadoop命令,如“hdfs dfs -ls /”,看是否能正常显示HDFS上的目录列表;同时,通过浏览器查看系统状态,地址是“http://maser:9870”和“http://master:18088”(注意,Hadoop 3.0以前的老版本的查询地址是“http://master:50070”),查看结果应当与安装时的情况一致。如果满足上述两个条件,就说明Hadoop已经正常启动。
准备就绪后,就可以开始安装Hive了。我们打算将Hive安装在Master上,因此以下的操作均是在Master上进行的。同时,所有操作都使用csu用户,所以需要确保已经切换到csu用户。
2 部署安装
2.1 下载并解压Hive安装包
读者可以从http://archive.apache.org/dist/下载各种版本的Hive安装包,也可以直接在本书第6章软件资源中找到Hive安装包文件apache-hive-3.1.0-bin.tar.gz,这是2018年7月发布的版本。
请将该文件复制到Master的“/home/csu/resources”目录下(为了管理方便,我们建议读者把所有软件资源都放在一个目录下)。
首先将apache-hive-3.1.0-bin.tar.gz从“resources”目录下再复制至“/home/csu/”,接着进入“/home/csu/”子目录,并执行解压Hive安装包的命令。
按下Enter键后会看到解压缩过程滚动显示的信息。执行完毕后可以查看一下安装情况。请切换到“apache-hive-3.1.0-bin”目录,执行命令“ls -l”,会看到如图6-16所示的内容,这些就是Hive系统文件和目录,说明解压缩成功。
2.2 配置Hive
创建hive-site.xml文件
实际上,在Hive安装目录下的配置目录“conf”中,系统给出了一些配置文件模板,如hive-default.xml.template等,但是Hive需要的配置文件是hive-site.xml,而它并不存在,所以需要用户自己创建(可以先将hive-default.xml.template改名为hive-site.xml,然后对其进行编辑,也可以完全重新创建,前者涉及比较复杂的配置修改,为简便起见,我们采用后者)。
将下列代码添加到hive-site.xml文件中。
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>hive.metastore.local</name> <value>true</value> </property> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://master:3306/hive_168?useSSL=false&allowPublicKeyRetrieval= true&serverTimezone=GMT%2B8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.cj.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hadoopcsu</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Hive_%CSUdjhuang168168</value> </property> </configuration>
编辑完成,保存退出即可。通过“ls -l”命令可以看到“conf”目录增加了hive-site.xml文件。
如果配置出现无法连接,请重新配置JDBC连接
我这里是mysql5.6的配置
<configuration> <!-- 存储元数据mysql相关配置 --> <property> <name>javax.jdo.option.ConnectionURL</name> <value> jdbc:mysql://node1:3306/hive?createDatabaseIfNotExist=true&useSSL=false&useUnicode=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> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hadoop</value> </property> <!-- 关闭元数据存储授权 --> <property> <name>hive.metastore.event.db.notification.api.auth</name> <value>false</value> </property> <!-- 关闭元数据存储版本的验证 --> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> </configuration>
在上述代码中,“hive_168”正是我们前面在MySQL中创建的数据库,“hadoopcsu”是我们前面创建的MySQL新用户,而“Hive_%CSUdjhuang168168”则是在MySQL中创建hadoopcsu用户时所设置的密码。特别值得指出的是,我们在URL中采用的“useSSL=false& allowPublicKeyRetrieval=true&serverTimezone=GMT%2B8”包含了多个参数,需要仔细分析。首先,多参数的分割,必须使用“&”分隔符,这是xml文件的要求,有些人简单采用“&”符号,结果遇到报错,给出的提示是没有找到命令,这时往往不知什么原因,甚为郁闷;第二,由于数据库是MySQL 8.0.11,因此要求显式地设置SSL(安全套接层),我们这里设置为“false”,即不使用SSL;第三,“allowPublicKeyRetrieval”设置为“true”,以保证公钥解析;第四,MySQL 8.0.11要求明确设置时区,这里设置为东八区,其中“%2B”是“+”的转义字符,所以是GMT+8(东八区,也就是中国首都北京所在的时区)。此外,MySQL 8.0.11的驱动器也由过去的“com.mysql.jdbc.Driver”换成了“com.mysql.cj.jdbc.Driver”。
复制java connector到依赖库
请读者将第6章软件资源中的mysql-connector-java-8.0.11.jar文件复制到自己计算机Master中的“/home/csu/resources”目录下,然后进入该目录,将其中的mysql-connector-java-8.0.11.jar文件复制到Hive的安装目录的依赖库目录“lib”下,即执行“cp mysql-connector-java-8.0.11.jar ~/apache-hive-3.1.0-bin/lib/”命令。
我们顺便说一下如何才能得到上述文件。其实,在安装MySQL 8.0.11时,mysql-connector-java-8.0.11.jar这个文件就由系统放在“tmp”目录下了,用户可以在Root用户权限下通过“find”命令(在Linux终端输入“find / -name mysql-connector-java-8.0.11.jar”即可)找到该文件(图中有两个地方找到了该文件,但是后者是需要我们复制的)。当然用户也可以从MySQL官网下载这个文件,但不一定能找到。
配置.bash_profile文件
我们知道,.bash_profile文件是一个用户(如csu)使用Linux的系统配置文件,所以自然也需要为Hive进行必要的配置,可执行“gedit /home/csu/.bash_profile”命令进行配置,如图6-20所示。
export HIVE_HOME=/home/csu/apache-hive-3.1.0-bin export PATH=$PATH:$HIVE_HOME/bin
2.3 启动并验证Hive
要启动Hive,必须保证Hadoop和MySQL已经启动。
在Hadoop和MySQL已经启动的条件下,进入Hive安装目录,执行“bin/hive”命令,如果出现Hive命令提示符“hive>”(Hive交互式命令行,即Hive Shell命令的提示符),则表明Hive安装和部署成功
注意事项:
在使用Hive时,有些用户可能会遇到不能启动Hive或者启动了Hive但不能执行命令的问题。例如,输入“bin/hive”命令并按下Enter键后,出现如下的报错信息:
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache. hadoop.hive.ql.metadata. SessionHiveMetaStoreClient
或者启动后能够进入Hive交互式命令行,但是执行“show databases;”这样的命令时,给出如下异常信息:
FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache. hadoop.hive.ql.metadata. SessionHiveMetaStoreClient
从给出的信息来看,这些都是因为元数据库没有初始化而造成的。在Linux终端执行如下的命令即可解决该问题:
schematool -dbType mysql -initSchema
2.4 Hive的基本应用
Hive的应用有两种模式,即命令行模式和交互模式。命令行模式使用如同“Hadoop fs -ls /”的方式,是在Linux提示符下进行的操作;交互模式则需要进入Hive Shell,注意,Hive Shell里的每条命令后都要用分号结束。
1.命令行模式
这里给出两个实例,详细用法可参考Hive的官方文档。
(1)创建表
hive -e 'create table testDB(id int, name string, age int);'
(2)查看已经创建的表
hive -e 'show tables;'
2.交互式模式
进入Hive Shell,然后创建表,命令如图6-26所示。
create database test_db;
show databases;
退出Hive Shell命令是“exit;”或“quit;”。
从上述的实例可以发现,Hive的命令行模式与交互式模式在本质上是一致的,都是基于相同的计算引擎。