hive的本质是hadoop客户端,通过写sql转换成MapReduce提交给yarn、hdfs执行
由于hive采用类sql查询语言hql(hive query language),因此很容易将hive理解为数据库。其实结构上看,hive和数据库除了拥有类似语言,再无相似之处;数据库可以用在online的应用,但是hive是为数据仓库而设计的
hive是建立在Hadoop上的,所有hive的数据都是存储在hdfs上的;而数据库则可以将数据保存在块设备或者本地文件中
hive中不建议对数据的改写,所有数据都是在加载的时候确定好的;数据库则可以经常修改
hive在加载数据时不会对数据有任何处理,因此没有对数据有索引,hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据。由于MapReduce,hive可以并行访问数据,因此尽管没有索引,对于大数据量的访问,hive仍然可以体现优势
数据库通常会针对一个或者多个列进行建立索引,因此对于少量的特定条件的数据访问,数据库有很高的效率
由于数据的访问延迟高,决定了hive不适合在线数据的查询
hive查询时无索引,需要扫描整个表,因此延迟较高。此外MapReduce框架本身有较高的延迟,利用MapReduce执行hive查询时,延迟较高。相对数据库执行延迟较低。低也是有条件的,即数据库规模较小,当数据规模大到超过数据库的处理能力的时候,hive的并行计算显然可以体现优势
由于hive是在hadoop上的,因此hive的可扩展性与hadoop可扩展性是一致的
默认创建的表都是管理表,也称为内部表;当删除一个管理表的时候,hive也会删除这个表的数据
也可以建立外部表,删除外部表时,数据不会被删除,不过描述的元数据信息会被删除(元数据,为描述数据的数据,主要是描绘数据属性(properties)信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能)