sqoop安装和简单使用

1 简介:

a) SQOOP是用于对数据进行导入导出的。
    (1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
    (2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中

b) 官网地址 http://sqoop.apache.org/

2 安装:

// 解压和重命名
[root@master local]# tar -zxvf sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz 
[root@master local]# mv sqoop-1.4.3.bin__hadoop-1.0.0 sqoop
// 设置环境变量
[root@master bin]# vi /etc/profile
export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export HIVE_HOME=/usr/local/hive
export ZK_HOME=/usr/local/zk
export SQOOP_HOME=/usr/local/sqoop
export PATH=.:$SQOOP_HOME/bin:$ZK_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
[root@master bin]# source /etc/profile


修改 sqoop/conf/sqoop-env.sh配置文件:

将 export HADOOP_COMMON_HOME=你的hadoop安装根目录
export HADOOP_MAPRED_HOME=你的hadoop安装根目录






// 查看sqoop命令帮助
[root@master local]# sqoop help
Warning: $HADOOP_HOME is deprecated.

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  // 将hdfs数据导出到数据库中
  help               List available commands
  import             Import a table from a database to HDFS // 将数据库中表的数据导入到hdfs中
  import-all-tables  Import tables from a database 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.
[root@master local]# 

3 把数据从mysql导入到hdfs(默认是/user/<username>)中:

// 给sqoop拷贝mysql-connector-java-5.1.10.jar
[root@master lib]# cp mysql-connector-java-5.1.10.jar /usr/local/sqoop/lib
// 将库hive_cr00 表TBLS 数据导出到hdfs中
[root@master local]#sqoop import --connect jdbc:mysql://master:3306/hive_cr00  --username root --password admin --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1
 解释如下:
  sqoop import --connect jdbc:mysql://hadoop0:3306/hive(数据库名)
  --username root --password admin --table TBLS(连接的表名)
  --fields-terminated-by '\t'(导入hdfs后数据用/t间隔)
  --null-string '**'  如果string为null则导出到hdfs后用**表示
  -m 1   默认导出用4个map任务执行 这里指定只用一个map任务,节省资源
  --append  表示追加写入hdfs中
  --hive-import   表示导入到hive中

导出后的样子为:



 

 

针对数据表中数据增加插入hdfs中写法:

上述命令表示全量导入,即使使用append字段,也仅仅是在/user/<username>/下将再次导入的全量数据在增加一个hdfs文件来存放而已,
现在仅仅想将数据表中增加的字段导入到hdfs中,即再次产生的hdfs文件内仅仅是数据表新增的内容,而非表中所有数据:
参考链接: 官网 http://sqoop.apache.org/docs/1.4.3/SqoopUserGuide.html#_incremental_imports
 sqoop import --connect jdbc:mysql://master:3306/hive  --username root --password admin --table TBLS --fields-terminated-by '\t'  
 --null-string '**'  -m 1 --append  
 --check-column 'TBL_ID'   追加插入时,需要检查的列TBL_ID
 --incremental append      在追加的时候 执行检验
 --last-value 6            上次追加后 TBL_ID的最后一个值为6

[root@master bin]# sqoop import --connect jdbc:mysql://master:3306/hive_cr00   --username root --password admin --table TBLS --fields-terminated-by '\t'  --null-string '**'  -m 1 --append    --check-column 'TBL_ID' --incremental append --last-value 15
结果:
14/12/29 01:28:37 INFO tool.ImportTool: No new rows detected since last import.

4 把数据从hdfs导出到mysql中:

在mysql test库中创建表sqoontable,字段 id(varchar(60)),name(varchar(60))


在hdfs中准备数据如下:
[root@master data]# hadoop fs -text /ids/sqoopdata
Warning: $HADOOP_HOME is deprecated.

hello;you
hello;me
hello;30

执行命令,导出是可以重复执行的,会不断向数据表插入字段
sqoop export --connect jdbc:mysql://master:3306/test  --username root --password admin --table sqoontable --fields-terminated-by ';' --export-dir '/ids'

解释如下:
sqoop export --connect jdbc:mysql://master:3306/test --username root --password admin 连接数据库 test
--table sqoontable 要将hdfs数据导入到表名称 sqoontable
--fields-terminated-by ';' 
--export-dir '/ids' hdfs数据来源在文件夹 /ids下  也可以具体指定  eg: --export-dir '/ids/sqoopdata'
   5 设置为作业,运行作业
sqoop job --create myjob4 -- export --connect jdbc:mysql://master:3306/test  --username root --password admin --table sqoontable --fields-terminated-by ';' --export-dir '/ids/sqoopdata'   
sqoop job --exec myjob4   在执行的时候,跳出 password: 此时输入mysql链接密码即可执行
如果要去掉密码,请看官网 http://sqoop.apache.org/docs/1.4.3/SqoopUserGuide.html#_saved_jobs_and_passwords
主要在 导入/导出命令上增加  --create job名称 -- 即可

查看作业列表:
[root@master bin]# sqoop job --list
删除作业:
[root@master bin]# sqoop job --delete myjob(作业名称)
  6 导入导出和事务 导入导出的事务是以Mapper任务为单位,启动一个mapper任务,就有一个事务,启动4个mapper任务,则有四个事务。  

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2170945