0

我有一堆 csv 文件存储在 blob 存储中,其中包含如下记录:

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

我使用以下命令创建了一个外部 Hive 表

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://mycontainer@mystorage.blob.core.windows.net/';

并设法为一个月的数据添加了许多如下所示的分区

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说的。

现在我有以下两个问题:

1. Jupyter 挂起

当我执行这样的查询时,我hiveContext.sql("select count(*) from my_history").show()没有得到任何结果,甚至没有异常,因为从 Hive 运行相同的结果在很长一段时间后说 400+ 秒后给了我 135,733,286 作为结果。

2. 缓慢的结果

我像这样在 Hive 上尝试了一个简单的重复查询

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。

我在这里想念什么?

谢谢基兰

4

1 回答 1

0
  1. 如果 Yarn 中没有资源来为您的笔记本启动新的 spark 应用程序,Jupyter 可能会挂起。在这种情况下,Jupyter 将等待资源可用。资源可能会被其他笔记本中的其他 Spark 应用程序消耗。检查 Yarn UI 以查看是否有其他应用程序正在运行,以及是否有可用资源。您可以从此 UI 中终止其他应用程序。或者,如果是笔记本,您可以使用 Jupyter“运行笔记本”用户界面关闭它们。

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

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

于 2016-04-21T17:32:32.700 回答