sqoop工具使用办法
sqoop底层没有reducer 只有n个mapper
--显示sqoop连接到的数据库列表
sqoop list-databases --connect jdbc:mysql://Ava01:3306 -username root -password 123456
--sqoop import data 导入库数据到HDFS
1)需求:将user_info表的数据导入到HDFS中的/user_info目录下
要求只需要导入id,login _name,nick _name,name 四个字段的值只需要导入id >=100并且id <=200的数据
sqoop import \
--connect jdbc:mysql://Ava01:3306/gmall \
--username root \
--password 123456 \
--table user_info \
--columns id ,login_name.nick_name,name \
--where "id >100 and id <200" \
--target-dir "/uer_info" \
--delete-target-dir \
--num-mappers 2 \
--split-by "id" \
--fields-terminated-by "\t" \
--启用压缩
--compress \
--使用的编码器 默认格式是gzip 使用lzop格式的
--compression-codec lzop \
-- 因为 Hive 使用字符串 \N 来表示 NULL 值 所以需要使用这个保证可以正确识别null \转义是个底层的java代码看的
--String类型的
--null-string '\\N'
--非String类型的
--null-non-string '\\N'
sqoop import \
--connect jdbc:mysql://Ava01:3306/gmall \
--username root \
--password 123456 \
--table user_info \
--columns id,login_name,nick_name,name \
--where "id >0 and id <100" \
--target-dir "/uer_info" \
--delete-target-dir \
--num-mappers 2 \
--split-by "id" \
--fields-terminated-by "\t"
2) 使用 -e,--query <statement>
--在 foo 表中插入一行
sqoop eval --connect jdbc:mysql://Ava01:3306/gmall \
-e "INSERT INTO foo VALUES(42, 'bar')"
--导入语句的结果 可以join
sqoop import \
--connect jdbc:mysql://Ava01:3306/gmall \
--username root \
--password 123456 \
--query "SELECT id ,login_name.nick_name,name FROM uer_info WHERE id >0 and id <100 and \$CONDITIONS'";
--target-dir "/uer_info" \
--delete-target-dir \
--num-mappers 2 \
--split-by "id" \
--fields-terminated-by "\t"
--使用脚本导入
--增量表 mysql_to_hdfs.sh
#获取账期
if [ -n $2 ];
then
day_id=$2
else day_id=`date -d '-1 day' +%F`
fi
#将sqoop命令封装成函数 传递参数是sql和上传到hdfs的文件夹
function import_data(){
sqoop import \
--connect jdbc:mysql://Ava01:3306/gmall \
--username root \
--password 123456 \
--query "$1 and \$CONDITIONS'";
--target-dir "$2" \
--delete-target-dir \
--num-mappers 2 \
--split-by "id" \
--fields-terminated-by "\t"
--compress \
--compression-codec lzop \
--null-string '\\N' \
--null-non-string '\\N'
}
--生成lzop文件的索引文件
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /table_data/$1/$day_id
}
#调用import_data函数 将数据导入 将这个也封装成函数
function import_user_info (){
import_data select * from user_info where id < 100 and creattime=$day_id /table_data/user_info/$day_id
}
function import_other_table(){
import_data select * from user_info where 1=1 /table_data/other_table_name/$day_id
}
#然后调用这些方法
case $1 in
"user_info")
import_user_info
;;
"other_table")
import_other_table
;;
"all")
传入所有的表导入
;;
exac
--全量表 mysql_to_hdfs_init.sh
#获取账期 导出那一天的全量数据 不通过day_id限制账期
if [ -n $2 ];
then
day_id=$2
else
echo "输入时间参数"
fi
function import_data(){
sqoop import \
--connect jdbc:mysql://Ava01:3306/gmall \
--username root \
--password 123456 \
--query "$1 and \$CONDITIONS'";
--target-dir "$2" \
--delete-target-dir \
--num-mappers 2 \
--split-by "id" \
--fields-terminated-by "\t"
--compress \
--compression-codec lzop \
--null-string '\\N' \
--null-non-string '\\N'
}
--生成lzop文件的索引文件
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /table_data/$1/$day_id
}
#调用import_data函数 将数据导入 将这个也封装成函数
function import_user_info (){
import_data select * from user_info /table_data/user_info/$day_id
}
function import_other_table(){
import_data select * from other_table_name /table_data/other_table_name/$day_id
}
#然后调用这些方法
case $1 in
"user_info")
import_user_info
;;
"other_table")
import_other_table
;;
"all")
传入所有的表导入
;;
exac
--sqoop export data 导出HDFS数据到库 (hive)