Hadoop 将序列文件数据加载到使用存储为序列文件创建的配置单元表失败

Hadoop 将序列文件数据加载到使用存储为序列文件创建的配置单元表失败,hadoop,hive,sqoop,Hadoop,Hive,Sqoop,使用以下sqoop import命令将内容作为序列文件从MySQL导入HDFS sqoop import --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" --username retail_dba --password cloudera --table orders --target-dir /user/cloudera/sqoop_import_seq/orders --as-seq

使用以下sqoop import命令将内容作为序列文件从MySQL导入HDFS

sqoop import --connect "jdbc:mysql://quickstart.cloudera:3306/retail_db" 
    --username retail_dba --password cloudera 
    --table orders 
    --target-dir /user/cloudera/sqoop_import_seq/orders 
    --as-sequencefile 
    --lines-terminated-by '\n' --fields-terminated-by ','
然后我使用下面的命令创建配置单元表

create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
STORED AS SEQUENCEFILE
LOAD DATA INPATH '/user/cloudera/sqoop_import_seq/orders' INTO TABLE orders_seq;
但当我尝试使用下面的命令将从第一个命令获得的序列数据加载到配置单元表中时

create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string) 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '|' 
STORED AS SEQUENCEFILE
LOAD DATA INPATH '/user/cloudera/sqoop_import_seq/orders' INTO TABLE orders_seq;
它给出了以下错误

Loading data to table practice.orders_seq
Failed with exception java.lang.RuntimeException: java.io.IOException: WritableName can't load class: orders
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.MoveTask

我哪里出错了?

首先,数据必须是那种格式

让我们假设您必须拥有该格式的数据。加载数据命令不是必需的。一旦sqoop完成导入数据,您只需创建一个配置单元表,指向sqoop数据所在的同一目录

脚本中的一个旁注:

create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string)  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'  
STORED AS SEQUENCEFILE
sqoop命令说明:
--字段以“,”结尾。
但是当您创建正在使用的表时:
字段以“|”结尾。


根据我的经验,我认为最好的方法是,这将自动创建一个avro模式。然后,您只需使用先前创建的模式()和存储从sqooping过程中获得的数据的位置创建一个配置单元表

首先,有必要使用这种格式的数据吗

让我们假设您必须拥有该格式的数据。加载数据命令不是必需的。一旦sqoop完成导入数据,您只需创建一个配置单元表,指向sqoop数据所在的同一目录

脚本中的一个旁注:

create table orders_seq(order_id int,order_date string,order_customer_id int,order_status string)  
ROW FORMAT DELIMITED  
FIELDS TERMINATED BY '|'  
STORED AS SEQUENCEFILE
sqoop命令说明:
--字段以“,”结尾。
但是当您创建正在使用的表时:
字段以“|”结尾。


根据我的经验,我认为最好的方法是,这将自动创建一个avro模式。然后,您只需使用先前创建的模式()和存储从sqooping过程中获得的数据的位置创建一个配置单元表

我正在探索从序列文件创建配置单元表的场景。我同意您可以使用avro/text格式的“存储为序列文件”创建配置单元表的观点。但让我们假设DB guys将数据保存在暂存服务器上,并且您必须基于该数据创建配置单元表,那么我们将如何处理这种情况?您能否分享您已经存储的数据的外观。它即将创建一个指向数据的配置单元表。如果您的数据是CSV,我建议您将CSV Serde与配置单元表一起使用()我正在探索从序列文件创建配置单元表的场景。我同意您可以使用avro/text格式的“存储为序列文件”创建配置单元表的观点。但让我们假设DB guys将数据保存在暂存服务器上,并且您必须基于该数据创建配置单元表,那么我们将如何处理这种情况?您能否分享您已经存储的数据的外观。它即将创建一个指向数据的配置单元表。如果您的数据是CSV,我建议您在配置单元表()中使用CSV Serde,因为您有一个java类“订单”的唯一文件。据我所知,您需要编写一个特殊的Java MapReduce作业来处理这个问题。据我所知,您需要编写一个特殊的JavaMapReduce作业来处理这个问题。