大数据技术全面解读 sqoop入门
沉沙 2018-10-10 来源 : 阅读 1250 评论 0

摘要:本篇教程探讨了大数据技术全面解读 sqoop入门,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

本篇教程探讨了大数据技术全面解读 sqoop入门,希望阅读本篇文章以后大家有所收获,帮助大家对大数据技术的理解更加深入。

<

一、概述

  1.sqoop是什么

    从其官网://sqoop.apache.org/ 

      Apache Sqoop(TM) is a tool designed for efficiently transferring bulk data between Apache Hadoop and structured datastores such as relational databases

    中文来说,就是:

    sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。

      导入数据:MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统;

      导出数据:从Hadoop的文件系统中导出数据到关系数据库

    简而言之,sqoop是一个数据迁移工具!

  2.主要原理  

    将导入或导出命令翻译成mapreduce程序来实现

    在翻译出的mapreduce中主要是对inputformat和outputformat进行定制
二、安装与配置

    1.准备

      本地具备java与hadoop环境,下载sqoop,下载地址://archive.apache.org/dist/sqoop/1.4.6/

      // 这里的Alpha表示的是内测版

      将下载的sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz上传到服务器

    2.解压

[hadoop@mini1 ~]$ tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz 

    // 位置可以按照自己的习惯进行定义

[hadoop@mini1 ~]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop

 

    3.修改配置文件

[hadoop@mini1 ~]$ cd sqoop/
[hadoop@mini1 sqoop]$ cd conf/
[hadoop@mini1 conf]$ mv sqoop-env-template.sh sqoop-env.sh

    通过which/whereis 定位一下hadoop等目录

    打开 sqoop-env.sh,修改以下几项(打开注释,添加相关值):

export HADOOP_COMMON_HOME=/home/hadoop/apps/hadoop-2.6.4/ 
export HADOOP_MAPRED_HOME=/home/hadoop/apps/hadoop-2.6.4/
export HIVE_HOME=/home/hadoop/apps/hive-1.2.1

    4.加入Mysql的jdbc驱动包

      由于我们是向MySQL导数据,所以需要的是对应的驱动包到Lib目录(这里就直接从hive里面拿了)

 

[hadoop@mini1 sqoop]$ cp ~/apps/hive-1.2.1/lib/mysql-connector-java-5.1.42.jar ./lib/

 

    5.验证启动     

[hadoop@mini1 sqoop]$ bin/sqoop

    // 如果配置了环境变量,将可以直接通过sqoop启动

    6.查看帮助

[hadoop@mini1 sqoop]$ bin/sqoop help



usage: sqoop COMMAND [ARGS]

Available commands:
  codegen            Generate code to interact with database records
  create-hive-table  Import a table definition into Hive
  eval               Evaluate a SQL statement and display the results
  export             Export an HDFS directory to a database table
  help               List available commands
  import             Import a table from a database to HDFS
  import-all-tables  Import tables from a database to HDFS
  import-mainframe   Import datasets from a mainframe server to HDFS
  job                Work with saved jobs
  list-databases     List available databases on a server
  list-tables        List available tables in a database
  merge              Merge results of incremental imports
  metastore          Run a standalone Sqoop metastore
  version            Display version information

See 'sqoop help COMMAND' for information on a specific command.


三、sqoop数据导入

  “导入工具”导入单个表从RDBMS到HDFS。表中的每一行被视为HDFS的记录。所有记录都存储为文本文件的文本数据(或者Avro、sequence文件等二进制数据) 

  1.数据库导入HDFS

    1.语法

$ sqoop import (generic-args) (import-args) 

  // 完整参数,参考://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html#_literal_sqoop_import_literal

    2.示例


bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl \
--m 1



   -m,--num-mappers  Use n map tasks to import in parallel,其他完整参数,参考文档

   未指定--target-dir /user/sqoop/test1 则默认为/user/hadoop/表名,这里可以进行在HDFS上的查看:

[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl/part-m-00000

  2.导入关系表到Hive

    其实基本上是从数据库到hdfs,再Load到hive的表,不过这里可以一步到位了


bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl \
--target-dir /user/hadoop/girl2 \
--hive-import \
--m 1



 

   3.导入数据子集

    有时候只想导入数据表中的一部分数据,可以通过where来进行过滤筛选:

 


bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--where "id > 5" \
--target-dir /user/hadoop/girl3 \
--table girl \
--m 1



 

    当然,如果单纯where无法满足,可以使用自定义的query语句来筛选:——注意只要写了where则后面的 and \$CONDITIONS是死的,必须这么写!

 


bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--query "select * from girl where name='11' and id>6 and \$CONDITIONS" \
--target-dir /user/hadoop/girl3 \
--table girl \
--m 1



    也可以使用split by来指定切片字段,这样就结合--m参数分配了

--split-by id \
--m 1

    或者指定字段的分隔符,这样到HDFS就是这个分割符了。这样以后建表从hive映射就使用这个分隔符了:

--fields-terminated-by 

  4.增量导入 

    增量导入( Incremental Imports)是仅导入新添加的表中的行的技术。

    它需要添加‘incremental’, ‘check-column’, 和 ‘last-value’选项来执行增量导入


bin/sqoop import \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl --m 1 \
--target-dir /user/hadoop/girl4 \
--incremental append \
--check-column id \
--last-value 12



   // 如果不想一直因为已经存在target-dir而新建,可以使用参数delete-target-dir,这样就会自动删除已经存在的目录了!请选择性使用

  这样,targer-dir里面就是新增的数据了:

[hadoop@mini1 lib]$ hadoop fs -cat /user/hadoop/girl4/part-m-00000
13,22,aa
14,23,bb

 四、sqoop数据导出 

   1.从HDFS中导出

   将数据从HDFS导出到RDBMS数据库

  导出前,目标表必须存在于目标数据库中。

    默认操作是从将文件中的数据使用INSERT语句插入到表中

    更新模式下,是生成UPDATE语句更新表数据

   1.手动创建目标表

两种方法复制表结构:
1.create table B as select * from A where 1=2; 
或者: 
2.create table B like A;

  这里就复制上面的girl的表结构了

  2.执行导出命令


bin/sqoop export \
--connect jdbc:mysql://mini1:3306/test \
--username root \
--password Zcc170821# \
--table girl2 \
--export-dir /user/hadoop/girl/



  如果文件不是默认的,分隔符,则添加指定参数:

--fields-terminated-by '\t'

  2.sqoop作业

    sqoop也支持作业的形式

      --create创建

 

bin/sqoop job --create myimportjob -- import --connect jdbc:mysql://hdp-node-01:3306/test --username root --password root --table emp --m 1

 

      --list查看

$ sqoop job --list

      --show查看

$ sqoop job --show myjob

      --exec执行

$ sqoop job --exec myjob
它会显示下面的输出。
10/08/19 13:08:45 INFO tool.CodeGenTool: Beginning code generation 
...

    但是我们可以用shell脚本的方式来运行调度,所以这个意义并不是很大.    

本文由职坐标整理发布,学习更多的大数据技术相关知识,请关注职坐标大技术云计算大技术技术频道!

本文由 @沉沙 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程