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 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中。
