Sqoop 如何将HDFS上的数据--export到 Sybase IQ数据库

时间:2022-09-22 20:27:22
Sqoop 如何将HDFS上的数据--export到 Sybase IQ数据库


数据库建表语句
CREATE TABLE "IQDMUSER"."CITYJY_BSHS_OP" (
"INP_DATE" date NULL,
"BANK" integer NULL,
"BANK_NAME" varchar(254) NULL,
"PROVINCE" varchar(254) NULL,
"CITY" varchar(254) NULL,
"KJ_XFJE" numeric(49,19) NULL,
"KJ_XFBS" numeric(22,11) NULL
);
数据插入语句
INSERT INTO CITYJY_BSHS_OP (INP_DATE, BANK, BANK_NAME, PROVINCE, CITY, KJ_XFJE, KJ_XFBS) VALUES ('2017-01-01 00:00:00', 2, '腐恶噢发we', ' 无法wefwfwe', '俄方金额饭', 2.0000000000000000000, 201.00000000000);
INSERT INTO CITYJY_BSHS_OP (INP_DATE, BANK, BANK_NAME, PROVINCE, CITY, KJ_XFJE, KJ_XFBS) VALUES ('2017-01-01 00:00:00', 2, '腐恶噢发we', ' 无法wefwfwe', '俄方金额饭', 2.0000000000000000000, 201.00000000000);

数据抽取语句:执行成功
sqoop import --verbose --driver com.sybase.jdbc4.jdbc.SybDriver --connect jdbc:sybase:Tds:10.193.81.8:2638/iq3 --username IQDM --password  IQDM --query "select * from iqdmuser.cityjy_bshs_op where \$CONDITIONS" --map-column-java "INP_DATE=String" --target-dir /TABLES/PCLIU/CITYJY_BSHS_OP_2 --as-parquetfile --split-by bank -m 3

数据倒回语句:执行报错
sqoop export  --verbose --driver com.sybase.jdbc4.jdbc.SybDriver --connect jdbc:sybase:Tds:10.193.81.8:2638/iq3 --username IQDM --password IQDM --table iqdmuser.CITYJY_BSHS_OP_SQOOP_TEST --export-dir /TABLES/PCLIU/CITYJY_BSHS_OP_2  -m 3

报错信息如下
17/03/20 18:41:28 DEBUG mapreduce.CombineShimRecordReader: ChildSplit operates on: hdfs://localhost:9000/TABLES/PCLIU/CITYJY_BSHS_OP_6/part-m-00003
17/03/20 18:41:28 DEBUG mapreduce.AutoProgressMapper: Instructing auto-progress thread to quit.
17/03/20 18:41:28 DEBUG mapreduce.AutoProgressMapper: Waiting for progress thread shutdown...
17/03/20 18:41:28 INFO mapreduce.AutoProgressMapper: Auto-progress thread is finished. keepGoing=false
17/03/20 18:41:28 DEBUG mapreduce.AutoProgressMapper: Progress thread shutdown detected.
17/03/20 18:41:28 INFO mapred.LocalJobRunner: 
17/03/20 18:41:28 ERROR mapreduce.AsyncSqlOutputFormat: Got exception in update thread: java.sql.SQLException: ASA Error -131: Syntax error near ',' on line 1
        at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.executeLoop(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.execute(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybPreparedStatement.execute(Unknown Source)
        at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:233)

17/03/20 18:41:28 ERROR mapreduce.AsyncSqlRecordWriter: Top level exception: 
java.sql.SQLException: ASA Error -131: Syntax error near ',' on line 1
        at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.executeLoop(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.execute(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybPreparedStatement.execute(Unknown Source)
        at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:233)
17/03/20 18:41:28 ERROR mapreduce.AsyncSqlOutputFormat: Got exception in update thread: java.sql.SQLException: ASA Error -131: Syntax error near ',' on line 1
        at com.sybase.jdbc4.jdbc.SybConnection.getAllExceptions(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.handleSQLE(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.nextResult(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.executeLoop(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.execute(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybPreparedStatement.execute(Unknown Source)
        at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:233)

17/03/20 18:41:28 ERROR mapreduce.AsyncSqlOutputFormat: SQLException in update thread but error slot full: java.sql.SQLException: JZ0C0: 连接已关闭。
        at com.sybase.jdbc4.jdbc.ErrorMessage.raiseError(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybConnection.checkConnection(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.close(Unknown Source)
        at com.sybase.jdbc4.jdbc.SybStatement.close(Unknown Source)
        at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:268)

17/03/20 18:41:28 INFO mapreduce.Job: Job job_local304403194_0001 running in uber mode : false
17/03/20 18:41:28 INFO mapreduce.Job:  map 0% reduce 0%
17/03/20 18:41:33 INFO mapred.LocalJobRunner: map
17/03/20 18:41:34 INFO mapreduce.Job:  map 50% reduce 0%
^C^C^C[hadoop@zhgl-b sybase]$ 

1 个解决方案

#1


找到原因了,需要加参数  --batch
至于为啥要加--batch不太清楚。
如下:
sqoop export --driver com.sybase.jdbc4.jdbc.SybDriver --connect jdbc:sybase:Tds:10.193.81.8:2638/DATABASE=iq3 --username IQDM --password IQDM --export-dir "/TABLES/PCLIU/SYBASE/CITYJY_BSHS_OP_2" --table "IQDMUSER.CITYJY_BSHS_OP_SQOOP_TEMP3" --input-fields-terminated-by ',' --lines-terminated-by '\n' --relaxed-isolation --batch --num-mappers 4

#1


找到原因了,需要加参数  --batch
至于为啥要加--batch不太清楚。
如下:
sqoop export --driver com.sybase.jdbc4.jdbc.SybDriver --connect jdbc:sybase:Tds:10.193.81.8:2638/DATABASE=iq3 --username IQDM --password IQDM --export-dir "/TABLES/PCLIU/SYBASE/CITYJY_BSHS_OP_2" --table "IQDMUSER.CITYJY_BSHS_OP_SQOOP_TEMP3" --input-fields-terminated-by ',' --lines-terminated-by '\n' --relaxed-isolation --batch --num-mappers 4