安装
1、安装Sqoop的前提是已经具备Java和Hadoop的环境。
2、下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/ ,下载后上传到home目录下
3、解压sqoop安装包到指定目录
#解压 tar -xvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt #进入到解压目录下 cd /opt #重命名 mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz sqoop-1.4.6
4、配置环境变量,方便命令行使用
5、修改配置文件
vim /opt/sqoop-1.4.6/conf/sqoop-env.sh 添加入 export HADOOP_COMMON_HOME=/opt/hadoop-2.6.5 export HADOOP_MAPRED_HOME=/opt/hadoop-2.6.5 export HIVE_HOME=/opt/hive-1.2.1 export ZOOKEEPER_HOME=/opt/zk/zookeeper-3.4.6 export ZOOCFGDIR=/opt/zk/zookeeper-3.4.6 export HBASE_HOME=/opt/hbase0.98
6、将mysql驱动包放到sqoop的lib目录下
cp ~/mysql-connector-java-5.1.10-bin.jar /opt/sqoop-1.4.6/lib
7、验证Sqoop
报警高没关系,一般时兼容性问题
sqoop help
或者
#连接mysql数据库,打印所有database sqoop list-databases --connect jdbc:mysql://node1:3306/ --username root --password 123456
Mysql导入到HDFS
1、全表导入
sqoop import \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --table mysqoop \ --target-dir /user/test_sqoop \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t"
--table 导入的mysql中的表名
--target-dir 导入的数据在hdsf的存储路径
--delete-target-dir 如果目录存在,则删除重新自动创建后导入数据;如果不加该参数,则是追加数据
--num-mappers 申请的mappers任务的个数来处理数据导入
--fields-terminated-by 从mysql中查出的数据每个字段以指定分隔符取存储到hdfs中
2、自定义SQL导入
sqoop import \ --connect jdbc:mysql://hadoop102:3306/test_sqoop \ --username root \ --password 123456 \ --target-dir /user/test_sqoop \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --query 'select name,sex from mysqoop where id <=1 and $CONDITIONS;'
提示:must contain '$CONDITIONS' in WHERE clause.
如果query后使用的是双引号,则$CONDITIONS前必须加转移符,防止shell识别为自己的变量。
$CONDITIONS用于多个num-mapper执行导入任务时,保证查询数据和hdfs中导入的数据完成后,数据的顺序是一致的
3、导入指定列
import \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --target-dir /user/test_sqoop \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --columns id,sex \ --table mysqoop
4、使用sqoop关键字筛选查询导入数据
sqoop import \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --target-dir /user/test_sqoop \ --delete-target-dir \ --num-mappers 1 \ --fields-terminated-by "\t" \ --table mysqoop \ --where "id=1"
Mysql导入Hive
sqoop import \
--connect jdbc:mysql://node1:3306/test_sqoop \
--username root \
--password 123456 \
--table mysqoop \
--num-mappers 1 \
--hive-import \
--fields-terminated-by "\t" \
--hive-overwrite \
--hive-table mysqoop_hive
提示:该过程分为两步,第一步将数据导入到HDFS,第二步将导入到HDFS的数据迁移到Hive仓库,第一步默认的临时目录是/user/dongge/表名
重点:依照提示中的内容,我们可以现在hive中创建外部表,之后通过sqoop将mysql中的数据导入到刚刚创建的hive表在hdfs中对应的目录下,这样就省略了一步数据移动的过程
Mysql导入HBase
sqoop import \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --table mysqoop \ --columns "id,name,sex" \ --column-family "info" \ --hbase-create-table \ --hbase-row-key "id" \ --hbase-table "mysqoop_hbase" \ --num-mappers 1 \ --split-by id
提示:sqoop1.4.6只支持HBase1.0.1之前的版本的自动创建HBase表的功能
解决方案:手动创建HBase表
Hive/HDFS导出到Mysql ---->两个导出方式一样
在Sqoop中,“导出”概念指:从大数据集群(HDFS,HIVE,HBASE)向非大数据集群(RDBMS)中传输数据,叫做:导出,即使用export关键字。
sqoop export \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --table mysqoop \ --num-mappers 1 \ --export-dir /user/hive/warehouse/mysqoop_hive \ --input-fields-terminated-by "\t"
提示:Mysql中如果表不存在,不会自动创建
脚本打包
#在sqoop目录下,新建路径 mkdir opt #在opt下创建一个sqoop执行文件 touch opt/job_HDFS2RDBMS.opt #编写脚本 vim job_HDFS2RDBMS.opt
shell脚本内容如下
export \ --connect jdbc:mysql://node1:3306/test_sqoop \ --username root \ --password 123456 \ --table mysqoop \ --num-mappers 1 \ --export-dir /user/hive/warehouse/mysqoop_hive \ --input-fields-terminated-by "\t"
执行脚本
/sqoop --options-file opt/job_HDFS2RDBMS.opt