將Mongodb的表匯入到Hive中

來源:互聯網
上載者:User

標籤:fail   問題:   運行   instant   解析失敗   個數   2.3   使用者名稱   引擎   

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 [email protected]"%" identified by "testhive"  // *.*代表所有表,“%“代表出本機以外的所有ip,testhive為使用者名稱和密碼

    grant all privileges on *.* to [email protected]"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

   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.sql解析失敗,sql檔案中需要‘;‘作為行結束符

        2.類..serde2未找到,然後我看了MongostorageHandler代碼並發現這個類只在1.x的hive中才有,就只能下載並拿到jar包

        3.總之缺什麼類就給什麼包,用jar -vtf|grep 看包內是否有那個類,然後確定有之後匯入到lib中即可。

5.完成簡單的hello world流程

    

將Mongodb的表匯入到Hive中

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.