【发布时间】:2016-04-24 10:24:49
【问题描述】:
我正在使用 Hadoop/Spark 进行一些信号分析,我需要有关如何构建整个过程的帮助。
信号现在存储在数据库中,我们将使用 Sqoop 读取它,并将其转换为 HDFS 上的文件,其架构类似于:
<Measure ID> <Source ID> <Measure timestamp> <Signal values>
其中信号值只是由浮点逗号分隔的数字组成的字符串。
000123 S001 2015/04/22T10:00:00.000Z 0.0,1.0,200.0,30.0 ... 100.0
000124 S001 2015/04/22T10:05:23.245Z 0.0,4.0,250.0,35.0 ... 10.0
...
000126 S003 2015/04/22T16:00:00.034Z 0.0,0.0,200.0,00.0 ... 600.0
我们想编写交互式/批量查询到:
对信号值应用聚合函数
SELECT *
FROM SIGNALS
WHERE MAX(VALUES) > 1000.0
选择峰值超过 1000.0 的信号。
在聚合上应用聚合
SELECT SOURCEID, MAX(VALUES)
FROM SIGNALS
GROUP BY SOURCEID
HAVING MAX(MAX(VALUES)) > 1500.0
选择至少有一个信号超过 1500.0 的信号源。
对样本应用用户定义的函数
SELECT *
FROM SIGNALS
WHERE MAX(LOW_BAND_FILTER("5.0 KHz", VALUES)) > 100.0)
选择经过 5.0 KHz 滤波后的值至少超过 100.0 的信号。
我们需要一些帮助才能:
- 找到正确的文件格式以将信号数据写入 HDFS。我想到了 Apache Parquet。您将如何构建数据?
- 了解正确的数据分析方法:最好是创建不同的数据集(例如使用 Spark 处理数据并将结果保存在 HDFS 上)还是尝试在查询时从原始数据集执行所有操作?
- Hive 是一个很好的工具来进行我写的查询吗?我们在 Cloudera Enterprise Hadoop 上运行,因此我们也可以使用 Impala。
- 如果我们生成与原始数据不同的派生数据集,我们如何跟踪数据的沿袭,即知道数据是如何从原始版本生成的?
非常感谢!
【问题讨论】:
标签: hadoop apache-spark hive impala parquet