安装:
下载链接:
wget http://mirrors.hust.edu.cn/apache/sqoop/1.4.7/sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
配置sqoop:
cd /usr/local/sqoop/conf
mv sqoop-env-template.sh sqoop-env.sh
修改一下两行参数:
export HADOOP_COMMON_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=/usr/local/hadoop
配置环境变量:
vim /etc/profile
export SQOOP_HOME=/usr/local/sqoop
export PATH=$PATH:$SQOOP_HOME/bin
source /etc/profile
验证:
sqoop help
下载mysql驱动:
下载链接:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
解压出来,将mysql-connector-java-5.1.47.jar移动到 /usr/local/sqoop/lib
测试:
一、从mysql导入数据到hdfs:
1、创建一个mysql表:
导入的数据文件链接:https://github.com/bbengfort/hadoop-fundamentals/raw/master/data/avgprice_kwh_state.zip
use test;
create table average_price_by_state (
year int not null,
state varchar(5) not null,
sector varchar(255),
residential decimal(10,2),
commercial decimal(10,2),
industrial decimal(10,2),
transportation decimal(10,2),
other decimal(10,2),
total decimal(10,2)
);
exit;
mycli -uroot -proot --local-infile=1
load data local infile
'/root/avgprice_kwh_state.csv'
into table average_price_by_state
fields terminated by ','
lines terminated by '\n' ignore 1 lines;
2、导出到hdfs:
sqoop import \
--connect jdbc:mysql://10.112.1.71:3306/test \
--username root \
--password root \
--table average_price_by_state \
-m 1 \
--null-string '**' \
--fields-terminated-by ',' \
--target-dir '/sqoop.db'
--append \
解释:
--null-string 表示将数据库中表字段为NULL的用“**”代替
-m1 指定map任务数为1,所以hdfs中只会出现一个文件
--append 表示执行一次语句,则将这个库导出一次,可连续导出多次,默认执行多次也只导出一份
--target-dir 指定导出的hdfs的目录,默认与数据库名相同
默认情况下,数据库一条记录不同字段以逗号分隔,存到hdfs文件中
二、从hdfs导入到mysql:
1、创建数据库表:
create table average_price_by_state_copy (
year int not null,
state varchar(5) not null,
sector varchar(255),
residential decimal(10,2),
commercial decimal(10,2),
industrial decimal(10,2),
transportation decimal(10,2),
other decimal(10,2),
total decimal(10,2)
) ;
2、执行导入程序
sqoop export \
-D sqooop.export.records.per.statement=100 \
--connect jdbc:mysql://10.112.1.71:3306/test \
--username root \
--password root \
--table average_price_by_state_copy \
--fields-terminated-by ',' \
--export-dir "/sqoop.db" \
--batch \
--update-mode allowinsert;
解释:
sqooop.export.records.per.statement=100 表示批处理,100条数据提交一次;
--batch 表示使用批量导出
--update-key uid表示主键为uid
--update-mode 表示如何更新表中的数据