本人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/路径下得此包拷贝到这个路径里 4. 重命名 $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文件添加 <property> <name>mapreduce.jobhistory.address</name>
<value>hadoop3:10020</value>
</property>
<property> <name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop3:19888</value>
</property>

测试命令: sqoop -version Sqoop list-databases -connection jdbc:mysql://hadoop1:3306/ -username root -password root

到此处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