【问题标题】:Sqoop import as OrC fileSqoop 导入为 OrC 文件
【发布时间】:2018-02-13 22:02:18
【问题描述】:

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

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

【问题讨论】:

    标签: hdfs rdbms sqoop


    【解决方案1】:

    至少在 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 以 ORC 格式将表格从 Netezza 移动到 HIVE。但我看到以下问题。 stackoverflow.com/questions/36782519/…
    • 我做了类似的事情(除了我没有指定 hcatalog-home 并且我指定了直接模式)从 Oracle 导入到 Hive。我生成的配置单元表一开始还可以,但一段时间后我无法查询它 - 我得到 {"trace":"org.apache.ambari.view.hive.client.HiveErrorStatusException: H170 Unable to fetch results. java.io .IOException:java.io.IOException:读取文件时出错:hdfs://host:port/apps/hive/warehouse/db/table/part-m-0000
    【解决方案2】:

    Sqoop 导入仅支持以下格式。

    --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 版本中,无法通过单个 shoot 命令以 ORC 格式将数据从 RDBS 导入 HDFS。这是 sqoop 中的一个已知问题。 提出此问题的参考链接:https://issues.apache.org/jira/browse/SQOOP-2192

      我认为目前唯一可用的选择与您提到的相同。我也遇到了类似的用例,并使用了替代的两步方法。

      【讨论】:

        【解决方案4】:

        目前没有使用 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 命令 shell。

        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/")
        

        第 3 步:检查输出。

        [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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-07
          • 1970-01-01
          • 2016-09-04
          • 1970-01-01
          • 2016-08-07
          • 2017-02-03
          • 2020-03-02
          相关资源
          最近更新 更多