sqoop的上手操作
1.sqoop安装调试
1, 下载并解压
1)下载地址:http://mirrors.hust.edu.cn/apache/sqoop/1.4.6/
2)上传安装包sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz到hadoop12的/opt/soft路径中
3)解压sqoop安装包到指定目录,如:
[xian@hadoop12 software]$ tar -zxf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz -C /opt/app/
4)解压sqoop安装包到指定目录,如:
[xian@hadoop12 app]$ mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha/ sqoop
注意是装好zk和MySQL,hive,hadoop集群的
2,修改配置文件
- 进入到/opt/app/sqoop/conf目录,重命名配置文件
[xian@hadoop12 conf]$ mv sqoop-env-template.sh sqoop-env.sh - 修改配置文件
[xian@hadoop12 conf]$ vim sqoop-env.sh
增加如下内容
export HADOOP_COMMON_HOME=/opt/app/hadoop-3.1.3
export HADOOP_MAPRED_HOME=/opt/app/hadoop-3.1.3
export HIVE_HOME=/opt/app/hive
export ZOOKEEPER_HOME=/opt/app/zookeeper-3.5.7
export ZOOCFGDIR=/opt/app/zookeeper-3.5.7/conf
3 拷贝JDBC驱动
1)将mysql-connector-java-5.1.48.jar 上传到/opt/soft路径
2)进入到/opt/soft/路径,拷贝jdbc驱动到sqoop的lib目录下。
[xian@hadoop12 software]$ cp mysql-connector-java-5.1.48.jar /opt/app/sqoop/lib/
4 验证Sqoop
我们可以通过某一个command来验证sqoop配置是否正确:
[xian@hadoop12 sqoop]$ bin/sqoop help
出现一些Warning警告(警告信息已省略),并伴随着帮助命令的输出:
Available commands:
codegen Generate code to interact with database records
create-hive-table Import a table definition into Hive
eval Evaluate a SQL statement and display the results
export Export an HDFS directory to a database table
help List available commands
…
5 测试Sqoop是否能够成功连接数据库
[xian@hadoop12 sqoop]$ bin/sqoop list-databases --connect jdbc:mysql://hadoop12:3306/ --username root --password 123456
出现如下输出:
information_schema
metastore
mysql
oozie
performance_schema
2.介绍
2.1 同步策略
数据同步策略的类型包括:全量表、增量表、新增及变化表、特殊表
- 全量表:存储完整的数据。
- 增量表:存储新增加的数据。
- 新增及变化表:存储新增加的数据和变化的数据。
- 特殊表:只需要存储一次。
2.2 全量同步,以下以电商为例:
2.3 增量同步
2.4 新增
2.5 特殊
某些特殊的维度表,可不必遵循上述同步策略。
1)客观世界维度
没变化的客观世界的维度(比如性别,地区)可只存固定值。
2)日期维度
日期维度可以一次性导入一年或若干年的数据。
3)地区维度
省份表、地区表
3.使用
- 简单脚本的使用:
1)进入家目录/script/ 编写脚本
#! /bin/bash
sqoop=/opt/app/sqoop/bin/sqoop
if [ -n "$2" ] ;then
do_date=$2
else
do_date=`date -d '-1 day' +%F`
fi
import_data(){
$sqoop import \
--connect jdbc:mysql://hadoop12:3306/mall \
--username root \
--password 123456 \
--target-dir /origin_data/mall/db/$1/$do_date \
--delete-target-dir \
--query "$2 and \$CONDITIONS" \
--num-mappers 1 \
--fields-terminated-by '\t' \
--compress \
--compression-codec lzop \
--null-string '\\N' \
--null-non-string '\\N'
hadoop jar /opt/app/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /origin_data/mall/db/$1/$do_date
}
import_order_info(){
import_data order_info "select
id,
final_total_amount,
order_status,
user_id,
out_trade_no,
create_time,
operate_time,
province_id,
benefit_amount,
original_amount
from order_info
where (date_format(create_time,'%Y-%m-%d')='$do_date'
or date_format(operate_time,'%Y-%m-%d')='$do_date')"
}
提示1:
[ -n 变量值 ] 判断变量的值,是否为空
– 变量的值,非空,返回true
– 变量的值,为空,返回false
提示2:
查看date命令的使用,[xian@hadoop12 ~]$ date --help
2)修改脚本权限
[xian@hadoop12 bin]$ chmod 777 mysql_to_hdfs.sh
3)初次导入
[xian@hadoop12 bin]$ mysql_to_hdfs.sh first 2021-05-31
- 总结
Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
在导出数据时采用–input-null-string和–input-null-non-string两个参数。
导入数据时采用–null-string和–null-non-string。
即将进入新阶段,加油