在使用sqoop向mysql导出数据时,map运行100%,但是reduce一直不动

19/08/31 14:49:26 INFO mapreduce.Job:  map 100% reduce 0%

在使用sqoop向mysql导出数据时,map运行100%,但是reduce一直不动,此时成旭也不报错,在查看map的log时发现是由于mysql中设置字符长度不够导致的错误,但是错误只能在日志中看到。

2019-08-31 14:49:19,803 ERROR [Thread-11] org.apache.sqoop.mapreduce.AsyncSqlOutputFormat: Got exception in update thread: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'stime' at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4235)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
	at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:233)

2019-08-31 14:49:19,804 ERROR [Thread-11] org.apache.sqoop.mapreduce.AsyncSqlOutputFormat: Got exception in update thread: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'stime' at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4235)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2825)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2156)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1379)
	at org.apache.sqoop.mapreduce.AsyncSqlOutputFormat$AsyncSqlExecThread.run(AsyncSqlOutputFormat.java:233)

在修改了mysql中的属性之后,运行成功!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: sqoop是一个用于在Hadoop和关系型数据库之间传输数据的工具。可以使用sqoop将HDFS数据导出MySQL数据。 具体步骤如下: 1. 首先需要安装sqoop,并配置好相关环境变量。 2. 然后使用以下命令将HDFS数据导出MySQLsqoop export --connect jdbc:mysql://localhost:3306/test --username root --password root --table test_table --export-dir /user/hadoop/input --input-fields-terminated-by ',' 其,--connect参数指定了MySQL数据库的连接地址,--username和--password参数指定了MySQL数据库的用户名和密码,--table参数指定了要导出的表名,--export-dir参数指定了HDFS导出数据的路径,--input-fields-terminated-by参数指定了输入文件的分隔符。 3. 执行以上命令后,sqoop会将HDFS数据导出MySQL数据的test_table表。 希望对你有所帮助! ### 回答2: Sqoop是一个Apache基金会下属的开源项目,用于将结构化数据导入和导出到Hadoop集群Sqoop可以很方便的从关系型数据库(如MySQL、Oracle、PostgreSQL等)导入数据到Hadoop,也可以将数据从Hadoop导出到关系型数据。 具体来说,我们可以通过Sqoop数据从HDFS导出MySQL。首先要安装配置好SqoopMySQL,然后进行如下操作: 1. 在Hadoop将需要导出数据存储到HDFS; 2. 执行Sqoop命令从HDFS数据导出MySQL; 3. 指定导出数据的表名和目标MySQL数据库; 4. 在MySQL确认数据已经成功导入。 下面是具体的操作步骤: 1. 在Hadoop将需要导出数据存储到HDFS。假设我们需要导出数据在Hadoop的/user/hadoop/input目录,可以使用以下命令将数据存储到HDFS: ``` hadoop fs -put [本地目录] [HDFS目录] ``` 2. 执行Sqoop命令从HDFS数据导出MySQL。下面是一个示例Sqoop命令: ``` sqoop export --connect jdbc:mysql://localhost/test --username root --password root --table [目标表名] --export-dir [HDFS目录] ``` 其,--connect指定MySQL的连接地址、--username指定登录MySQL的用户名、--password指定登录MySQL的密码、--table指定导出的目标表名、--export-dir指定导出数据的HDFS目录。 3. 在MySQL确认数据已经成功导入。可以使用以下命令进行查询: ``` select * from [目标表名] ``` 综上所述,Sqoop可以将Hadoop数据快速方便地导出到关系型数据,为企业提供了数据分析和业务应用上的便利。需要注意的是,使用Sqoop导出数据要配置好数据的格式和存储方式,以确保数据的完整性和一致性。 ### 回答3: Sqoop 是一个可用于将 Hadoop 与关系型数据库结合使用的工具。它可以将关系型数据存储的数据通过 MapReduce数据转移到 Hadoop 的分布式文件系统 HDFS 以及反向操作(从 HDFS 将数据转移到关系型数据)。Sqoop 具有以下特点: 1. 速度快:Sqoop 向关系型数据库发出的查询语句是高效的,并能够并行地将数据从关系型数据导出和导入到 Hadoop 。 2. 数据完整性:Sqoop 按照关系型数据的表结构,直接将数据导出和导入 Hadoop,因此数据完整性较高。 3. 易于使用Sqoop 操作简单易懂,可以通过使用命令行工具或 Sqoop 界面轻松地导入和导出大量数据。 将数据从 HDFS 导出MySQL ,可以通过以下步骤完成: 1. 在 Sqoop 创建连接:可以通过以下方式创建一个到 MySQL 数据库的连接: sqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable 2. 定义导出数据:可以使用以下命令来定义要导出数据sqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --columns col1,col2,col3 \ --where "col1 > 100" 其,“columns”参数允许您指定要导出的列,而“where”参数允许您指定从源表选择要导出的行。 3. 导出数据到 HDFS:使用以下命令将数据导出到 HDFS: sqoop import \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --columns col1,col2,col3 \ --where "col1 > 100" \ --target-dir /user/hadoop/mydata 其,“target-dir”参数将数据导出到 HDFS 的目录。 4. 将数据从 HDFS 导入 MySQL使用以下命令将数据从 HDFS 导入到 MySQL sqoop export \ --connect jdbc:mysql://localhost:3306/mydatabase \ --username root \ --password password \ --table mytable \ --export-dir /user/hadoop/mydata 其,“export-dir”参数指定导入的数据所在的 HDFS 目录。 以上是将数据从 HDFS 导出MySQL 的基本步骤。Sqoop 可以使用其他参数和选项进行更复杂的操作,可以根据需要自由配置。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值