未使用 sqoop import-all 创建表

Posted

技术标签:

【中文标题】未使用 sqoop import-all 创建表【英文标题】:Table not getting created using sqoop import-all 【发布时间】:2016-12-31 03:05:13 【问题描述】:

我正在尝试为基于 AVRO 的表创建不同的架构。下面是 m 使用的命令。我可以看到所有带有 .avro 扩展名的数据文件的正确目录结构,但是当我登录 HIVE 并执行显示表时;在retail_avro.db 模式下没有表

sqoop import-all-tables \
--m 2 \
--connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" \
--username=retail_dba \
--password=cloudera \
--warehouse-dir=/user/hive/warehouse/retail_avro.db \
--create-hive-table \
--as-avrodatafile

如果我使用 hdfs 命令访问,下面的命令是输出:

[cloudera@quickstart ~]$ hdfs dfs -ls /user/hive/warehouse/retail_avro.db
Found 6 items
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/categories
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/customers
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/departments
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/order_items
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:26 /user/hive/warehouse/retail_avro.db/orders
drwxr-xr-x   - cloudera hive          0 2016-12-30 04:26 /user/hive/warehouse/retail_avro.db/products
[cloudera@quickstart ~]$
[cloudera@quickstart ~]$
[cloudera@quickstart ~]$ hdfs dfs -ls /user/hive/warehouse/retail_avro.db/categories
Found 3 items
-rw-r--r--   1 cloudera hive          0 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/categories/_SUCCESS
-rw-r--r--   1 cloudera hive       1007 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/categories/part-m-00000.avro
-rw-r--r--   1 cloudera hive        959 2016-12-30 04:25 /user/hive/warehouse/retail_avro.db/categories/part-m-00001.avro

当我登录 HIVE 时:

 hive> use retail_avro;
    OK
    Time taken: 1.942 seconds
    hive> show tables;
    OK
    Time taken: 0.518 seconds
    hive> select * from departments;
    FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 'departments'

【问题讨论】:

【参考方案1】:

    Sqoop Hive 导入当前与--as-avrodatafile--as-sequencefile 不兼容。请访问Sqoop Hive Import Documentation获取更多信息。

    avrodatafile 需要.avsc 架构和avroSerde 来创建avro 格式表。由于您正在生成avro 文件,因此您还需要avroschema。这里 Sqoop 与 avrodatafile 不兼容,因此 --create-hive-table 参数被忽略,因此 Sqoop 无法创建 Hive 表,但它会将数据导入所需目录中的 .avro 格式,因为其他参数正确且受支持。

您仍然可以生成.avsc 架构并在相同数据上创建表。你可以关注这个Sqoop avro import blog 这样做。

请访问Hive Avro SerDe documentation了解更多关于avrofile格式的信息

【讨论】:

【参考方案2】:

您还没有在 hive 中创建表。

作为“显示表格;”没有退回任何东西。

请转到 7.2.10 节。将数据导入 Hive link

注意:使用 sqoop 导入或导出数据时,您必须创建表或应显示的表。

导出到 RDMS - 表必须存在

导出到 HIVE -- 可以在将数据转储到 HDF 时创建表。

去扔https://cwiki.apache.org/confluence/display/Hive/AvroSerDe。

【讨论】:

--create-hive-table 参数。此选项表示如果表不存在,它将创建它。 来自 avro cwiki.apache.org/confluence/display/Hive/AvroSerDe.. 的 crate hive 表

以上是关于未使用 sqoop import-all 创建表的主要内容,如果未能解决你的问题,请参考以下文章

使用 pandas 数据透视表创建子图

mysql表创建好后添加外键

SQL - 分区或循环从主表创建子表[关闭]

sqoop 导入未识别显示 ClassNotFountException 错误的 mysql 表

为表创建好的索引

Sqoop 导入所有未与 Hive 数据库同步的表