大数据Sqoop

大数据课程第十天

Sqoop Hadoop的辅助工具 (CDH)
  1. Hadoop(CDH)

    1. ip 主机名 映射 防火墙 selinux  jdk  ssh 
    2. hadoop解压缩
    3. 修改hadoop相关配置文件
       hadoop-env.sh
       core-site.xml
       hdfs-site.xml
       mapred-site.xml
       yarn-site.xml
       slaves
    4. 解压缩cdh5.3.6-snappy-lib-natirve.tar.gz 替换 hadoop中的native文件的内容
       解决的是64操作系统兼容的问题
    5. 格式化
       bin/hdfs namenode -format
    6. 启动进程 4个进程
    
  2. Hive(CDH)

    1. 解压缩hive
    2. 修改hive_home/conf/hive-env.sh 
       hadoop_home
       hive_conf_dir
       hive-site.xml  修改metastore 预先安装mysql 
    3. 上传mysql驱动jar 
       chkconfig mysqld on  设置自启动
    4. hdfs 创建2个目录 /tmp  /user/hive/warehouse
    5. 启动hive
    
  3. Sqoop(CDH)

    1. 解压缩 sqoop 
    2. 配置 sqoop_home/conf
       sqoop-env.sh
       export HADOOP_COMMON_HOME=/opt/install/hadoop-2.5.0-cdh5.3.6
       export HADOOP_MAPRED_HOME=/opt/install/hadoop-2.5.0-cdh5.3.6
       export HIVE_HOME=/opt/install/hive-0.13.1-cdh5.3.6
    3. 导入驱动jar
    4. 测试
       bin/sqoop list-databases -connect jdbc:mysql://hadoop22:3306 -username root -password 123456
    
  4. Sqoop语法详解

    1. 语法格式

      1. 
      bin/sqoop list-databases -connect jdbc:mysql://hadoop22:3306 -username root -password 123456
      
      2. 推荐
      bin/sqoop list-databases \
      --connect \
      jdbc:mysql://hadoop22:3306 \
      --username root \
      --password 123456 
      
    2. Import导入 (MySQL ----> HDFS/Hive)

      1. 准备

        mysql的数据
        create database sqoop
        
        create table mysql_user(
        id int primary key,
        name varchar(12)
        );
        insert into mysql_user values (1,'suns1');
        insert into mysql_user values (2,'suns2');
        insert into mysql_user values (3,'suns3');
        insert into mysql_user values (4,'suns4');
        insert into mysql_user values (5,'suns5');
        
      2. 基本导入HDFS

        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user
        
        #hdfs的位置?默认导入hdfs的位置:/user/root/mysql_user
                                     /user/${username}/${table_name}
        #sqoop导数据时,所运行的mapreduce 没有reduce只有map
        #为什么sqoop导数据时,split是5 对应5个map?
         Text  --- TextInputFormat ---- block --- split --- map
         DB    --- DBInputFormat --- 一行 --- 一个split -- 一个map
        #输出的文件内容中,列的分隔符默认是,
        
        # 自定义mysql 导入 hdfs目录 /sqoop
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop
        
        # 在目标目录存在的情况下,sqoop自动删除
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop \
        --delete-target-dir
        
        # 指定map的个数
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop \
        --num-mappers 1 \
        --delete-target-dir
        
        # 指定列分割符
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop \
        --num-mappers 1 \
        --delete-target-dir \
        --fields-terminated-by '\t'
        
        # 增量导入数据
        --check-column <column>        Source column to check for incremental    id
        --last-value <value>           Last imported value in the incremental    5
        --incremental <import-type>    Define an incremental import of type     append
                                       'append' or 'lastmodified'
                                       
        # 一定不要加入 --delete-target-dir
        
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop \
        --num-mappers 1 \
        --fields-terminated-by '\t' \
        --check-column id \
        --last-value 5 \
        --incremental append
        
        # 快速导入模式
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --target-dir /sqoop \
        --num-mappers 1 \
        --delete-target-dir \
        --direct
        --fields-terminated-by '\t'
        
        原理: 非快速模式 数据的导入 jdbc
              快速 使用的是mysql提供 export import工具
        注意: sqoop如果和mysql 安装在不同的机器中 ,使用快速导入 默认报错。
        
        # import hive表
        #--hive-import \
        #--hive-database Hive_1 \
        #--hive-table t_user \
        
        bin/sqoop import \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table mysql_user \
        --delete-target-dir \
        --hive-import \
        --hive-database Hive_1 \
        --hive-table t_user \
        --num-mappers 1 \
        --fields-terminated-by '\t'
        
      3. Export (HDFS/Hive —> MySQL)

        create table to_mysql(
        id int,
        name varchar(50)
        );
        
        1. hdfs------>mysql
        bin/sqoop export \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table to_mysql \
        --export-dir /sqoop \
        --num-mappers 1 \
        --input-fields-terminated-by ','
        
        2. hive ------->mysql
        bin/sqoop export \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table to_mysql \
        --export-dir /user/hive/warehouse/Hive_1.db/t_user \
        --num-mappers 1 \
        --input-fields-terminated-by ','
        
      4. 脚本化的sqoop

        # 脚本化的目的:复用sqoop导入 导出命令
        1. file文件
        1.1 创建一个Sqoop文件 普通文件 sqoop.file
        export
        --connect
        jdbc:mysql://hadoop22:3306/sqoop
        --username
        root
        --password
        123456
        --table
        to_mysql
        --export-dir
        /sqoop
        --num-mappers
        1
        --input-fields-terminated-by
        ','
        
        1.2 
        bin/sqoop --options-file /root/sqoop.file 
        
        2. job作业
        1.1 创建job作业
        bin/sqoop job \
        --create test_job1 \
        -- \
        export \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password 123456 \
        --table to_mysql \
        --export-dir /sqoop \
        --num-mappers 1 \
        --input-fields-terminated-by ','
            
        1.2
        bin/sqoop job --exec test_job1
        
        1.3 问题 每一次输入密码 不利于自动化处理 所以定密码的存储文件
        
        echo -n "123456"  >> /root/password
        
        bin/sqoop job \
        --create test_job2 \
        -- \
        export \
        --connect \
        jdbc:mysql://hadoop22:3306/sqoop \
        --username root \
        --password-file file:///root/password \
        --table to_mysql \
        --export-dir /sqoop \
        --num-mappers 1 \
        --input-fields-terminated-by ','
        
        # export_mysql.sh
        /opt/install/sqoop-1.4.5-cdh5.3.6/bin/sqoop job --exec test_job2
        
      5. 定时处理

        1. 安装crontab 
        2. crontab -e 
        编辑配置文件
        minute   hour   day   month   week   command 
        
        */5 * * * * command
        */1 * * * * echo 'suns' >> /root/sunshuai
        */1 * * * * /opt/install/sqoop-1.4.5-cdh5.3.6/bin/sqoop job --exec test_job2
        
        3. 启动关闭服务
        /sbin/service crond start
        /sbin/service crond stop
        
        ps -ef | grep cron
        
        基本格式 :
        * *  *  *  *  command
        分 时 日 月 周  命令
        
        第1列表示分钟1~59 每分钟用*或者 */1表示
        第2列表示小时1~23(0表示0点)
        第3列表示日期1~31
        第4列表示月份1~12
        第5列标识号星期0~6(0表示星期天)
        第6列要运行的命令
        
        crontab文件的一些例子:
        
        30 21 * * * /usr/local/etc/rc.d/lighttpd restart
        上面的例子表示每晚的21:30重启apache。
        
        45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
        上面的例子表示每月1、10、22日的4 : 45重启apache。
        
        10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
        上面的例子表示每周六、周日的1 : 10重启apache。
        
        0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
        上面的例子表示在每天18 : 00至23 : 00之间每隔30分钟重启apache。
        
        0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
        上面的例子表示每星期六的11 : 00 pm重启apache。
        
        * */1 * * * /usr/local/etc/rc.d/lighttpd restart
        每一小时重启apache
        
        * 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
        晚上11点到早上7点之间,每隔一小时重启apache
        
        0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
        每月的4号与每周一到周三的11点重启apache
        
        0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
        一月一号的4点重启apache
        
        */30 * * * * /usr/sbin/ntpdate 210.72.145.44
        每半小时同步一下时间
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值