2014-02-07 108 views
1

我使用Sqoop将处理后的数据从Hive格式的HDFS导出到MySQL服务器。代码简单明了,但无论我做什么,Sqoop都无法正确识别字段分隔符。可能是什么问题?无法使用Sqoop将数据从Hive导出到MySQL

这是蜂巢

hive> show create table database.weblog_ag; 

OK 
CREATE TABLE database.weblog_ag(
    visitor_id string, 
    time array<string>, 
    url array<string>, 
    client_time array<string>, 
    resolution array<string>, 
    browser array<string>, 
    os array<string>, 
    devicetype array<string>, 
    devicemodel array<string>, 
    ipinfo array<string> 
CLUSTERED BY (
    visitor_id) 
SORTED BY (
    time ASC) 
INTO 32 BUCKETS 
ROW FORMAT DELIMITED 
    FIELDS TERMINATED BY '\t' 
STORED AS INPUTFORMAT 
    'org.apache.hadoop.mapred.TextInputFormat' 
OUTPUTFORMAT 
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' 
LOCATION 
    'hdfs://poc/apps/hive/warehouse/database.db/weblog_ag' 
TBLPROPERTIES (
    'numPartitions'='0', 
    'numFiles'='96', 
    'transient_lastDdlTime'='1390411893', 
    'totalSize'='59633487', 
    'numRows'='0', 
    'rawDataSize'='0') 
Time taken: 1.871 seconds, Fetched: 31 row(s) 

我的表定义当我检查HDFS文件中,字段的使用\t(TAB)字符正确分隔。这是我从HDFS

101009a36b3113fa  2014-01-06 08:59:58  http://someurl 2014-01-06 08:56:53  1280x800  Chrome Windows XP  General_Desktop Other 115.74.215.116 

抓住样本数据这是我Sqoop选项文件配置

export 

--connect 
jdbc:mysql://webserver/fprofile_db 

--username 
username 

--password 
password 

--table 
weblog 

--direct 

--export-dir 
/apps/hive/warehouse/database.db/weblog_ag 

--input-fields-terminated-by 
'\011' 

--columns 
visitor_id, time, url, client_time, resolution, browser, os, devicetype, devicemodel, ipinfo 

我试图用'\011\t--input-fields-terminated-by参数,但他们没有工作。在mySQL中导出的结果如下:

enter image description here 这里有什么问题?

回答

3

因此,在这一天结束的时候,这个问题的罪魁祸首是--direct选项。我删除它,一切正常。

0

即使要导出,您真正需要使用

--fields-terminated-by 
'\t' 
0

我发现使用mysql直接模式的SQOOP忽略了我的--input-fields-terminated-by并始终使用0x2c(逗号)。

当我用直接模式与SQOOP为MySQL,它生成类似的查询:

LOAD DATA LOCAL INFILE '/yarn/nm/usercache/hdfs/appcache/application_12345/somefile.txt' 
    INTO TABLE mytable 
FIELDS TERMINATED BY 0x2c 
LINES TERMINATED BY 0xa 
IGNORE 0 LINES (field1, field2, ...) 

你可以看到它指定它由终止字段。

相关问题