Sqoop(3)—— Mysql数据导入HDFS

Sqoop3)—— Mysql数据导入HDFS

  1. 官方文档

Sqoop导入导出的官方文档:

http://sqoop.apache.org/docs/1.4.7/index.html

http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html

  1. 执行Sqoop的两种方式

http://sqoop.apache.org/docs/1.4.7/SqoopUserGuide.html#_using_options_files_to_pass_arguments

Sqoop(3)—— Mysql数据导入HDFS

  1. 公共参数(Common arguments)

Sqoop(3)—— Mysql数据导入HDFS

--connect:JDBC连接字符串

--connectioni-manager:JDBC连接管理类

--driver:JDBC驱动类

--hadoop-mapred-home <dir>:如果系统环境变量中声明了HADOOP_HOME则可以不写这个参数

-P:在控制台输入密码

--password:JDBC连接关系型数据库的密码

--username:JDBC连接关系型数据库的用户名

  1. 导入控制参数

Sqoop(3)—— Mysql数据导入HDFS

  1. 示例

将mysql数据库中的内容导入到hdfs

  1. 集群规划与版本

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

         

  1. 启动集群

  1. 启动ZK

Sqoop(3)—— Mysql数据导入HDFS

Sqoop(3)—— Mysql数据导入HDFS

Sqoop(3)—— Mysql数据导入HDFS

  1. 启动HDFS

Sqoop(3)—— Mysql数据导入HDFS

  1. 启动yarn

Sqoop(3)—— Mysql数据导入HDFS

Sqoop(3)—— Mysql数据导入HDFS

  1. 启动mysql

Sqoop(3)—— Mysql数据导入HDFS

  1. 测试连接

使用list-databases工具展示mysql数据库列表。

Sqoop(3)—— Mysql数据导入HDFS

  1. 创建mysql数据表

创建一个表psn,作为源表,并向该表中存入一些数据。

Sqoop(3)—— Mysql数据导入HDFS

Sqoop(3)—— Mysql数据导入HDFS

  1. 导入命令

import

--connect

jdbc:mysql://faith-Fedora2:3306/test

--username

root

--password

Sqoop(3)—— Mysql数据导入HDFSSqoop(3)—— Mysql数据导入HDFSSqoop(3)—— Mysql数据导入HDFS

--as-textfile

--columns

id,name,msg

--table

psn

--delete-target-dir

--target-dir

/user/aith/sqoop/data

-m

4

将命令写入一个文本文件sqoop_options_file

Sqoop(3)—— Mysql数据导入HDFS

Sqoop(3)—— Mysql数据导入HDFS

  1. 执行命令

如果mysql上创建表的时候没有设置主键,会抛出下面的异常。

Sqoop(3)—— Mysql数据导入HDFS

这个异常是因为关系型数据库中的表没有主键造成的

(参考文章http://blog.****.net/holdbelief/article/details/79638463)

解决方案有两种:

方案一:给表添上主键

方案二:有些数据表无法设置主键,比如很多的监测记录数据,找不到唯一值,针对这种数据,我们可以根据上面的错误提示通过以下两个方法来解决:

  1. 将map的个数设置成1(Sqoop默认是4)
  2. 使用一个字段(需要是整型字段)作为分片的字段,使用—split-by指定分片字段。

Sqoop(3)—— Mysql数据导入HDFS

重新执行命令

Sqoop(3)—— Mysql数据导入HDFS

  1. 在Yarn的webUI上查看任务

http://faith-Kylin:8088

Sqoop(3)—— Mysql数据导入HDFS

  1. 在HDFS上查看

faith-Fedora:50070

Sqoop(3)—— Mysql数据导入HDFS

  1. 查看HDFS上面的数据

Sqoop(3)—— Mysql数据导入HDFS