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)

 

posted @ 2021-06-30 16:15  超级无敌小剑  阅读(142)  评论(0编辑  收藏  举报