1.不支持LOCAL关键字,不能load本地文件,只能load HDFS中的文件。
2.同一张表不能同时存在压缩与非压缩格式的文件
3.load操作是一个move操作。hive从本地磁盘的load操作是copy操作。
4. hdfs文件夹中的load操作不会move隐藏文件。
5.load后文件名会保留下来,如果有名称冲突,会把新move的文件改名,而在hive里面会直接覆盖。
6.快速查看文件所在hdfs位置:
DESCRIBE FORMATTED table_name
7.如果表是多个分区的,load的时候必须指定所有的分区。
8.如果想要做Impala-shell 的loadbanlance操作,可以使用 SYNC_DDL
,这样在下一个查询被提交前对每一个impala node的metastore做更新。
9.impala1.2后,在impala一个节点所有的操作都会通知其他节点的守护进程,而不需要刷新表。
10.impala支持的文件格式:Textfile、RCFile、parquet、sequencefile。
11.支持的压缩格式:Gzip、BZip、snappy。
12.impala守护进程与statestore维持着长连接,以便获取每个节点的信息,是否能接受新任务。
13.catalog守护进程监控着其他impala节点对数据库的操作
14.当statestore挂了,其他impala节点仍然可以运行,但是如果一个节点挂了,其他节点不会被告知。当statestore重启后,重新建立与各个impala守护进程的联系。
15.statestore与catalog频繁通信,最好放在同一个节点上。
16.impala各个节点缓存了所有impala节点的metadata。
17.impala不支持删除单行操作。
{
In fact, Impala doesn’t actually support deleting single records from a table. Instead you have to use the “INSERT OVERWRITE” command again and use a clever where clause to create the result set you want.
}
18.修改表名
ALTER TABLE [old_db_name.]old_table_name RENAME TO [new_db_name.]new_table_name
19.hive连接beeline:beeline -u "jdbc:hive2://10.1.33.23:10000/default" -nbi -pbi_1473
20.impala连接:beeline -u "jdbc:hive2://10.1.33.23:21050/default;" -nbi -pbi_1473
21.模拟update使用: INSERT
or CREATE TABLE AS SELECT from where ...,hive从1.4开始已经支持update操作。
22.impala多是io密集型,当impala查询超出内存限制,会kill掉一些查询请求。
23.
查询 Parquet 表时需要相对较少的内存,因为 Impala 以 8MB /块来进行读取和解压缩数据。而向 Parquet 表插入数据则是内存密集型操作,因为每一个数据文件(最大大小为 1GB)的数据被放在内存中,直到编码、压缩并写入硬盘。
24.
最终的结果集是否使用 ORDER BY 子句来排序。请记住,
Impala 要求所有包含的 ORDER BY 子句的查询同时包含 LIMIT 子句(有待验证)
,或者在语句中直接包含,或者隐式的通过 DEFAULT_ORDER_BY_LIMIT 查询选项设置来实现。每一个 Impala 节点扫描并过滤总数据的一部分,并且对他们自己那部分数据应用 LIMIT。中间结果集 (包含最大 LIMIT 行记录)都发送回协调节点,在上面执行最终的排序并对最终结果集应用 LIMIT 子句。例如,假如你执行查询
25.
在查询完成之后,在
impala-shell 中立即
执行 PROFILE 命令。对于指定的节点,其中 BytesRead、BytesReadLocal、BytesReadShortCircuit 的值应当一致。例如:
26.用户通过beewax thrift api提交query到某个impalad。
Impalad的Query Planner使用jflex和CUP解析SQL语句。然后Planner把这个query的parse trees变成若干PlanFragment,然后把PlanFragment发送到backend/Query Coordinator。
一、
1.不支持
update和delete,只能drop或者overwrite
2.不能insert。。values这样插入单条语句
3.与hive一样支持外部表,对表只读
二、impala与hive、hdfs、hbase
1.只要是impala支持的数据类型,impala就可以使用hive的数据
2.impala可以读取hive中avro,sequencefile,RCFile的数据
3.impala会cache表的元信息
|
|
CREATE EXTERNAL TABLE tab2
(
id INT,
col_1 BOOLEAN,
col_2 DOUBLE
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION '/user/cloudera/sample_data/tab2';
impala-shell -i localhost -f customer_setup.sql
impala-shell -i impala-host -q 'select count(*) from customer_address'
[localhost:21000] > select concat(heroes.name,' vs. ',villains.name) as battle > from heroes join villains > where heroes.era = villains.era and heroes.planet = villains.planet;
query planner:将提交的sql转化成执行计划。语法解析,生成语法树,并生成执行计划,获取一些表或者文件的信息。java实现
query coordinator:协调各个节点的查询。并行的执行计划中的内容
Execution engine:具体执行组件。
catalog service:连接监控hive的metadata。推送元数据的更新到statestore中。metadata发生变化时,catalog service检测到变化,并传给statestore server,statestoreserver分发给各个daemon。此进程集群只有一个。
statestore server:监控impalad的存活状况,管理impalad。如果任何一台机器变得不可用,statestore会同志其他机器不再向该机器发请求。此进程集群只有一个。
metadata:元数据信息。
两大进程:
state store:用于协调各个运行impalad的实例之间的信息关系,Impala正是通过这些信息去定位查询请求所要的数据。换句话说,state store的作用主要为跟踪各个impalad实例的位置和状态,让各个impalad实例以集群的方式运行起来。
与 HDFS的NameNode不一样,虽然State Store一般只安装一份,但一旦State Store挂掉了,各个impalad实例却仍然会保持集群的方式处理查询请求,只是无法将各自的状态更新到State Store中,如果这个时候新加入一个impalad实例,则新加入的impalad实例不为现有集群中的其他impalad实例所识别。而且如果此时其他的impalad挂了,其他机器也不知道。然而,State Store一旦重启,则所有State Store所服务的各个impalad实例(包括state store挂掉期间新加入的impalad实例)的信息(由impalad实例发给state store)都会进行重建。 Impalad:对应进程为 impalad(核心进程,数据的计算就靠这个进程来执行) 该进程应运行在DataNode机器上,每个DataNode机器运行一个impalad,每个impalad实例会接收、规划并调节来自ODBC或Impala Shell等客户端的查询。每个impalad实例会充当一个Worker,处理由其它impalad实例分发出来的查询片段(query fragments)。客户端可以随便连接到任意一个impalad实例,被连接的impalad实例将充当本次查询的协调者(Ordinator),将查询分发给集群内的其它impalad实例进行并行计算。当所有计算完毕时,其它各个impalad实例将会把各自的计算结果发送给充当 Ordinator的impalad实例,由这个Ordinator实例把结果返回给客户端。每个impalad进程可以处理多个并发请求。 State Store
客户端连接的node就成为impala的coordinator。
catalogd进程:
当在hdfs级别上对数据进行操作是,需要 在一台机器上执行REFRESH and INVALIDATE METADATA操作。
|