2016-04-21 36 views
0

我有一大堆的存储在包含这样记录的Blob存储CSV文件,我SparkSQL查询:为什么不工作,其中作为HIVE返回数据

2016-04-19 20:26:01.0299,+05:30,ecc84966-9bc0-4bef-9cd2-ad79c25be278,test001,178.03499442294,,Good 
2016-04-19 20:26:02.0303,+05:30,ecc84966-9bc0-4bef-9cd2-ad79c25be278,test001,160.205223861246,,Good 

我已经创建了一个外部蜂巢表具有以下命令

CREATE EXTERNAL TABLE my_history (
DataTimestamp Timestamp, 
TimezoneOffset String, 
SystemGuid String, 
TagName String, 
NumericValue Double, 
StringValue String 
) 
PARTITIONED BY (year int, month int, day int, hour int) 
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\n' 
STORED AS TEXTFILE LOCATION 'wasb://[email protected]/'; 

,并已成功地添加许多分区像下面一个月有价值的数据

ALTER TABLE my_history ADD IF NOT EXISTS PARTITION (year=2016, month = 03, day= 16, hour=00) LOCATION "Year=2016/Month=03/Day=16/Hour=00" 

大约有135,733,286记录在表中,至少这是以下Hive查询select count(*) from my_history说。

现在我有以下2个问题:

1 Jupyter挂起

当我执行这样hiveContext.sql("select count(*) from my_history").show()我没有得到任何结果,甚至也不例外,查询,其中从蜂巢运行相同经过很长的时间,例如400+秒,给我135,733,286。

2.见效慢

我想一个简单的重复查询的蜂巢这样

SELECT 
         my_history.DataTimestamp, 
         my_history.TagName, 
         COUNT(*) as count, 
         MIN(my_history.NumericValue) as min_value, 
         MAX(my_history.NumericValue) as max_value 
        FROM 
         default.my_history 
        WHERE 
         my_history.TagName = 'test021' 
        GROUP BY 
         my_history.TagName, 
         my_history.DataTimestamp 
        HAVING 
         count > 1; 

花费近450秒内返回结果,我有点希望它返回结果这是我的HDInsight集群中接近60个内核的一小部分。再次从Jupyter运行它没有得到任何结果,也没有多次运行相同的查询改进了性能,因为我已经读过Spark缓存rdd的下一个查询。

我在这里错过了什么?如果在纱线没有资源,为您的笔记本电脑开始新的火花应用

感谢 基兰

+0

Didi您是否尝试以比TextFile更精确的格式存储数据而不进行压缩?例如。 ORC或Parquet与GZip或Snappy?您可能会看到I/O(由于列式存储+压缩)以及可能在CPU上的巨大减少(尽管解压缩会花费更少的I/O等待,更快的反序列化)。 –

+0

关于Jupyter“挂”:你检查了'jupyter'控制台中的Spark日志?火花是一个非常详细的野兽。如果司机在等待什么,它应该在那里显示。如果司机坠毁或离开僵尸,它肯定会显示。 –

回答

0
  1. Jupyter可能会挂起。在这种情况下,Jupyter将等待资源可用。其他笔记本电脑的其他火花应用可能会消耗资源。检查Yarn UI以查看是否有其他应用程序在运行,并且是否有可用资源。您可以从此UI中杀死其他应用程序。或者在笔记本电脑的情况下,您可以使用Jupyter“Running notebooks”UI关闭它们。

  2. 缓慢的查询可能是由许多问题引起的。首先要检查的是确保您的火花应用程序使用Yarn中的所有可用内核。在预览笔记本中提供了大约25%的资源。您可以使用%% configure命令更改该分配。将核心数量设置为4,并将执行程序数量设置为15: %% configure -f

    {“name”:“remotesparkmagics-sample”,“executorMemory”:“12G”,“executorCores”:4,“numExecutors “:15} 这应该为您的应用程序提供全部60个内核。

+0

感谢您的配置提示,现在我看到渴望的内存拍摄高达91%。然而,它仍然没有返回800秒后的结果,因为蜂巢给了我450秒的结果。顺便说一句,我认为这个资源没有任何问题,我查了一下,那里只有一个'remotesparkmagics',我没有运行其他任何东西。 – Kiran

+0

从你的回答中不清楚你的查询是否仍然挂起或只是缓慢? – maxiluk

+0

是的它仍然挂起,我认为问题是数据在不同的资源组中的外部表中。如果我将数据移到同一资源组中的托管表中,事情就会按预期工作。 – Kiran