本文首先是讲述sqoop的如何进行数据的导入和导出及其注意点,然后列举了sqoop和mysql在数据导入导出过程中的一些常见错误。
sqoop安装:安装在一台CentOS节点上就可以了。
如果设置map数量为1个时即-m 1,不用加上--split-by ${tablename.column},否则需要加上。
如果没有id>2的条件,去掉“and”就可以。例:./sqoop import --connect jdbc:mysql://192.168.2.1:3306/test --username root --password 123456 --query 'select * from user where $CONDITIONS' -m 2 --target-dir /sqoop/td5 --split-by 'user.userId'
4.配置mysql远程连接( 授权法)
在MySQL Server端:
执行mysql 命令进入mysql 命令模式(mysql -u root -p ):
mysql> use mysql;
#这句话的意思 ,允许IP192.168.2.113(如果是%表示任何IP)的电脑 用root帐户 和密码(123456)来访问这个MySQL Server
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;mysql>FLUSH PRIVILEGES
格式:
grant 权限 on 数据库名.表名 to 用户@登录主机 identified by "用户密码" with grant option;
@ 后面是访问mysql的客户端ip地址(或是 主机名) % 代表任意的客户端,如果填写 localhost 为
本地访问(那此用户就不能远程访问该mysql数据库了)。
问题:1.如果mysql数据库是安装在windows上,可能会出现这样的报错:
org.springframework.transaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago.
这一般是因为你的windows防火墙开着的原因。关闭它就行。
2。如果你的mysql安装在Centos上,可能会报这样的错(如果你配置了mysql远程连接,就不会报这种错):
ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: null, message from server: "Host '192.168.2.113' is not allowed to connect to this MySQL server"
java.sql.SQLException: null, message from server: "Host '192.168.2.113' is not allowed to connect to this MySQL server
解决办法(改表法):
mysql -u root -p mysql>use mysql; mysql>select 'host' from user where user='root'; mysql>update user set host = '%' where user ='root'; (注:如果在执行update user set host = '%' where user ='root';出现错误提示
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' 则只需执行 flush privileges 即可)
mysql>flush privileges; mysql>select 'host' from user where user='root'; 第一句是以权限用户root登录 第二句:选择mysql库 第三句:查看mysql库中的user表的host值(即可进行连接访问的主机/IP名称) 第四句:修改host值(以通配符%的内容增加主机/IP地址),当然也可以直接增加IP地址 第五句:刷新MySQL的系统权限相关表 第六句:再重新查看user表时,有修改。。 重起mysql服务即可完成。3.如果出现这种报错:
ERROR tool.ImportTool: Error during import: No primary key could be found for table creater_user.popt_cas_redirect_his. Please specify one with --split-by or perform a sequential import with '-m 1'.
这是因为表中没有申明主键。可参考博客:http://blog.csdn.net/keda8997110/article/details/8518010