0

次のようなレコードを含む blob ストレージに多数の csv ファイルが保存されています。

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

1か月分のデータに対して、以下のような多くのパーティションを追加することができました

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 Query はそうselect count(*) from my_history言っています。

現在、次の2つの問題があります。

1.Jupyter がハングする

このようなクエリを実行すると、hiveContext.sql("select count(*) from my_history").show()結果は得られず、例外もありません。ハイブから同じものを実行すると、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