执行引擎
在Hive3中,Tez完全取代了MapReduce,这张图显示了Hive3的查询流程。
1.Hive编译查询语句
2.Tez执行查询
3.YARN分配资源
4.Hive更新HDFS上的数据
5.Hive返回查询结果给JDBC连接
LLAP负载管理
LLAP(Live Long And Process)功能是在Hive2.0中引入的。LLAP的核心概念是利用常驻进程,来取代之前Hive与HDFS DataNode进行直接交互的方式。轻量查询(低延迟高并发的分析工作负载)会主要由这种常驻进程处理掉,重型查询(耗资源,长时间运行的工作负载)则依然由传统的YARN来调度查询。
这张图,显示了LLAP的执行过程。Tez AM协调整个执行过程,查询的初始状态被推送至LLAP,大型的shuffle会在独立的容器进行。
Hive3增强了在多租户场景下的LLAP负载管理,主要通过resource plan的方式进行实现:
1.划分LLAP资源为多个pool,比如bi池和etl池
2.自动映射applications到对应的池
3.可以设置触发条件,实现自动从一个池到另一个池,比如自动把长时间运行的application移动到etl池
4.可以根据需要activate/deactivate这些resource pools
CREATE RESOURCE PLAN my_plan;
CREATE POOL my_plan.bi
WITH ALLOC_FRACTION=70,QUERY_PARALLELISM=4;
CREATE POOL my_plan.etl
WITH ALLOC_FRACTION=30,QUERY_PARALLELISM=10;
CREATE TRIGGER my_plan.slow_query
WHEN execution_time_ms > 60000
DO MOVE TO etl;
ALTER PLAN my_plan SET DEFAULT POOL=bi;
ALTER PLAN my_plan ENABLE ACTIVATE;
统一查询接口
JDBC Connector
支持从任何jdbc数据源读取数据
只支持读
支持自动查询下推
CREATE EXTERNAL TABLE student_jdbc
(
name string,
age int,
gpa double
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
"hive.sql.database.type" = "MYSQL",
"hive.sql.jdbc.driver" = "com.mysql.jdbc.Driver",
"hive.sql.jdbc.url" = "jdbc:mysql://localhost/sample",
"hive.sql.dbcp.username" = "hive",
"hive.sql.dbcp.password" = "hive",
"hive.sql.table" = "STUDENT",
"hive.sql.dbcp.maxActive" = "1"
);
Kafka Connector
可以从Kafka读取实时数据
CREATE EXTERNAL TABLE kafka_table
(`timestamp` timestamp , `page` string, `newPage` boolean,
added int, deleted bigint, delta double)
STORED BY 'org.apache.hadoop.hive.kafka.KafkaStorageHandler'
TBLPROPERTIES
("kafka.topic" = "test-topic", "kafka.bootstrap.servers"="localhost:9092");
欢迎关注我的公众号“九万里大数据”,原创技术文章第一时间推送。