默认情况下,hive元数据保存在内嵌的 derby 数据库中,只能允许一个会话连接,只适合简单的测试。为了支持多用户多会话,则需要一个独立的元数据库,我们使用 mysql 作为元数据库,hive 内部对 mysql 提供了很好的支持,配置一个独立的元数据库需要增加以下几步骤:
第一步:安装mysql服务器端和mysql客户端,并启动mysql服务。
此步省略,具体请看http://www.cnblogs.com/linjiqin/archive/2013/03/04/2942497.html
第二步:安装hive
此步省略,具体请看http://www.cnblogs.com/linjiqin/archive/2013/03/04/2942402.html
第三步:为hive建立相应的mysql账户,并赋予足够的权限,执行命令如下:
hadoop@ubuntu:~$ mysql -uroot -pmysqlmysql> create user 'hive' identified by 'mysql';mysql> grant all privileges on *.* to 'hive'@'%' with grant option;mysql> flush privileges;
默认情况下mysql只允许本地登录,所以需要修改配置文件将地址绑定给注释掉:
root@ubuntu:~# sudo gedit /etc/mysql/my.cnf
找到如下内容:
# instead of skip-networking the default is now to listen only on# localhost which is more compatible and is not less secure.#bind-address = 127.0.0.1 ---注释掉这一行就可以远程登录了
重启mysql服务:
sudo service mysql restart
第四步:建立 hive 专用的元数据库,记得创建时用刚才创建的“hive”账号登陆。
mysql> exit;hadoop@ubuntu:~$ mysql -uhive -pmysqlmysql> create database hive;
第五步:在hive的conf目录下的文件“hive-site.xml”中增加如下配置:
xml version=1.0?>xml-stylesheet type=text/xsl href=configuration.xsl?>configuration> property> name>hive.metastore.localname> value>truevalue> property> property> name>javax.jdo.option.connectionurlname> value>jdbc:mysql://192.168.11.157:3306/hive?characterencoding=utf-8value> property> property> name>javax.jdo.option.connectiondrivernamename> value>com.mysql.jdbc.drivervalue> property> property> name>javax.jdo.option.connectionusernamename> value>hivevalue> property> property> name>javax.jdo.option.connectionpasswordname> value>mysqlvalue> property>configuration>
从前面我们知道我们的“hive-site.xml”是一个“hive-default.xml.template”的一个拷贝,里面的配置参数非常之多,但是并不是我们都需要的,我们知道,hive 系统会加载两个配置文件一个默认配置文件“hive-default.xml”,另一个就是用户自定义文件“hive-site.xml”。当“hive-site.xml”中的配置参数的值与“hive-default.xml”文件中不一致时,以用户自定义的为准。所以我们就把我们不需要的参数都删除掉,只留下上面所示的内容。
备注:其实修改这里的配置文件如果在linux下面进行则非常麻烦,尽然我们都建立了ftp了,为何不用,所以把master.hadoop上面的这个配置文件下载下来,按照要求进行修改,这样的文件在windows进行操作是非常方便的,弄好之后在上传上去,覆盖原来的即可。
第六步:把mysql的jdbc驱动包复制到hive的lib目录下。
jdbc驱动包的版本:mysql-connector-java-5.1.18-bin.jar
第七步:启动 hive shell, 执行“show tables;”命令,如果不报错,表明基于独立元数据库的 hive 已经安装成功了。
hadoop@ubuntu:~$ hivelogging initialized using configuration in file:/home/hadoop/hive-0.9.0/conf/hive-log4j.propertieshive history file=/tmp/hadoop/hive_job_log_hadoop_201303041631_450140463.txthive> show tables;oktime taken: 1.988 secondshive>
第八步:验证hive配置是否有误,进入hive的shell新建表,在mysql的hive数据库中可以看到相应的元数据库信息。
1)在hive上建立数据表
hive> create table xp(id int,name string) row format delimited fields terminated by '\t';
2)从 mysql 数据库上查看元数据信息
用到的 sql 语句:
use hive; //使用 hive 数据库库
show tables;//显示 hive 数据库中的数据表
select * from tbls;//查看 hive 的元数据信息
到此hive集成mysql作为元数据已完成。
远程模式安装
远程模式安装是把 metastore 配置到远程机器上,可以配置多个。在独立模式的基础上需要在 hive-site.xml 文件中增加的配置项如下:
property> name>hive.metastore.localname> value>localvalue>property>property> name>hive.metastore.urisname> value>uri1,uri2,... value>//可配置多个 uri description>jdbc connect string for a jdbc metastoredescription>property>
