【问题标题】:Questions about Hive关于蜂巢的问题
【发布时间】:2017-02-15 10:46:15
【问题描述】:
我有这个环境:
- 具有多个应用程序的 Hadoop 环境(1 个主设备,4 个从设备):
ambari、hue、hive、sqoop、hdfs ...生产中的服务器(单独
来自 hadoop) 和 mysql 数据库。
我的目标是:
- 优化在这个mysql服务器上进行的查询很慢
今天执行。
我做了什么:
- 我使用 Sqoop 将 mysql 数据导入到 HDFS。
我的疑惑:
- 我无法使用 Hive 在 HDFS 中直接进行选择?
- 是否必须将数据加载到 Hive 并进行查询?
- 如果将新数据输入到mysql数据库中,最好的方法是什么
获取此数据并将其插入 HDFS,然后将其插入
再次蜂巢? (可能是实时的)
提前谢谢你
【问题讨论】:
标签:
hadoop
hive
hdfs
sqoop
【解决方案1】:
我无法使用 Hive 在 HDFS 中直接进行选择?
你可以。在 hive 中创建 External Table,指定您的 hdfs 位置。然后您可以对其执行任何 HQL。
我是否必须将数据加载到 Hive 并进行查询?
如果是外部表,则不需要在hive中加载数据;您的数据位于同一个 HDFS 目录中。
如果将新数据输入到 mysql 数据库中,获取这些数据的最佳方法是什么。
您可以为此使用 Sqoop Incremental Import。它只会获取新添加/更新的数据(取决于增量模式)。您可以创建一个sqoop job 并根据您的需要安排它。
【讨论】:
-
你也可以尝试使用--hive-import来sqoop数据而不是#1和#2。您的数据将立即可用于 Hive 和 Impala。有关 OP 的更多信息,有关一步引入数据并能够使用更快的 Impala here 查询数据。答案以通常更快的拼花格式引入数据。
-
-
【解决方案2】:
你可以试试 Impala,它在 SQL 查询的情况下比 Hive 快得多。您需要定义表,很可能会指定一些分隔符、存储格式以及数据在 HDFS 上的存储位置(我不知道您存储的是哪种数据)。然后,您可以编写 SQL 查询,该查询将从 HDFS 获取数据。
我没有从关系数据库实时提取数据的经验,但是您可以尝试使用 cron 调度 Sqoop 作业。