sqoop数据导⼊的常见问题及⼩结
本⽂⾸先是讲述sqoop的如何进⾏数据的导⼊和导出及其注意点,然后列举了sqoop和mysql在数据导⼊导出过程中的⼀些常见错误。sqoop安装:安装在⼀台CentOS节点上就可以了。
1.上传sqoop
2.安装和配置
在添加sqoop到环境变量
数据库连接驱动拷贝到$SQOOP_HOME/lib⾥
3.使⽤
第⼀类:数据库中的数据导⼊到HDFS上
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  --table trade_detail --columns 'id, account, income, expenses'
指定输出路径、指定数据分隔符怎么把照片做成视频
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  --table trade_detail --target-dir '/sqoop/td' --fields-terminated-by '\t'
注:--target-dir 指定导⼊的hdfs⽬录。
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  --table trade_detail --target-dir '/sqoop/td1' --fields-terminated-by '\t' -m 2
注:指定Map数量 -m
增加where条件, 注意:条件必须⽤引号引起来
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123  --table trade_detail --where 'id>3' --target-dir '/sqoop/td2'
增加query语句(使⽤ \ 将语句换⾏)
sqoop import --connect jdbc:mysql://192.168.1.10:3306/itcast --username root --password 123 \
--query 'SELECT * FROM trade_detail where id > 2 AND $CONDITIONS' --split-by trade_detail.id --target-dir '/sqoop/td3'
亚索符文
注意:如果使⽤--query这个命令的时候,需要注意的是where后⾯的参数,AND $CONDITIONS这个参数必须加上
⽽且存在单引号与双引号的区别,如果--query后⾯使⽤的是双引号,那么需要在$CONDITIONS前加上\即\$CONDITIONS
如果设置map数量为1个时即-m 1,不⽤加上--split-by ${lumn},否则需要加上。
如果没有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'
第⼆类:将HDFS上的数据导出到数据库中(不要忘记指定分隔符)
sqoop export --connect jdbc:mysql://192.168.8.120:3306/itcast --username root --password 123 --export-dir '/td3' --table td_bak -m 1 --fields-terminated-by ','
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上,可能会出现这样的报错:
ansaction.CannotCreateTransactionException: Could not open JDBC Connection for transaction; nested exception is
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库
100字美文摘抄第三句:查看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'.
这是因为表中没有申明主键。可参考博客:blog.csdn/keda8997110/article/details/8518010