hive安装--设置mysql为远端metastore

作者:龙翔天下     分类:云技术     时间:2014-06-06     浏览:41     评论:0 来源:博客园

作业任务:安装Hive,有条件的同学可考虑用mysql作为元数据库安装(有一定难度,可以获得老师极度赞赏),安装完成后做简单SQL操作测试。将安装过程和最后测试成功的界面抓图提交 .

 

已有的当前虚拟机:

总共三台虚拟机,使用CentOS。一台是NameNode,另两台为DataNode,由于搭载虚拟机的内存不是很足,所以不打算再新增一台虚拟机来另外安装mysql,所以选择其中一台datanode虚拟机来安装mysql,由于很早时候已经安装布署了hadoop,所以不再累述hadoop如何安装使用:

主机名

作用

将要布置的工作

bogon

hadoop的NameNode节点

安装hive client

DataNode1

hadoop的DataNode节点

安装mysql,安装hive metastore server

DataNode2

hadoop的DataNode节点

 

 

安装的系统或软件版本:

CentOs 6.3 32位,

jdk 1.7_u45,

hadoop 1.2.1,

hive 0.12.0,

mysql 5.7.3 Linux 32位 社区版

 

 

第一步:下载安装mysql:

由于我要安装的是mysql是linux版本,为保证软件最新和官方性,所以我都是从官方网站下载。这里我要吐嘈一下,不知为何现在的官方网站只提供window版的安装包,对于其他版本的安装包和源码都没有明显的下载链接,不知是Oracle以后为了不开源而作准备了,我在官网查了半天,才在说明书上查找到了下载的镜像站点列表: http://dev.mysql.com/downloads/mirrors.html,

随便找一个镜像链接,点击FTP就可以查看到最新的下载安装包

 1、这里我下载使用的是linux版二进制包文件,下载并放置在DataNode1主机内:

        注意:用二进制包手动安装会比较繁琐,而且如果稍有不注意都会有各种问题发生,我因为解决各种问题而在安装mysql方面花费了不少时间。如果你觉得麻烦,还是建议你用rpm安装包更简单些。

 2、解压二进制包:

 3、建立mysql专用的帐号和群组,并更改mysql安装目录为的所属人和群组为新建立的帐号和群组:

     建议:从这一步开始到mysql启动,应该转换成root帐号来操作了,否则在往后的mysql操作当中,会有很多因权限不足导致安装设置失败的问题。如果你的mysql仅仅用来学习测试,且虚拟机并非商用无入侵风险,可以忽略此步骤。

 4、运行初始化脚本,建立mysql原始数据库,在安装目录下执行:scripts/mysql_install_db –-user=mysql --datadir=/var/lib/mysql

       注意:如果你已经跳过之前的第3步,那么这里的—user改为用root;另外datadir参数是可选参数,指定核心数据库文件的安装位置,虽然这是可选参数,但我在忽略后执行过程发现会默认安装到安装目录下的一个子目录(好像是data子目录),这与mysql配置文件中指定的目录位置不一样(配置文件指定的位置是/var/lib/mysql),所以在执行时最好带上这个选项,否则在启动mysql时会因找不到核心数据库而启动不成功。这也是很多情况下,手动安装mysql时出现各种问题的诸多原因,要么是权限问题、要么是缺少某些文件或者配置又不对……

 

执行时可能会出现以下这样的错误:

这是缺少的libaio软件的错误提示,用yum安装:

 

以下是初始化原始数据库成功的提示:

 5、将mysql安装目录设为root权限,其子目录为mysql权限:

      提示:如果你的mysql仅仅用来学习测试,且虚拟机并非商用无入侵风险,可以忽略此步骤。

 6、将子目录plugin的可写权限去除(防止select…into dumpfile语句将执行代码写入文件):

       提示:如果你的mysql仅仅用来学习测试,且虚拟机并非商用无入侵风险,可以忽略此步骤。

 7、在mysql安装目录下运行:bin/mysqld_safe --user=mysql &,并测试mysql是否运行正常: 

       提示:如果你在之前跳过了第3和第5步,那么这里的参数user就直接使用root。

 

在启动过程中,如果提示找不到/tmp/mysql.sock,查找了tmp目录,确实没有这个文件。查看下/etc/my.cnf配置文件:

发现该文件在/var/lib/mysql目录下。这样我做个文件链接:

