將Mongodb的表導入到Hive中


1.官方文檔:https://docs.mongodb.com/ecosystem/tools/hadoop/

2.Hive介紹:

  Hive特點:  

  1.hive是一個數據倉庫,和oracle,mysql等數據倉庫相比,它底層依賴於hdfs。

  2.hive是sql解析引擎,將sql語句轉換成Map/Reduce任務,然后在hadoop hdfs上執行

  3.hive的表其實就是一個目錄,hive中表的數據就在文件中

  Hive元數據:

  Hive將元數據存儲在數據庫中( metastore),支持mysql,derby(默認),oracle

  元數據:包括表的名字,表的列,分區,及屬性,表的屬性(是否為外部表),以及表的存放目錄,不包括任何數據

3.Hive安裝:

  Hive運行模式:

    1.嵌入模式:hive的元數據保存在其自帶的derby中,同一時間只允許一個連接,多用於demo

    2.本地模式:元數據庫在mysql中,mysql與hive在同一物理機器上。

    3.遠程模式:同2,只是mysql運行在別的機器上。

  本地模式的安裝:用mysql存儲元數據

    1.安裝mysql(參考官網)

    2.將mysql java-driver放入$Hive_HOME/lib中

    3.創建hive-site.xml,如下,注意文件名強制是這個。  

     同時注意&在xml中需要轉義處理,即&

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&amp;connectTimeout=10000</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hivemeta</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hivemeta</value>
  </property>
</configuration>

  注意你在xml種寫的user應該在mysql種有遠程登錄的權限

    創建mysql用戶並賦予全部權限,先root賬戶登錄,再執行

    grant all privileges on *.* to testhive@"%" identified by "testhive"  // *.*代表所有表,“%“代表出本機以外的所有ip,testhive為用戶名和密碼

    grant all privileges on *.* to testhive@"localhost" identified by "testhive"

    flush privileges

  3.啟動mysql.

  4.執行bin/hive,輸入show tables,輸出OK,則安裝成功。

    如果出現 FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveException: java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient,或是hive中輸入任何命令都無反應,則說明metastore啟動失敗,表示你的元數據連接方面失敗。此時執行

    hive -hiveconf hive.root.logger=debug,console -service metastore 啟動mestore並設置錯誤信息級別,根據錯誤信息排錯。

    還可netstat -an|grep 3306查看mysql端口連接情況,如果hive元數據庫連接成功,連接狀態應該是established.

4.開始導入數據 

   1.確保hive可以正常使用。

   2.參考https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage

   3.如果你的hive版本和我一樣也是2.3.x,那么恭喜你,因為會遇到許多的classNotfoundException

   准備工作:在hdsf創建目錄/user/hive/warehouse,並將bson文件上傳至 hdfs中。啟動hdfs.

   4.具體步驟:

      1.下載3個包:core, hive, and the Java driver,導入到lib中

      2.根據自己的業務規則編寫sql。

      3.執行hive -hiveconf hive.root.logger=debug,console -f xxx.sql。

      4.如果返回ok,執行成功,否則檢查錯誤信息。

      5.以我hive2.3.3+mongodb4.x的環境來說,遇到的問題:

                     1.類org.apache.hadoop.hive.serde2.SerDe未找到,github中的MongoStorageHandler.java長期未更新,查看lib中的jar包發現這個類只

                 在1.x的hive中的lib才有,

                     解決:將hive-serde-1.2.2.jar。          

                     2.缺少某些bson類,使用了1.x的lib中可能使用了 2.x沒有的相關的bson

                     解決:將bson-3.8.0.jar導入到lib中。

 

    


免責聲明!

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



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