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目錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM