次のようなレコードを含む 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 をキャッシュすることを読んだためです。
ここで何が欠けていますか?
ありがとうキラン