无法使用Sqoop将数据从Hive导出到MySQL

时间:2014-02-07 04:04:34

标签: mysql hadoop hive sqoop

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

这是我在Hive中的表定义

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(制表符)字符正确分隔字段。这是我从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 个答案:

答案 0 :(得分:3)

所以在一天结束时,问题的罪魁祸首是--direct选项。我删除了它,一切正常。

答案 1 :(得分:0)

即使您正在导出,您实际上也需要使用

--fields-terminated-by
'\t'

答案 2 :(得分: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, ...)

您可以看到它在以。

结尾的字段中指定它