接下来要配置的是以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目录下面的。

这个javax.jdo.option.ConnectionUserName

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


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


 <value>hive</value>


 </property>


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

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

--------------------------------------------------------------

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

<property>


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


 <value>hive</value>


 </property>


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


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

---------------------------------------------------------------

//在笔者的hive-site.xml文件中并没有关于这个的设置项

<property>


 <name>datanucleus.fixedDatastore</name>


 <value>false</value>


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


 </property>

//后添加后会遇到运行错误,如果您对此感兴趣可以参阅网站上的说明


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


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用户登录来检验用户是否添加成功


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

mysql -uhive -hnode0 -p  (enter)

 password:****(hive)


其中-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;


就可以看见相应的显示;