我最近开始研究使用Hive和Impala查询位于HDFS上的大量CSV数据.正如我所期望的那样,与Hive相比,我对Impala的响应时间要好得多.
我想知道是否有一些类型的查询/用例仍然需要Hive以及Impala不适合的地方.
对于HDFS上的相同数据,Impala与Hive相比如何提供更快的查询响应?
我想对HDFS中的数据进行一些"近实时"数据分析(类似OLAP).
我的研究表明,与Apache Hive相比,上述三个框架报告了显着的性能提升.有没有人对其中任何一个有一些实际经验?不仅涉及性能,还涉及稳定性?
我尝试通过hive查询hbase数据(我正在使用cloudera).我做了一个指向hbase的fiew hive外部表,但事情是Cloudera的Impala无法访问所有这些表.所有hive外部表都出现在Metastore管理器中,但是当我在Impala中执行一个简单的"show tables"时,我看到缺少3个表.这会是特权问题吗?我看到在Metastore管理器中,每个人都可以读取丢失的3个表,所以......
我在hive表中有默认的db,它包含80个表.
我创建了另外一个数据库,我想将所有表从默认数据库复制到新数据库.
有没有办法我可以从一个数据库复制到其他数据库,而无需创建单个表.
如果有任何解决方案,请告诉我..提前致谢
以下是当前流程的步骤:
insert into permanent_table select * from staging_table).refresh permanent_table在Impala中执行而可用.我看看我构建的过程并且"闻起来"很糟糕:有太多的中间步骤会影响数据流.
大约20个月前,我看到了一个演示,其中数据从Amazon Kinesis管道流式传输,并且可以近乎实时地被Impala查询.我不认为他们做了一件非常丑陋/错综复杂的事情.有没有更有效的方法将数据从Kafka传输到Impala(可能是可以序列化为Parquet的Kafka消费者)?
我认为"将数据流式传输到低延迟SQL"必定是一个相当常见的用例,所以我很想知道其他人是如何解决这个问题的.
我正在使用Hadoop/Spark进行一些信号分析,我需要有关如何构建整个过程的帮助.
信号现在存储在数据库中,我们将使用Sqoop读取,并将在HDFS上的文件中进行转换,其架构类似于:
<Measure ID> <Source ID> <Measure timestamp> <Signal values>
Run Code Online (Sandbox Code Playgroud)
其中信号值只是由浮点逗号分隔的数字组成的字符串.
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
Run Code Online (Sandbox Code Playgroud)
我们想写交互/批量查询到:
在信号值上应用聚合函数
SELECT *
FROM SIGNALS
WHERE MAX(VALUES) > 1000.0
Run Code Online (Sandbox Code Playgroud)
选择峰值超过1000.0的信号.
将聚合应用于聚合
SELECT SOURCEID, MAX(VALUES)
FROM SIGNALS
GROUP BY SOURCEID
HAVING MAX(MAX(VALUES)) > 1500.0
Run Code Online (Sandbox Code Playgroud)
选择至少具有超过1500.0的单个信号的源.
在样本上应用用户定义的函数
SELECT *
FROM SIGNALS
WHERE MAX(LOW_BAND_FILTER("5.0 KHz", VALUES)) > 100.0)
Run Code Online (Sandbox Code Playgroud)
选择在5.0 KHz过滤后至少具有超过100.0的值的信号.
我们需要一些帮助才能:
非常感谢你!
我一直在尝试编写一个R脚本来查询Impala数据库.这是对数据库的查询:
select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA
Run Code Online (Sandbox Code Playgroud)
当我手动运行此查询时(通过impala-shell读取:在Rscript之外),我可以获取表内容.但是,当通过R脚本尝试相同时,我收到以下错误:
[1] "HY000 140 [Cloudera][ImpalaODBC] (140) Unsupported query."
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA'
closing unused RODBC handle 1
Run Code Online (Sandbox Code Playgroud)
为什么在通过R尝试时查询失败?我该如何解决这个问题?提前致谢 :)
编辑1:
连接脚本如下所示:
library("RODBC");
connection <- odbcConnect("Impala");
query <- "select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB …Run Code Online (Sandbox Code Playgroud) 我们正在尝试对Informatica大数据版本(而不是云版本)进行概念验证,我已经看到我们可以使用HDFS,Hive作为源和目标.但我的问题是Informatica是否连接到Cloudera Impala?如果是这样,我们是否需要为此添加任何其他连接器?我做了全面的研究,以检查是否支持但找不到任何东西.有没有人试过这个?如果是,您可以指定步骤并链接到任何文档吗?
Informatica版本:9.6.1(Hotfix 2)
hadoop informatica informatica-powercenter impala cloudera-cdh
我在Impala中使用SQL来编写此查询.我正在尝试将以YYYYMMDD格式存储的日期字符串转换为日期格式,以便运行如下查询:
SELECT datadate,
session_info
FROM database
WHERE datadate >= NOW() - INTERVAL 5 DAY
ORDER BY datadate DESC;
Run Code Online (Sandbox Code Playgroud)
由于>= NOW() - INTERVAL 5 DAY代码不能与YYYYMMDD字符串一起使用,我想找到一种方法将其转换为可用于此类查询的日期格式.我的想法是它应该看起来像这样(基于关于其他SQL查询编辑器的类似问题),但它在Impala中不起作用:
SELECT datadate,
session_info,
convert(datetime, '20141008', 102) AS session_date
FROM database
WHERE session_date >= NOW() - INTERVAL 5 DAY
ORDER BY session_date DESC;
Run Code Online (Sandbox Code Playgroud)
任何人都知道在Impala中如何做到这一点?
编辑:
我终于找到了解决问题的有效方法.没有尝试使用Impala的配置CAST或CONVERT在Impala中工作,但是下面的查询解决了问题并且完全可操作,允许对包含字符串值的列执行日期数学运算:
SELECT datadate,
session_info
FROM database
WHERE datadate >= from_unixtime(unix_timestamp(now() - interval 5 days), 'yyyyMMdd')
GROUP BY datadate
ORDER BY datadate DESC;
Run Code Online (Sandbox Code Playgroud) 为了提高性能(例如,对于连接),建议首先计算表静态.
在Hive我可以做::
analyze table <table name> compute statistics;
Run Code Online (Sandbox Code Playgroud)
在Impala中:
compute stats <table name>;
Run Code Online (Sandbox Code Playgroud)
我的spark应用程序(从hive-tables读取)是否也受益于预先计算的统计数据?如果是,我需要运行哪一个?它们是否都保存了hive Metastore中的统计数据?我在Cloudera 5.5.4上使用spark 1.6.1
注意:在参考文献的火花1.6.1(https://spark.apache.org/docs/1.6.1/sql-programming-guide.html)中,spark.sql.autoBroadcastJoinThreshold我找到了一个提示:
请注意,目前只有运行命令ANALYZE TABLE COMPUTE STATISTICS noscan的Hive Metastore表支持统计信息.
impala ×10
hadoop ×6
hive ×5
apache-spark ×3
apache-drill ×1
apache-kafka ×1
bigdata ×1
cloudera ×1
cloudera-cdh ×1
flume ×1
hiveql ×1
hue ×1
informatica ×1
mysql ×1
parquet ×1
r ×1
sql ×1