HIVE配置mysql metastore

HIVE配置mysql metastore
    hive中除了保存真正的数据之外还要额外保存用来描述库、表、数据的数据,称为hive的元数据。这些元数据又存放在何处呢?
    若是不修改配置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目录java

相关文章
相关标签/搜索