大数据之Sqoop的学习

Sqoop的概念和功能

sqoop是实现hadoop与关系型数据库(RDBMS)之间的数据迁移工具。通过sqoop可以很方便的将RDBMS的数据和hdfs、hbase、hive上的数据进行相互导入导出。

Sqoop的安装

sqoop的安装配置过程

  1. 下载sqoop的安装包
  2. 将sqoop的安装包解压
  3. 配置环境变量
    运行命令行
    sudo gedit /etc/profile
    把下面的命令写入profile文件中
    export SQOOP_HOME=/home/hadoop/sqoop-1.4.6为sqoop压缩包解压以后的文件
    export PATH=$PATH:$SQOOP_HOME/bin
  4. 更新环境变量的值,使其生效,在命令行中输入
    source /etc/profile
  5. 配置$SQOOP_HOME/conf/sqoop-env.sh
    将HADOOP_COMMON_HOME和HADOOP_MAPPED_HOME设置为hadoop文件的位置
  6. 因为sqoop是hadoop与关系型数据库之间的数据交换,所以需要使用相关数据的jar包,这儿我们用的是mysql,所以需要下载mysql的链接jar包,然后放在sqoop的家目录下的lib目录下。下载链接:mysql-connector-java-5.1.32-bin.jar
    命令行中运行下面的命令,添加jar包
    mv mysql-connector-java-5.1.32-bin.jar /usr/local/sqoop-1.4.6.bin_hadoop-2.0.4-alpha.tar.gz/lib/
  7. 安装完成后简单验证(显示所有数据库)
    sqoop list-databases --connect jdbc:mysql://master:3306/ --username root --password 123456
  8. 如出现如下错误,修改mysql配置文件 #bind-address=127.0.0.1

sqoop的使用

  1. 利用sqoop将数据从mysql中导入到hdfs现在数据库中建立一个employee的表,字段有id,name,age,place,entry_time,position
    ,然后再填充一些数据。
  2. 接下来开始导入数据到hdfs,使用命令行指令如下:
    sqoop import --connect jdbc:mysql://master:3306/liu --username root --password 123456 --table employees --target-dir /input/sqoop/sqoop_employees -m 1
    sqoop import --connect jdbc:mysql://master:3306/liu --username root --table t1 -m 1 --target-dir /input/sqoop/sqoop_t2
    前面的是全表导入,还可以增量导入,增量导入有两种模式,分别是append模式和lastmodified模式,分别针对表的insert操作和update操作做的增量导入。
    Sqoop导入数据的时候也可以使用—query 使用sql语句将查询出来的数据导入到hadoop中
    sqoop import --connect jdbc:mysql://115.29.52.14:3306/douban_movie --username shawn --password zhangHAO8 --query "select * from rating where \$CONDITIONS limit 10" --target-dir hdfs://Fedora:9000/Movie_Recommend/input1 -m 1
  3. 利用sqoop导入数据到hive表只需要加上—hive-import 这个参数进行导入即可。但是首先要启动hive-server。
  4. .导入数据到hbase与前面的导入类似,导入到hbase中需要注意的是需要指定hbase的行键,如果表不存在的话就需要添加 –hbase-create-table 这个参数。
  5. 将hdfs上的数据导入到关系型数据库中。使用sqoop export操作,与 sqoop import 操作很类似。不过,导入关系型数据库中时,表必须存在,并且表的字段类型需要匹配。使用—input-fields-terminated-by 界定字段分割符,使用—input-lines-terminated-by 界定行分隔符。使用—columns 指定导入数据格式