本人vm上装的hadoop是2.7.7,hive是2.3.4 所以在此用的sqoop是 sqoop1.4.7_hadoop-2.6.0版本
1.解压安装包 , 解压命令: tar -xzvf sqoop-1.4.7.bin__hadoop-2.6.0.gz.tar
2.配置环境变量 , 命令: vi ~/.bashrc(此处是CentOS7)
加入参数
export SQOOP_HOME=/usr/local/java/sqoop-1.4.7.bin__hadoop-2.6.0
export PATH=$PATH:$SQOOP_HOME/bin
3.把mysql驱动包拷贝导 $SQOOP_HOME/lib下
如果$SQOOP_HOME/lib/下没有hive-common-2.3.4.jar包得话还需要把$HIVE_HOME/lib/路径下得此包拷贝到这个路径里

  1. 重命名 $SQOOP_HOME/conf/sqoop-env-template.sh
    命令: scp sqoop-env-template.sh sqoop-env.sh
    在sqoop-env.sh文件里可以配置hadoop,hive等的环境路径,由于我本机在bashrc中配置了此处我就没有配置

注意:
从hive导数据到mysql得时候要启动yarn得mr-jobhistory-daemon.sh日志服务,可以查看jobhistory
Hadoop,yarn-site.xml文件添加

mapreduce.jobhistory.address
hadoop3:10020


mapreduce.jobhistory.webapp.address
hadoop3:19888

测试命令: sqoop -version
Sqoop list-databases -connection jdbc:mysql://hadoop1:3306/ -username root -password root
sqoop安装及使用(浅谈)_第1张图片

到此处sqoop已经安装成功完成。下面编写文件开始测试导入数据
在mysql中建一个company数据库,数据库里建staff表,表有三个字段(id,name,sex其中id是自增主键)

  1. 从mysql往hdfs中导入全部数据,此处是用文件形式
    bin/sqoop import \ ---导入导出方式
    --connect jdbc:mysql://hadoop1:3306/company \ ---本地mysql的jdbc地址
    --username root \ ---mysql的用户名
    --password root \ ---mysql的密码
    --table staff \ ---mysql中表名
    --target-dir /sqoop/company \ ---导入时hdfs的临时文件路径
    --delete-target-dir \ ---导入完成后删除临时文件
    --num-mappers 1 \ ---导入时mappers数量
    --fields-terminated-by “|” ---导入hdfs时的分隔符

2.从mysql往hdfs中导入查询出来的数据
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--target-dir /sqoop/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by “|” \
--query ‘select name,sex from staff where id <=1 and $CONDITIONS;’
注意此处:$CONDITIONS 用查询语句后面必须加$CONDITIONS

3.从mysql 中往hdfs里导入 固定列的数据
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--target-dir /sqoop/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by “|” \
--columns id,sex \
--table staff

4.从mysql中往hdfs里导入筛选的数据
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--target-dir /sqoop/company \
--delete-target-dir \
--num-mappers 1 \
--fields-terminated-by “|” \
--table staff \
--where “id=1”

5.从mysql中导入数据到hive中
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--table staff \
--num-mappers 1 \
--hive-import \
--fields-terminated-by “|” \
--hive-overwrite \
--hive-table staff_hive

6.从hive中导出数据到mysql中,下面配置保存在toMysql文件里
bin/sqoop export \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--num-mappers 1 \
--columns id,name,sex \
--export-dir /user/hive/warehouse/staff_hive \
--table staff \
--input-fields-terminated-by |

执行文件命令: sqoop --options-file toMysql

6.hive分区表导入到mysql中(注意此处用的hive中的其他表,没有用对应mysql中的staff表)
export
--connect
jdbc:mysql://hadoop1:3306/zytest
--username
root
--password
root
-m
1
#--columns
#id,channel_id,class_code,handle_phone,business_id,business_name,reward,business_handle_time,month
--export-dir
/user/hive/warehouse/zytest.db/ywcj_total_reward_detail_test/month=201808
--table
ywcj_total_reward_detail_test1
--input-fields-terminated-by
|
--input-null-string
\N
--input-null-non-string
\N
--update-key
id
--update-mode
allowinsert
--hive-partition-key
month
--hive-partition-value
201808

7.从mysql导入到hbase中
bin/sqoop import \
--connect jdbc:mysql://hadoop1:3306/company \
--username root \
--password root \
--table staff \
--columns “id,name,sex” \
--columns-family “info” \
--hbase-create-table \
--hbase-row-key “id” \
--hbase-table “hbase_company” \
--num-mappers 1 \
--split-by id