一,hive数据库
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。Hive支持HSQL,是一种类SQL。
1,Hive在HDFS上的默认存储路径
默认有一个根目录,在hive-site.xml中,由参数hive.metastore.warehouse.dir指定。默认值为/user/hive/warehouse.
2,显示当前数据库的名称
数据库很多的环境下工作,显示当前数据库的名称,方便操作。
设置参数:
set hive.cli.print.current.db=true
查询语句:
prompt //显示当前数据库名称
3,hive的表操作
重命名:更改表名
ALTER TABLE table_name RENAME TO new_table_name;
增加列:ADD 是代表新增一字段
alter table table_name add columns(字段名 string);
更新列:更新字段类型
alter table table_name change column 字段名 desc int;
替换列:表示替换表中所有字段
alter table table_name replace columns(deptno string, dname string, loc string);
4,hive的删除操作
默认情况下,Hive不允许删除一个里面有表存在的数据库,如果想删除数据库,要么先将数据库中的表全部删除,要么可以使用CASCADE关键字,使用该关键字后,Hive会自己将数据库下的表全部删除。RESTRICT关键字就是默认情况,即如果有表存在,则不允许删除数据库。
(1)先把表删干净,再删库
(2)删库时在后面加上cascade,表示级联删除此数据库下的所有表:drop database if exists foo cascade;
5,内部表和外部表
Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。
区别:
(1)Hive中的表分为内部表(MANAGED_TABLE)和外部表(EXTERNAL_TABLE)。
(2)外部表DROP时候不会删除HDFS上的数据;
应用场景:
(1)内部表:Hive中间表、结果表、一般不需要从外部(如本地文件、HDFS上load数据)的情况。
(2)外部表:源表,需要定期将外部数据映射到表中。
二,Impala
Impala是基于Hive的大数据实时分析查询引擎,直接使用Hive的元数据库Metadata,意味着impala元数据都存储在Hive的metastore中。并且impala兼容Hive的sql解析,实现了Hive的SQL语义的子集,功能还在不断的完善中。Impala不需要把中间结果写入磁盘,省掉了大量的I/O开销。
impala的查询方式有:通过impala-shell脚本窗口执行查询命令,通过hue的可视化界面查询,通过jdbc或者odbc查询。jdbc的使用,由于Impala并没有把相关的驱动包发布到maven,因此如果想要使用,就需要手动下载jar包,上传到私库中。
1,Impala的三个进程
(1)Impalad:impalad是impala主要的工作计算进程,负责接收client的请求,变成协调者角色,然后解析查询请求,拆分成不同的任务分发给其他的Impalad节点进程。每个Impalad工作节点进程接收到请求后,开始执行本地查询(比如查询hdfs的datanode或者hbase的region server),查询结果返回给协调者。协调者搜集到请求数据合并返回给client。每个Impalad又包含三种角色,当接收到client的请求时,由planner解析查询sql,拆分成一个个可以并行的小任务;然后通过coordinator发送给其他的节点;其他的节点接收请求后,由excutor执行本地查询。
(2)StatStore:状态管理进程,负责搜集各个节点的健康状况,当某个节点挂掉时,负责通知其他的节点不要往这个节点发送任务。statestore由于只负责状态通知,因此当这个进程挂掉并不影响impalad查询,只是可能会发送任务到挂掉的节点,集群的鲁棒性差一些而已。
(3)Catalog:元数据变化同步进程,由于每个impalad都可以作为coordinator角色,那么当一个节点接收到数据变更,比如alter指令,其他的节点如何知晓呢?就可以通过catalog来同步,每个节点的变化都通知给catlog进程,它再同步给其他的节点,每个节点都维护一份最新的元数据信息,这样就不怕查询的数据不一致了。
2,Impala相对于Hive所使用的优化技术
(1)没有使用 MapReduce进行并行计算,虽然MapReduce是非常好的并行计算框架,但它更多的面向批处理模式,而不是面向交互式的SQL执行。与 MapReduce相比:Impala把整个查询分成一执行计划树,而不是一连串的MapReduce任务,在分发执行计划后,Impala使