一、Sqoop简介[1.4.6版本] ------------------------------------------------------------ 1.RDBMS 和 HDFS之间进行数据导入导出的工具 2.将导入或导出命令翻译成 MapReduce 程序来实现 在翻译出的 MapReduce 中主要是对 InputFormat 和 OutputFormat 进行定制 3.sqoop就是一个工具, 只需要在一个节点上进行安装即可。 二、Sqoop的安装和配置 --------------------------------------------------------------- 1.下载1.4.6版本(1.997版本BUG太多) 2.tar开,配置环境变量 SQOOP_HOME=/soft/sqoop ... 3.配置sqoop/conf/sqoop-env.sh $> cd $SQOOP_HOME/conf $> cp sqoop-env-template.sh sqoop-env.sh $> nano sqoop-env.sh 添加如下内容 export HADOOP_COMMON_HOME=/soft/hadoop export HADOOP_MAPRED_HOME=/soft/hadoop export HBASE_HOME=/soft/hbase export HIVE_HOME=/soft/hive export ZOOCFGDIR=/soft/zookeeper/conf 4.复制mysql驱动到/soft/sqoop/lib 复制jar包到sqoop/tools/lib下 $> cp mysql-connector-java-5.1.17.jar /soft/sqoop/lib/ 5.验证sqoop的安装 $> sqoop-version 6.查看帮助 $> sqoop help $> sqoop help import 三、MySQL数据的导入导出到HDFS --------------------------------------------------- 1.将MySQL中的单个表导入到HDFS中 $ sqoop import \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username mysql \ --password mysql \ --table mytable \ --m 1 \ --target-dir /data/sqoop/expdata \ --where "id > 1" \ --incremental append \ --check-column id \ --last value 1205 \ 2.将MySQL指定库中的所有表导入到HDFS中[不指定表名,直到导出到hdfs根目录下] $ sqoop import-all-tables \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username mysql \ --password mysql \ 3.将HDFS的表导出到MySQL a.MySql中创建相似的表 mysql> create table mytable_bak like mytable; b.导出 $> sqoop export \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --username mysql \ --password mysql \ --table mytable_bak \ --export-dir /data/sqoop/expdata 四、MySQL数据导入到Hive -------------------------------------------------------- 1.导入--- 将MySQL中mydata库下的mytable_bak表,导入到Hive的mydb2.mytable_bak1中 $> sqoop import \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username mysql \ --password mysql \ --table mytable_bak \ --hive-import \ --hive-overwrite \ --hive-table mydb2.mytable_bak1 \ 五、MySQL数据导入到HBase ------------------------------------------------------------ 1.导入--将MySQL中mydata库下的mytable_bak表,导入到Hbase的mytable_bak1中[注意先后顺序,而且ns1:mytable_bak1,用的是: ] sqoop import \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username 'mysql' \ --password 'mysql' \ --table 'mytable_bak' \ --hbase-table 'ns1:mytable_bak1' \ --hbase-row-key 'id' \ --column-family 'f1' \ 六、Sqoop Job -- 导入导出过程的封装,方便以后导入导出 ------------------------------------------------------------ 1.创建作业 sqoop job --create myjob -- import \ [下面就是之前的导入语句] --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username 'mysql' \ --password 'mysql' \ --table 'mytable_bak' \ --hbase-table 'ns1:mytable_bak1' \ --hbase-row-key 'id' \ --column-family 'f1' \ 2.查看创建的作业 sqoop job --list sqoop job --show myjob 3.启动作业 sqoop job --exec myjob 4.删除作业 sqoop job --delete myjob 七、增量导入 --------------------------------------------------------- 1.参数 --incremental //增量类型,append/lastmodified --check-column //指定检查字段,不能为varchar --last value //之前导入的最大值 2.增量导入id 大于55的数据 sqoop import \ --connect jdbc:mysql://192.168.43.1:3306/mydata \ --driver com.mysql.jdbc.Driver \ --username 'mysql' \ --password 'mysql' \ --table 'mytable_bak' \ --hbase-table 'ns1:mytable_bak1' \ --hbase-row-key 'id' \ --column-family 'f1' \ --incremental append \ --check-column id \ --last-value 5 \