美文网首页
hive相关知识

hive相关知识

作者: 101之歌 | 来源:发表于2018-02-23 17:02 被阅读0次

    hive概念

    hive概念

    hive的兼容性

    hive的兼容性

    hive日志

    日志

    启动hive


    启动hive

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

    其实就是存放在metastore中

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

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

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

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

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

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

    所以真正生产环境中我们是不会使用默认的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>中进行配置

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

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

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

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

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

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

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

    外部运行hivesql

    image.png

    相关文章

      网友评论

          本文标题:hive相关知识

          本文链接:https://www.haomeiwen.com/subject/vtbxxftx.html