標籤: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&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中