一、嘛是數據倉庫和數據庫的區別?
hive的是一個數據倉庫,數據倉庫是面向主題的,偏向於做OLAP(online-Analytical-Processing),只要工作是方便給決策人員提供報表,來做決策分析。而傳統關係型數據庫比如MySQL是面向應用,主要工作是在指定的隔離機制中做增刪改查的,偏向OLTP(Online-Transation-Processing)聯機事務處理,同樣二者數據存儲結構也不同,OLAP存儲歷史的、聚集的、多維集成的數據,DB大小可在100G到TB級別(這也是絕大數數據倉庫使用HDFS做底層存儲的原因!!而不是windows的NTFS),OLTP是當前的最新的、二位分立的數據,DB大小在100M到GB級別。
二、 爲什麼要一般會把hive的元數據(版本分區等等信息)存在mysql中?
想說的是,hive只是個工具,包括它的數據分析,依賴於mapreduce,它的數據管理,依賴於外部系統,這一步其實不是必須的,因爲Hive默認的metadata(元數據)是存儲在Derby裏面的,但是有一個弊端就是同一時間只能有一個Hive實例訪問,這適合做開發程序時做本地測試。
Hive提供了增強配置,可將數據庫替換成mysql等關係型數據庫,將存儲數據獨立出來在多個服務示例之間共享。
由此可見,你在哪路徑下,執行hive指令,就在哪路徑下生成metastore_db。建一套數據庫文件,這樣是極其不合適的,公司裏每個人若不一樣,則會顯得非常混雜。導致員工之間無法公用交流。
***爲此,需公用的,mysql。***
這也是爲什麼,在安裝hive時,也需要配置mysql了,怪就怪在Derby太輕量無法執行並行操作。
三、把其他數據源,比如數據庫中的數據導入hive是用sqoop呢還是hive呢(當然在落地Hive之前要做ETL)?
sqoop簡介:Apache Sqoop is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases.也就是說sqoop是一種工具,用於在Apache Hadoop和結構化數據存儲(如關係數據庫)之間高效傳輸批量數據。
我們知道hive的作用就是把數據映射成數據倉庫的一張表,提供類SQL的查詢語言然後做數據分析,但是如果涉及到比較複雜的操作,就需要編寫UDF函數,可以是可以,但是比較麻煩,需要自己編程實現。但是sqoop本身就是一個工具,使用它將數據庫的數據導入數據倉庫比較方便。
未完待續!thanks for reading