大数据同步工具sqoop的上手操作

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,修改配置文件

  1. 进入到/opt/app/sqoop/conf目录,重命名配置文件
    [xian@hadoop12 conf]$ mv sqoop-env-template.sh sqoop-env.sh
  2. 修改配置文件
    [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 同步策略
数据同步策略的类型包括:全量表、增量表、新增及变化表、特殊表

  1. 全量表:存储完整的数据。
  2. 增量表:存储新增加的数据。
  3. 新增及变化表:存储新增加的数据和变化的数据。
  4. 特殊表:只需要存储一次。

2.2 全量同步,以下以电商为例:
大数据同步工具sqoop的上手操作

2.3 增量同步
大数据同步工具sqoop的上手操作

2.4 新增
大数据同步工具sqoop的上手操作

2.5 特殊
某些特殊的维度表,可不必遵循上述同步策略。
1)客观世界维度
没变化的客观世界的维度(比如性别,地区)可只存固定值。
2)日期维度
日期维度可以一次性导入一年或若干年的数据。
3)地区维度
省份表、地区表

3.使用

  1. 简单脚本的使用:
    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

  1. 总结

Hive中的Null在底层是以“\N”来存储,而MySQL中的Null在底层就是Null,为了保证数据两端的一致性。
在导出数据时采用–input-null-string和–input-null-non-string两个参数。
导入数据时采用–null-string和–null-non-string。

即将进入新阶段,加油

上一篇:使用 sqoop从MySQL增量导出数据到hive


下一篇:知识点整理:Sqoop