现在的位置: 首页 > 综合 > 正文

基于hadoop集群的hive安装 mysql as metastore database

2013年07月04日 ⁄ 综合 ⁄ 共 4223字 ⁄ 字号 评论关闭

接下来要配置的是以mysql作为存储元数据l数据库的hive的安装


要使用hadoop来创建相应的文件路径,

并且要为它们设定权限:

hdfs dfs -mkdir -p  /usr/hive/warehouse  

hdfs dfs -mkdir -p /usr/hive/tmp

hdfs dfs -mkdir -p /usr/hive/log

hdfs dfs -chmod g+w /usr/hive/warehouse

hdfs dfs -chmod g+w /usr/hive/tmp

hdfs dfs -chmod g+w /usr/hive/log

此种模式下是将hive的metadata存储在Mysql中,

Mysql的运行环境支撑双向同步或是集群工作环境,

这样的话,至少两台数据库服务器上会备份hive的元数据。

既然在derby模式下的hive已经能够成功运行,

这就说明在系统中关于hive配置文件中的参数是正确的,


即hive-env.sh 和 hive-env.sh这两个文件中的配置是对的。


----------------------------------------------------------------------
----------------------------------------------------------------------
接下来是关于mysql模式下的hive配置文件的部署,

​可以在系统中输入命令:

service mysqld restart

mysql

来判断计算机中是否安装有mysql。

如果系统中安有mysql,会出现提示:

mysql>    (进入到mysql的命令模式)
------------------------------------------

如果系统中没有安装可以从mysql官方网站下载。

http://www.mysql.com/downloads/

----------------------------------------------
继续配置hive-site.xml文件:

<property>

<name>hive.metastore.warehouse.dir</name>

<value>hdfs://node0:9000/usr/hive/warehouse</value>


(这里就与前面的hdfs dfs -mkdir -p /usr/hive/warehouse相对应)

</property>

其中node0指的是笔者的NameNode的hostname;

<property>

<name>hive.exec.scratchdir</name>

<value>hdfs://node0:9000/usr/hive/warehouse</value>

</property>

//这个没有变化与derby配置时相同

<property>

<name>hive.querylog.location</name>

<value>/usr/hive/log</value>

</property>

------------------------------------------------------------------------------------------------------
<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNoExist=true</value>

</property>

javax.jdo.option.ConnectionURL

这个参数使用来设置元数据连接字串
----------------------------------------------------
<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

javax.jdo.option.ConnectionDriverName

关于在hive中用java来开发与mysql进行交互时,

需要用到一个关于mysql的connector,

这个可以将java语言描述的对database进行的操作,

转化为mysql可以理解的语句。

connector是一个用java语言描述的jar文件。

而这个connector可在官方网站上下载得到。

经证实即便connector与mysql的版本号不一致,

也可以实现相应的功能。

connector是要copy到/usr/hive/lib目录下面的。

cp  mysql-connector-java-5.1.1.18-bin  /usr/hive/lib
-----------------------------------------------------------
<property>

<name>javax.jdo.option.ConnectorUserName</name>

<value>hive</value>

</property>

这个javax.jdo.option.ConnectionUserName

是用来设置hive存放的元数据的数据库(这里是mysql数据库)的用户名称的。

而这个‘hive‘可以根据用户自己的需要来自行设置
--------------------------------------------------------------
<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>hive</value>

</property>

这个javax.jdo.option.ConnetionPassword是用来设置,

用户登录数据库的时候需要输入的密码的。

而这个‘hive’同样可以根据用户自己的需要来进行设置。
---------------------------------------------------------------
<property>

<name>datanucleus.fixedDatastore</name>

<value>false</value>

<description>Disable updates to the schemaonce it has been created.</description>

</property>

//在笔者的hive-site.xml文件中并没有关于这个的设置项
//后添加后会遇到运行错误,如果您对此感兴趣可以参阅网站上的说明

//更进一步的研究可以参考:

https://issues.apache.org/jira/browse/HIVE-1841

----------------------------------------------------------------------
在hive配置好以后,若想让其运行起来,

应该在mysql库中创建用户hive,并且密码也要设置为hive;

这个用户名与密码是和前面的配置文件的

javax.jdo.option.ConnectorUserName

javax.jdo.option.ConnectionPassword

是相对应的。

如何在mysql中创建用户?并赋予其权限呢?
(所创建的用户名密码要与配置文件相对应)

service mysqld start

mysql

mysql> CREATE USER 'hvie'@'node0' IDENTIFIED BY 'hive';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'node0' WITH GRANT OPTION;

mysql> flush privileges;(刷新一下mysql,让mysql记录新的用户名)

执行上述语句后就可以用hive用户登录来检验用户是否添加成功

mysql -uhive -hnode0 -p  (enter)

password:****(hive)

node0是笔者主机的hostname,当然您也可以写localhost

其中-u参数后接创建的用户名称,而-h后接的是创建mysql用户时主机的名称(@之后的)

-----------------------------------------------------------------------------------------
对于hive登录后出现的错误:

hive>show tables;

FAILED :Error in metadata : java.lang.IllegalArgumentException:URL: does not have a scheme 

FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

hive>show tables;

FAILED:Error in metadata:javax.jdo.JDOFatalDataStoreException:Unknow database 'hive' NestedThrowables;

com.mysql.jdbc.execeptions.jdbc4.MySQLSyntaxErrorException:Unknown database 'hive'

按照错误提示:必须要为hive的metadata存储创建相应的database。

而创建database应该使用的是mysql 的hive用户来创建的database

以hive用户创建hive数据库的命令:

mysql -uhive -hnode0 -p(enter)

password:****(hive)

mysql>show databases;

......show something

mysql>create database hive;

.......show something


mysql>show databases;

.......show something

mysql>exit;

输入hive(enter)

hive>show databases;

OK;

就可以看见相应的显示;

抱歉!评论已关闭.