HIVE元数据库改为mysql

来源:互联网 发布:js鼠标经过事件 编辑:程序博客网 时间:2024/05/16 11:44
1.先安装mysql,并启动服务
2.为Hive建立相应的MySQL账户,并赋予足够的权限,执行命令如下:
mysql -uroot -p123456
mysql> CREATE USER 'hive' IDENTIFIED BY 'hive';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' WITH GRANT OPTION;
mysql> flush privileges;

3.创建数据库hive
mysql> create database hive;
 
4.创建hive用户,并授权

mysql> grant all on hive.* to hive@'%' identified by 'hive'; 

mysql> grant all on hive.* to hive@'gc.localdomain' identified by 'hive';

mysql> grant all on hive.* to hive@'localhost' identified by 'hive';

mysql> flush privileges;

需要注意的是:这里的hive.*的hive是指database,hive@‘%’这里的hive是指dbuser


5.hive的conf配置问题
 A)bin/hive-config.sh
  HADOOP_HOME
  HADOOP_CONF_DIR
  HIVE_HOME
  HIVE_CONF_DIR
 B) conf/hive-default.xml

 <property>
  <name>javax.jdo.option.ConnectionURL</name>
  <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
  <description>JDBC connect string for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionDriverName</name>
  <value>com.mysql.jdbc.Driver</value>
  <description>Driver class name for a JDBC metastore</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionUserName</name>
  <value>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive</value>
  <description>password to use against metastore database</description>
</property>


碰到的问题:

1. lower_case_table_names = 1参数设置问题

   mysql和linux一样区分大小写,如果没有在/etc/my.cnf中设置这个参数,默认数据库表是大写,如果工程中需要读取某表是会提示找不到表找不到。

   建议在mysql安装完毕后,修改my.cnf加入该参数,后续创建的database中的table均会不区分大小写(加入参数以前创建的database还是会有影响)。

2. Error in metadata Communications link failure

    原因是在hive-default.xml中jdbc:mysql://hive:3306/
    而这里实际上在mysql创建create user 'hive'@'hive' identified by 'hive' 是会出错的

3. 出现 org.apache.hadoop.hive.ql.hooks.PreExecutePrinter 错误
    原因未知,解决方法是将原来HIVE的目录删除或备份,重新创建HIVE,然后按照步骤一步步来解决的。怀疑是什么地方的配置问题

一般来讲,hive出现问题在数据不重要的情况下可以通过删除hdfs::/user/hive/worehouse,重新创建其所用database来解决;


备注:hive中不支持truncate table 表名的形式存在(也包括 delete from 表名),可通过 hive>dfs -rmr /user/hive/warehouse/表名来清空该表下的数据,以便保持表元数据信息不丢失;或者通过create table 表名 like 表名,也可以。


原创粉丝点击