接下来要配置的是以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;
就可以看见相应的显示;