我支持具有HIVE服务的Hadoop集群,但是我不是HIVE开发人员。其中一名开发人员正在运行长查询(请参见下面的示例)。作业失败,并显示一些错误消息(请参阅下文)。
我怀疑此查询过于激烈或没有优化,或者两者兼而有之。我怎么知道查询是否过于激烈?
当我监视Hive时,服务器负载仅为1.5(w输出),网络带宽达到5.7 Mbps /秒的峰值。顶级Java进程消耗的CPU低于2%。我没有看到任何真正的证据表明该查询破坏了配置单元服务器(配置单元群集中只有1个配置单元服务器)。
Hive Metastore金丝雀的持续时间从<1秒降至2.5秒。
我怎么知道这个查询或其他查询太激烈了?
查询:
SELECT duid,GET_JSON_OBJECT(json_data,'$ .app.p')作为平台,MIN(GET_JSON_OBJECT(json_data,'$ .generation.ats'))作为raw_raw_events_duid WHERE app ='atlas_qa'AND ds> ='的first_boot_ts 20160306'和ds <='20160326'AND duid ='00001656-da4f-47dc-8619-2868198ed25a'GROUP BY duid,GET_JSON_OBJECT(json_data,'$ .app.p')限制为10;
服务器上的示例错误:
hadoop-cmf-hive-HIVEMETASTORE-qn7bi02hdn001.compatible.disney.private.log.out:2016-05-04 12:21:58,115信息org.apache.hadoop.hive.metastore.ObjectStore:无法从表达式字符串[(null和(ds ='20160501'))]解析分区过滤器时出错; lexer错误:null;异常NoViableAltException(11 @ [])
最佳答案
运行Get_json_object
时,可能会返回一些空数据。从查询中删除这两个并运行它..它将正常运行..从MIN(GET_JSON_OBJECT(json_data, '$.generated.ats'))
返回了一些空数据。
此外,我们还有string get_json_object(string json_string, string path)
,它:
注意: json路径只能包含字符
[0-9a-z_]
,即不能包含大写或特殊字符。另外,键不能以数字开头。这是由于对Hive列名的限制。希望这可以帮助
关于hadoop - 执行前配置单元查询执行估计的强度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37061570/