hive相关知识188金宝搏,SQL数据库磁盘损坏

发现磁盘文件损坏是,数据库suspect,后来按照网上的操作,勉强恢复了。但发现有一些表异常,用checktable检索出来,少量几张表,不能查询、不能删除,错误信息如下:消息608,级别16,状态1,第1行在数据库7中找不到分区ID为72058934578642944的目录条目。元数据不一致。请运行DBCCCHECKDB查看元数据是否已损坏。这几张表以后会影响后续维护,连checkdb都会报错,该怎么处理这几张表,谢谢。

derby是apache开发的基于java的文件型数据库。

连接mysql,发现多了一个hive库。其中保存有hive的元数据。DBS-数据库的元数据信息,TBLS-表信息。COLUMNS_V2表中字段信息,SDS-表对应hdfs目录

再进入hive命令行,试着创建库表发现没有问题。

hive的兼容性

另一种方法是修改mysql的配置文件,让mysql默认编码集就是latin1,这样hive自动创建的元数据库就是latin1的了,但是这已修改将会影响整个mysql数据库,如果mysql中有其他库,这种方式并不好。
create database hive character set latin1;
将mysql的连接jar包拷贝到$HIVE_HOME/lib目录下

如果不修改配置hive默认使用内置的derby数据库存储元数据。

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION; FLUSH PRIVILEGES;

188金宝搏 1

188金宝搏 2

image.png

188金宝搏 3

测试发现开启多个连接没有问题。

188金宝搏 4

 <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop01: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>root</value> <description>username to use against metastore database</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>root</value> <description>password to use against metastore database</description> </property>

hive的兼容性

hive日志

hive概念

hive中除了保存真正的数据以外还要额外保存用来描述库、表、数据的数据,称为hive的元数据。这些元数据又存放在何处呢?

手动创建hive元数据库,注意此库必须是latin1,否则会出现奇怪问题!所以推荐手动创建!并且创建库之前不能有任意的hive操作,否则自动创建出来的库表将使用mysql默认的字符集,仍然报错!

其实就是存放在metastore中

经测试可以发现,在同一目录下使用无法同时开启hive,不同目录下可以同时开启hive但是会各自产生metastore.db文件造成数据无法共同访问。

日志

最明显的问题是不能支持并发。

外部运行hivesql

可以检查之前执行命令的目录,会发现其中产生了一个metastore.db的文件,这就是derby产生的用来保存元数据的数据库文件。

derby数据库仅仅用来进行测试,真正使用时会有很多限制。

如果出现没有权限的问题,在mysql授权(在安装mysql的机器上执行)
mysql -uroot -p
(执行下面的语句 .:所有库下的所有表 %:任何IP地址或主机都可以连接)

启动hive

188金宝搏 5

启动hive

hive概念

所以真正生产环境中我们是不会使用默认的derby数据库保存hive的元数据的。
hive目前支持derby和mysql来存储元数据。
配置hive使用mysql保存元数据信息:
删除hdfs中的/user/hive
hadoop fs -rmr /user/hive
复制hive/conf/hive-default.xml.template为hive-site.xml
cp hive-default.xml.template hive-site.xml
在<configuration>中进行配置

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。