再kill掉mysqld_safe进程,重启一次mysql:

 

再次检测运行情况:

OK,正常返回数据库的信息!

总结:我是纯折腾自己才手动安装mysql,实际上可以下载rpm包安装的,但我只是想体验下手动安装过程。虽然在上面写的貌似有些简单,但实际上这个过程中对于我这个从没用linux安装过mysql的初学者来说是相当折磨人的。

 

 

第二步、下载安装hive:

1、在NameNode节点下解压安装Hive:

 

解压后:

注意:如果解压后所属用户和群组都是root,如果你不是用root操作,建议将所属用户和群组改为你的常用帐号和群组。

 

2、添加和编辑环境变量:

此步骤在安装了mysql的DataNode1的主机也执行一次。

 

3、重新登录一次使上面设置的环境变量生效,然后启动hadoop。在HDFS中建立/tmp目录和/user/hive/warehouse目录,设置两目录的所属群组有写入权限:

注意:这里设置的目录是hive存放缓存和数据库文件,用的是默认目录。

 

4、在hive目录的conf目录下,将hive-default.xml.template和hive-env.sh.template两个配置模板文件复制一份,并更名为以下:

     这段时间为了能成功设置hive,一开始犯个了低级错误,我以为只是将.template后缀去除即可,谁知道这其中的hive-default.xml.template并非如此,不仅去掉.template后缀,还要改为hive-site.xml……,导致了我的后期的设置从过年前一直弄到年后都不成功!我还以为我的mysql出了什么问题,查阅了相当多的资料也不知怎么回事……!真想去官网吐嘈一下!

 5、编辑hive-env.sh:

 6、编辑hive-site.xml:

(1)设置metaStore存在指定的mysql,该值模式:

jdbc:mysql://<hostname>/<database name>?createDatabaseIfNotExist=true

 (2)设置连接mysql的驱动为jdbc:

 (3)设置连接mysql使用的帐号和密码,为了简便这里都用hive为帐号和密码:

 (4)设置hive的表数据存放路径:(这里默认不修改,因为与刚才在hdfs建立的路径一致)

(5)设置Thrift metastore Server,格式thrift://<host_name>:<port>,host_name就是DataNode1主机,端口号使用默认的9083:

 

7、在mysql官方网下载最新的mysql连接器,存放在hive安装目录下的lib目录:

 

8、将安装配置好的hive安装目录复制一份到DataNode1主机的相同目录内,这里用了scp命令:

 

9、回到DataNode1主机,在mysql目录下执行mysql客户端:

 

10、创建hive数据库,并创建hive帐号并赋予权限:

 

11、在namenode主机下,启动hadoop:(如果在这之前已经启动,此步骤请忽略)

 

12、在DataNode1主机下,启动hive metastore服务:

 

13、然后回到namenode下,启动hive客户端:

 

14、测试下:

 

 

以下是遇到的hive错误:

  1. 配置文件格式的错误:

这是hive的0.12.0 release发行版的专有错误,错在hive-site.xml配置文件格式有误。将此文件中的2000行处的</auth>结尾处更正过来即可(真不明白发行版是怎么出来的,这种明显的错误也会在发行时显现):

 

2、version information not found in metastore(版本信息找不到):

看过网上的解决方案是在配置文件中将hive-site.xml 里面 hive.metastore.schema.verification 的值改为 false后不会出现问题。

根据错误检查了下ObjectStore.java源代码,该异常会在检查metastore的版本号时,如果从metastore数据源中没有返回版本号,则会根据上面所说的schema.verification来确定是否招抛出这个异常:

由于第一次启动metastore服务时,mysql作为数据源的hive数据库内没有生成任何表和数据,所以会出现返回的版本号为空的情况。我们可以暂时在hive.metastore.schema.verification里设置成false,在第一次启动自动生成了数据后,那么就可以将这个配置值再改回true,往后也相关无事了。在我看来,其实是hive在配置远端metastore的一个小bug。

 

3、MetaException:specified key was too long……

    与数据库的编码格式有关,将数据库的编码改为:

 

 

本文转载自:http://www.cnblogs.com/xiwang6428/p/3539046.html

上一篇:Java从控制台接受输入字符

下一篇:继续寻找app开发的技术方案


0 评论

查看所有评论

给个评论吧