Sqoop:
SQOOP是用于对数据进行导入导出的。
(1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中
(2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中
安装sqoop
1.解压sqoop
tar -zxvf sqoop-1.4.3.bin__hadoop-1.0.0.tar.gz
2.重命名
mv sqoop-1.4.3.bin__hadoop-1.0.0 sqoop
3.设置环境变量
vi /etc/profile
export SQOOP_HOME=/usr/local/sqoop
将$SQOOP_HOME/bin 添加到 PATH 中
source /etc/profile
完毕!
把mysql数据导入到hdfs或者hive中
我们主要使用的是sqoop脚本。
注:因为要连接mysql 所以需要jdbc驱动
把数据从mysql导入到hdfs(默认是/user/username)中
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t'
--null-string ‘**’ 表示对于null值使用**代替 默认使用NULL ‘--’不能使用,专有字符
Sqoop在导入时,使用4个MapReduce并行执行 ,可以指定一个如下:
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t' -m 1
hdfs不可以多次写入,解决办法:
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t' -m 1 --append
也可以导入到hive中,但前提是删除 /user/root/目录下内容:
hadoop fs -rmr /user/root/*
在执行导入后,会再次在/user/root下生成 sqoop文件
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t' -m 1 --append --hive-import
导入增量:
sqoop import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t' -m 1 --append --hive-import --check-column 'TBL_ID' --incremental append --last-value 6
避免每次麻烦,创建job:
sqoop job --create myjob -- import --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\t' -m 1 --append --hive-import --check-column 'TBL_ID' --incremental append --last-value 6
列出创建的job:
sqoop job --list
执行创建的job:
sqoop job --exec myjob (会提示让你输出mysql密码)
为了保存mysql密码,让其自动运行,要修改sqoop的配置文件sqoop-site.xml,让下面的内容生效:
<property>
<name>sqoop.metastore.client.record.password</name>
<value>true</value>
<description>If true, allow saved passwords in the metastore.
</description>
</property>
修改后,下次执行之前,要先删除以前未修改配置文件的的myjob:
sqoop job --delete myjob
把数据从hdfs导出到mysql中
导数据得事先在mysql中存在表
导出数据必须按目录导出,不能按文件导出
导出数据
sqoop export --connect jdbc:mysql://hadoop:3306/hive --username root --password admin --table ids --fields-terminated-by '\t' --export-dir'/ids'
导出可以重复进行,多次插入数据进入mysql中
注意:sqoop的导入导出事物是以Mapper任务为单位。