Sqoop导入为OrC文件

5

在sqoop中是否有选项可以从RDMS导入数据并将其存储为HDFS中的ORC文件格式?

尝试的替代方法:将其作为文本格式导入,使用临时表以文本文件的形式读取输入,并在hive中将其写入hdfs作为orc。

4个回答

8

至少在Sqoop 1.4.5中,存在支持orc文件格式(以及其他格式)的hcatalog集成。

例如,您可以选择

--hcatalog-storage-stanza

可以设置为

stored as orc tblproperties ("orc.compress"="SNAPPY")

例子:

sqoop import 
 --connect jdbc:postgresql://foobar:5432/my_db 
 --driver org.postgresql.Driver 
 --connection-manager org.apache.sqoop.manager.GenericJdbcManager 
 --username foo 
 --password-file hdfs:///user/foobar/foo.txt 
 --table fact 
 --hcatalog-home /usr/hdp/current/hive-webhcat 
 --hcatalog-database my_hcat_db 
 --hcatalog-table fact 
 --create-hcatalog-table 
 --hcatalog-storage-stanza 'stored as orc tblproperties ("orc.compress"="SNAPPY")'

我正在使用Sqoop 1.4.6.2.3.4.0将表从Netezza移动到ORC格式的HIVE。但是我遇到了以下问题。http://stackoverflow.com/questions/36782519/sqoop-error-java-io-ioexception-hcat-exited-with-status-1?noredirect=1#comment61145477_36782519 - Arun
我做了类似的事情(除了我没有指定hcatalog-home,而是指定了直接模式)来从Oracle导入到Hive。我的Hive表一开始还可以,但过了一段时间后我就无法查询它了 - 我得到了{"trace":"org.apache.ambari.view.hive.client.HiveErrorStatusException: H170 Unable to fetch results. java.io.IOException: java.io.IOException: Error reading file: hdfs://host:port/apps/hive/warehouse/db/table/part-m-0000 - Edi Bice

5

Sqoop import仅支持以下格式。

--as-avrodatafile   Imports data to Avro Data Files

--as-sequencefile   Imports data to SequenceFiles

--as-textfile   Imports data as plain text (default)

--as-parquetfile    Imports data as parquet file (from sqoop 1.4.6 version)

3
在当前可用的Sqoop版本中,无法使用单个命令将RDBS中的数据导入到HDFS中的ORC格式。这是Sqoop中已知的问题。 此问题引用链接: https://issues.apache.org/jira/browse/SQOOP-2192 我认为目前唯一可用的替代方案就如你所提到的那样。我也遇到了类似的用例,并使用了另外一个两步方法来解决。

0

目前没有直接使用sqoop将rdms表数据导入为ORC文件的选项。 我们可以通过两个步骤来实现相同的效果。

  1. 以任何可用格式(例如文本)导入数据。
  2. 使用Spark SQL读取数据并将其保存为orc文件。

示例: 步骤1:将表数据作为文本文件导入。

sqoop import --connect jdbc:mysql://quickstart:3306/retail_db --username retail_dba --password cloudera \
--table orders \
--target-dir /user/cloudera/text \
--as-textfile

步骤2:在命令提示符上使用spark-shell获取scala REPL命令行界面。

scala> val sqlHiveContext = new org.apache.spark.sql.hive.HiveContext(sc)
sqlHiveContext: org.apache.spark.sql.hive.HiveContext = org.apache.spark.sql.hive.HiveContext@638a9d61

scala> val textDF = sqlHiveContext.read.text("/user/cloudera/text")
textDF: org.apache.spark.sql.DataFrame = [value: string]

scala> textDF.write.orc("/user/cloudera/orc/")

步骤三:检查输出。

[root@quickstart exercises]# hadoop fs -ls /user/cloudera/orc/
Found 5 items
-rw-r--r--   1 cloudera cloudera          0 2018-02-13 05:59 /user/cloudera/orc/_SUCCESS
-rw-r--r--   1 cloudera cloudera     153598 2018-02-13 05:59 /user/cloudera/orc/part-r-00000-24f75a77-4dd9-44b1-9e25-6692740360d5.orc
-rw-r--r--   1 cloudera cloudera     153466 2018-02-13 05:59 /user/cloudera/orc/part-r-00001-24f75a77-4dd9-44b1-9e25-6692740360d5.orc
-rw-r--r--   1 cloudera cloudera     153725 2018-02-13 05:59 /user/cloudera/orc/part-r-00002-24f75a77-4dd9-44b1-9e25-6692740360d5.orc
-rw-r--r--   1 cloudera cloudera     160907 2018-02-13 05:59 /user/cloudera/orc/part-r-00003-24f75a77-4dd9-44b1-9e25-6692740360d5.orc

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