前言:
首先Hive中的元数据默认存放在Derby中,Derby是单用户的,使用起来不方便,我们使用MySQL来存储Hive的元数据信息,元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。
安装mysql
直接使用yum安装mysql是无法安装mysql的高级版本, 需要先安装带有可用的mysql5系列社区版资源的rpm包,去mysql的官网下载即可
如果需要可去官网下载最新版
MySQL官方网站下载页
MySQL官网安装教程
下载完成之后放在Linux系统中,通过如下命令执行
$ sudo rpm -Uvh mysql57-community-release-el7-11.noarch.rpm
安装完成后,查看mysql安装版本列表
$ yum repolist all | grep mysql
安装mysql,只需要安装mysql-community-server即可,yum会自动检测安装依赖包
$ sudo yum -y install mysql-community-server
启动mysql
$ sudo systemctl start mysqld
mysql安装完成后root用户会有一个初始的密码,输入如下命令
$ sudo grep 'temporary password' /var/log/mysqld.log
然后使用刚刚的密码,登录到mysql
$ mysql -uroot -p
# 注意不要在-p后面直接输入密码因为有特殊字符,会登录失败的
是不是觉得密码特别难记?
输入如下命令来修改root用户的密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
注意,该版本的MySQL对用户密码安全性有所加强,所以设置的密码必须有至少
一个数字
一个大写字母
一个小写字母
一个特殊符号
密码长度至少8个字符;
修改完成后,输入exit退出shell界面,使用新密码登录即可
安装Hive
首先准备的安装包,可以去官网下载.
Hive官方网站
下载完成后上传到linux,输入如下命令解压
$ tar -zvxf apache-hive-2.3.0-bin.tar.gz
接下来就是非常重要的部分了
配置hive-site.xml文件
将其中hive-default.xml.template复制一份,叫做hive-site.xml
一开始是没有hive-site.xml的
$ cp hive-default.xml.template hive-site.xml
需要修改的配置如下,更多详情请查看Hive官方网站
Hive官方网站配置介绍
<configuration>
<property>
<name>hive.exec.local.scratchdir</name>
<value>/home/hadoop/hive/tmp/hive</value>
</property>
<property>
<name>hive.downloaded.resources.dir</name>
<value>/home/hadoop/hive/tmp/${hive.session.id}_resources</value>
<description>hive下载资源的存储目录</description>
</property>
<property>
<name>hive.querylog.location</name>
<value>/home/hadoop/hive/tmp/hive</value>
<description>hive结构日志存储目录</description>
</property>
<property>
<name>hive.server2.logging.operation.log.location</name>
<value>/home/hadoop/hive/tmp/hive/operation_logs</value>
<description>hive的操作日志目录</description>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/tmp/hive</value>
<description>hive用于存储不同阶段map/reduce的执行计划及存储中间输出结果的目录</description>
</property>
<property>
<name>hive.scratch.dir.permission</name>
<value>700</value>
<description>hive访问hadoop文件权限设置</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>P@ssw0rd</value>
<description>元数据存储的数据库的密码</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>元数据存储数据库的用户名</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive_metadata?createDatabaseIfNotExist=true&characterEncoding=utf8</value>
<description>元数据存储的数据库的url</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>元数据存储的数据库的驱动</description>
</property>
<property>
<name>datanucleus.schema.autoCreateAll</name>
<value>true</value>
<description>开启自动创建(生产环境中不推荐使用)</description>
</property>
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value></description>
</property>
<!------------ 配置hive的事务 start ------------>
<property>
<name>hive.optimize.sort.dynamic.partition</name>
<value>false</value>
</property>
<property>
<name>hive.support.concurrency</name>
<value>true</value>
</property>
<property>
<name>hive.enforce.bucketing</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>1</value>
</property>
<property>
<name>hive.in.test</name>
<value>true</value>
</property>
<!------------ 配置hive的事务 end ------------>
<property>
<name>hive.cli.print.current.db</name>
<value>true</value>
</property>
</configuration>
**在启动Hive前需要将MySQL的驱动包复制到Hive安装目录的lib目录下,否则在启动时,会报如下错误
DatastoreDriverNotFoundException: The specified datastore
driver (“com.mysql.jdbc.Driver”) was not found in the CLASSPATH
Hive启动分两个版本分别是hive1,hive2.
并且hive1和hive2的启动方式是不一样的
首先执行这个设置一下
$ $HIVE_HOME/bin/schematool -dbType <mysql> -initSchema
#hive1
$ hive --service metastore # 第一次启动时执行,以后会自动绑定不需要在输入
$ hive
#hive2
$ hiveserver2 #这里会卡在服务端的窗口类似tomcat不用管他新打开一个shell窗口执行下面的命令就ok了,
$ beeline -u jdbc:hive2://
启动成功后登录mysql,可以看到创建了一个数据库hive_metadata(具体数据库叫什么在hive-site.xml参数javax.jdo.option.ConnectionURL中配置)
后言
作者真的是想吐槽一下这个hive1返回的东西实在太难看了,完全看不出来这是个数据苦(本来也不是数据库!),
还是推荐使用hive2的方式访问hive吧.hive2的界面和mysql的shell界面非常相似