Sqoop(3)—— Mysql数据导入HDFS
-
官方文档
Sqoop导入导出的官方文档:
http://sqoop.apache.org/docs/1.4.7/index.html
http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html
-
执行Sqoop的两种方式
http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_using_options_files_to_pass_arguments
-
公共参数(Common arguments)
--connect:JDBC连接字符串
--connectioni-manager:JDBC连接管理类
--driver:JDBC驱动类
--hadoop-mapred-home <dir>:如果系统环境变量中声明了HADOOP_HOME则可以不写这个参数
-P:在控制台输入密码
--password:JDBC连接关系型数据库的密码
--username:JDBC连接关系型数据库的用户名
-
导入控制参数
-
示例
将mysql数据库中的内容导入到hdfs
-
集群规划与版本
hadoop-2.6.5
sqoop-1.4.7.bin__hadoop-2.6.0
zookeeper-3.4.10
faith-Fedora | faith-Ubuntu | faith-openSUSE | faith-Kylin | faith-Mint | faith-Fedora2 | |
NN1(ZKFC1) | ✔ | |||||
NN2(ZKFC2) | ✔ | |||||
JN1 | ✔ | |||||
JN2 | ✔ | |||||
JN3 | ✔ | |||||
DN1(NM1) | ✔ | |||||
DN2(NM2) | ✔ | |||||
DN3(NM3) | ✔ | |||||
RS1 | ✔ | |||||
RS2 | ✔ | |||||
ZK1 | ✔ | |||||
ZK2 | ✔ | |||||
ZK3 | ✔ | |||||
SQOOP | ✔ | |||||
MYSQL | ✔ |
-
启动集群
-
启动ZK
-
启动HDFS
-
启动yarn
-
启动mysql
-
测试连接
使用list-databases工具展示mysql数据库列表。
-
创建mysql数据表
创建一个表psn,作为源表,并向该表中存入一些数据。
-
导入命令
import
--connect
jdbc:mysql://faith-Fedora2:3306/test
--username
root
--password
--as-textfile
--columns
id,name,msg
--table
psn
--delete-target-dir
--target-dir
/user/aith/sqoop/data
-m
4
将命令写入一个文本文件sqoop_options_file
-
执行命令
如果mysql上创建表的时候没有设置主键,会抛出下面的异常。
这个异常是因为关系型数据库中的表没有主键造成的
(参考文章http://blog.csdn.net/holdbelief/article/details/79638463)
解决方案有两种:
方案一:给表添上主键
方案二:有些数据表无法设置主键,比如很多的监测记录数据,找不到唯一值,针对这种数据,我们可以根据上面的错误提示通过以下两个方法来解决:
-
将map的个数设置成1(Sqoop默认是4)
-
使用一个字段(需要是整型字段)作为分片的字段,使用—split-by指定分片字段。
重新执行命令
-
在Yarn的webUI上查看任务
http://faith-Kylin:8088
-
在HDFS上查看
faith-Fedora:50070
-
查看HDFS上面的数据