企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
下面都使用MySQL为例,在MySQL和hadoop之间进行数据的导入和导出。 所有的sqoop命令都是在Linux Shell中执行。<br/> **你可以输入`sqoop import --help`获取sqoop import命令帮助** <hr/> ```sql [root@hadoop101 /]# sqoop import --help Common arguments: --connect <jdbc-uri> Specify JDBC ...... ``` <br/> **基本导入语句** <hr/> ```sql # 使用sqoop-import也可以,它是sqoop import的别名 # \是转义字符,是为了方便在Linux中换行;它的左边要留一个空格,右边不能存在空格 # --connect mysql数据库地址 # --driver mysql驱动器 # --table mysql中的数据表 # --username mysql的登录名 # --password mysql的登录密码 # --target-dir 要将数据导入到哪个hdfs目录上。如果目录不存在则自动创建,已经存在则报错 # -m 3 Map的数量,指定为3将会在/data/sqoop_db/customers/生成3个part-m-*文件 # 上面指定的参数与顺序无关 sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --driver com.mysql.jdbc.Driver \ --table customers \ --username root \ --password 123456 \ --target-dir /data/sqoop_db/customers \ -m 3 ``` 生成3个part-m-*文件 ![](https://img.kancloud.cn/f9/5f/f95f4a03189639c0e4bc96b06bf14e32_1470x306.png) <br/> **通过where语句过滤导入表** <hr/> ```sql # --where # --delete-target-dir 如果 --target-dir 已经存在则删除 sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --driver com.mysql.jdbc.Driver \ --table orders \ --where "order_id<500" \ --username root \ --password 123456 \ --delete-target-dir \ --target-dir /data/sqoop_db/orders \ -m 3 ``` <br/> **通过columns过滤导入表** <hr/> ```sql # --columns 只导入在这里指定的列 sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --driver com.mysql.jdbc.Driver \ --table orders \ --columns "order_id,order_date,order_customer_id" \ --username root \ --password 123456 \ --delete-target-dir \ --target-dir /data/sqoop_db/orders2 \ -m 3 ``` <br/> **使用query方式导入** <hr/> ```sql # --query 只导入符合这里条件的数据 # 当使用where语句时必须添加 and \$CONDITIONS,防止Linux Shell识别为它的变量 # --split-by 指定用于分割的列,使用--query必须使用--split-by sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --driver com.mysql.jdbc.Driver \ --query "select * from orders where order_status!='CLOSED' and \$CONDITIONS" \ --split-by order_status \ --username root \ --password 123456 \ --delete-target-dir \ --target-dir /data/sqoop_db/orders3 \ -m 3 ``` <br/> **增量方式导入数据** <hr/> ```sql # --incremental append 增量导入,追加数据至已经存在的hdfs数据集上 # --incremental lastmodified 可追加更新的数据 # --check-column 指定递增的列 # --last-value 指定上一次导入的最大值 sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --driver com.mysql.jdbc.Driver \ --table orders \ --username root \ --password 123456 \ --incremental append \ --check-column order_date \ --last-value '2014-04-15' \ --target-dir /data/sqoop_db/orders \ -m 3 ``` 在/data/sqoop_db/orders目录下原本有3个part-m-*文件。 ![](https://img.kancloud.cn/fd/5e/fd5e21cc0a31e22027fd81562c88195a_1472x318.png) 进行增量导入后,再追加3个文件而且这三个新增的文件数据从2014-04-15年开始,原有的3个文件数据基本不变。 ![](https://img.kancloud.cn/9f/e9/9fe9f11ca492fd426d7333bb95d2beb2_1459x441.png) <br/> **sqoop job命令** <hr/> 相对于sqoop import就是多了一个步骤,sqoop job就是新创建一个job,然后再执行job;而sqoop import是直接执行。 ```sql -- 查看sqoop job有哪些参数 [root@hadoop101 /]# sqoop job --help usage: sqoop job [GENERIC-ARGS] [JOB-ARGS] [-- [<tool-name>] [TOOL-ARGS]] Job management arguments: --create <job-id> 定义一个新的job --delete <job-id> 删除一个已有的job --exec <job-id> 执行一个已有的job --help Print usage instructions --list 列出所有job --meta-connect <jdbc-uri> Specify JDBC connect string for the metastore --show <job-id> Show the parameters for a saved job --verbose Print more information while working ``` (1)创建一个job: ```sql sqoop job \ --create job_orders -- import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --table orders \ --where "order_id<500" \ --username root \ --password 123456\ --delete-target-dir \ --target-dir /data/sqoop_db/order_job \ --m 3 [root@hadoop101 /]# sqoop job --list Available jobs: job_orders ``` (2)执行job: ```sql [root@hadoop101 /]# sqoop job --exec job_orders --输入的是你的mysql登录密码 Enter password: ``` <br/> **导入时指定文件格式** <hr/> ```sql [root@hadoop101 /]# sqoop import --help Import control arguments: --as-avrodatafile 导入数据为avro文件 --as-parquetfile 导入数据为parquet文件 --as-sequencefile 导入数据为sequence文件 --as-textfile 导入数据为text文件(默认) ``` 导入时指定为parquet文件: ```sql sqoop import \ --connect jdbc:mysql://hadoop101:3306/sqoop_db \ --table orders \ --username root \ --password 123456 \ --delete-target-dir \ --target-dir /data/sqoop_db/orders4 \ -m 3 \ --as-sequencefile ```