Apache Sqoop和Hive有什么区别?我知道sqoop用于将数据从RDBMS导入/导出到HDFS,而Hive是在Hadoop之上的SQL层抽象。我可以使用Sqoop将数据导入HDFS,然后使用Hive进行查询吗?
答案 0 :(得分:3)
是的,你可以。事实上,很多人使用sqoop和hive来完全按照你的说法进行操作。
在我的项目中,我要做的是从我的RDBMS加载历史数据,这是oracle,将其移动到HDFS。我为此路径定义了hive外部表。这允许我运行配置单元查询来进行转换。此外,我们曾经在这些数据之上编写mapreduce程序,以进行各种分析。
答案 1 :(得分:2)
Sqoop在HDFS和关系数据库之间传输数据。您可以使用Sqoop将数据从关系数据库管理系统(RDBMS)(如MySQL或Oracle)传输到HDFS,并对传输的数据使用MapReduce。 Sqoop也可以将这些转换后的数据导出回RDBMS。更多信息http://sqoop.apache.org/docs/1.4.3/index.html
Hive是一种数据仓库软件,可以帮助查询和管理驻留在HDFS中的大型数据集。 Hive为数据提供了读取模式(与RDBMS的写入模式相反),以及使用类似SQL的HiveQL语言查询数据的能力。更多信息https://hive.apache.org/
答案 2 :(得分:1)
是的,你可以。事实上,这正是它的用途。
答案 3 :(得分:0)
I)Sqoop:1。我们可以将任何外部数据源与HDFS集成,即Sql,NoSql和Data仓库,同时使用此工具同时导出它,因为这可以用作双向方式。 2. sqoop将数据从关系数据库移动到Hbase。
Hive:1。根据我的理解,我们可以将数据从Sql数据库导入到hive而不是NoSql数据库。 2.我们无法将数据从HDFS导出到Sql数据库中
II)我们可以使用以下两个选项一起使用
1. sqoop create-hive-table --connect jdbc:mysql://<hostname>/<dbname> --table <table name> --fields-terminated-by ','
上面的命令将生成hive表,该表名在外部表和模式中将是同名
2.加载数据
hive> LOAD DATA INPATH <filename> INTO TABLE <filename>
如果您知道要直接从数据库导入直接进入配置单元,则可以将Hive缩短为一步
sqoop import --connect jdbc:mysql://<hostname>/<dbname> --table <table name> -m 1 --hive-import