一、嘛是数据仓库和数据库的区别?
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