从HDFS获取数据?Hive?

3

我是Hadoop的新手。我对我的数据运行了一个Map Reduce,并现在想查询它,以便可以将其放入我的网站中。Apache Hive是否是最好的方法?非常感谢任何帮助。

3个回答

3
请记住,Hive是一个批处理系统,它在底层将SQL语句转换为一堆MapReduce作业,并在其中构建阶段。此外,Hive是一个高延迟系统,即根据您的数据集大小,处理复杂查询可能需要几分钟到几小时甚至几天的时间。
因此,如果您想在网站中提供来自MapReduce作业输出的结果,则强烈建议您使用sqoop将结果导出回RDBMS,然后从那里继续进行。
或者,如果数据本身很大且无法导出回RDBMS,则另一个选择是使用NoSQL系统,例如HBase

1
欢迎来到Hadoop!
强烈推荐您观看Cloudera Essentials for Apache Hadoop | Chapter 5: The Hadoop Ecosystem,并熟悉从您的HDFS集群中传入和传出数据的不同方式。该视频易于观看,并描述了每个工具的优缺点,但这个大纲应该为您提供了Hadoop生态系统的基础知识:
  1. Flume - 数据集成和将扁平文件导入HDFS。设计用于异步数据流(例如日志文件)。分布式,可扩展。支持各种端点。允许在加载到HDFS之前对数据进行预处理。
  2. Sqoop - 结构化数据(关系型数据库)和HDFS的双向转移。允许增量导入到HDFS。RDBMS必须支持JDBC或ODBC。
  3. Hive - Hadoop的类SQL接口。需要表结构。需要JDBC和/或ODBC。
  4. Hbase - 允许交互式访问HDFS。位于HDFS之上并对数据应用结构。允许随机读取,与集群水平扩展。不是完整的查询语言;仅允许get/put/scan操作(可以与Hive和/或Impala一起使用)。仅在数据上使用行键索引。不使用Map Reduce范例。
  5. Impala - 类似于Hive,用于查询存储在HDFS中的大量数据的高性能SQL引擎。不使用Map Reduce。是Hive的良好替代品。
  6. Pig - 用于转换大型数据集的数据流语言。允许在运行时选择性地定义模式。PigServer(Java API)允许编程访问。
注意:我假设您正在尝试读取的数据已经存在于HDFS中。然而,Hadoop生态系统中的一些产品可能对您的应用程序或作为一般参考有用,因此我将它们包含在内。

0

如果你只想从HDFS获取数据,那么可以通过Hive来实现。然而,如果你的数据已经有序(例如按列排列),那么使用Hive将带来更多好处。

让我们举个例子:你的MapReduce任务生成了一个名为wordcount.csv的CSV文件,其中包含两行:单词和计数。这个CSV文件位于HDFS上。

现在假设你想知道单词“gloubiboulga”的出现次数。你可以通过以下代码轻松实现:

CREATE TABLE data
(
  word STRING,
  count INT,
  text2 STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ",";

LOAD DATA LOCAL INPATH '/wordcount.csv'
OVERWRITE INTO TABLE data;   

select word, count from data where word=="gloubiboulga";

请注意,虽然这种语言看起来非常像SQL,但您仍需要学习一些相关知识。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接