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

相關文章
相關標籤/搜索