免费注册
帮助文档(华北一、二)

  • 本例为在托管Hadoop集群的Master2节点上,使用sqoop,将内网(RDS或自建数据库)中MySQL数据库中的数据,以增量方式导入到托管Hadoop集群的Hive中。

    注解:存量集群中存在sqoop部署在Master1上的情况,请登陆后进行测试。

    在进行MySQL到Hive的增量数据导入时,需要原数据中,可以通过某一列的数据数据来判断所需导入的增量数据。

    本例操作流程中,主要通过在MySQL中构建测试数据库、表、数据,然后依据原数据表中的标签timestamp,并通过对比已经导入到Hive数据库中数据的timestamp最后值,来确定所需要增量导入的数据。

    2.1 创建库和表

    在MySQL中创建导出数据库(data_demo)、表(data_export)

     
    CREATE DATABASE data_demo; 
    CREATE TABLE data_demo.data_export (i INT , t TIMESTAMP(3), cn 
    VARCHAR(64));

    2.2 在Hive中创建数据库

     

    CREATE DATABASE data_demo1;

    CREATE TABLE data_demo1.data_import (i INT , t VARCHAR(64), cn 

    VARCHAR(64));

    2.3 生成数据

    建立生成测试数据的脚本(gene_data.sh),并运行脚本来生成数据,插入到数据库data_demo

     touch gene_data.sh

    脚本内容如下:

     

    #!/bin/bash

    #update

    i=$(($RANDOM % 10))

    up="insert into data_export values ('$i' , current_timestamp() , '中文\n') ON DUPLICATE KEY UPDATE t=current_timestamp()"

    echo $up

    mysql data_demo -e "$up"

    i=$RANDOM

    insert="insert into data_export values ('$i' , current_timestamp() , '中文\n');"

    echo $insert

    mysql data_demo -e "$insert"

    执行脚本插入数据

     bash gene_data.sh

    2.4 添加权限

    MySQL数据库在执行数据导出时,需要增加对目标HIVE数据库的可访问权限,可执行以下脚本为HIVE节点添加权限。

    创建脚本文件

     touch grant.sh

    编辑脚本文件内容如下:

     

    USER_NAME=hello

    USER_PASSWD=word

    DATA_BASE=data_demo

    for h in `grep uhadoop /etc/hosts | awk '{print $2}'`

    do

        mysql -e "CREATE USER '$USER_NAME'@'$h' IDENTIFIED BY '$USER_PASSWD'"

        echo "CREATE USER '$USER_NAME'@'$h' IDENTIFIED BY '$USER_PASSWD'"

    mysql -e "GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON $DATA_BASE.* TO '$USER_NAME'@'$h'"

        echo "GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES,EXECUTE ON $DATA_BASE.* TO '$USER_NAME'@'$h'"

    done

    mysql -e "FLUSH PRIVILEGES"

    执行脚本修改权限

     bash grant.sh

    2.5 导入数据

    注解:本例中MySQL地址为”10.10.115.1”,请根据需要修改$USER与$PASSWORD,此处“--last-value”需以实际在mysql中生成的测试数据时间为准。

     

    sqoop import --connect jdbc:mysql://10.10.115.1:3306/data_demo --username 

    $USER --password $PASSWORD --table data_export   --warehouse-dir 

    /user/hive/warehouse/tmp --hive-import --hive-table  data_demo1.data_import 

    --check-column t --incremental lastmodified --last-value '2016-11-15 

    17:22:24.496'  --merge-key i  --hive-drop-import-delims --hive-overwrite -m 1

    参数详解参考sqoop的使用手册

    http://sqoop.apache.org/docs/1.4.6/SqoopUserGuide.html

    测试过程中可能遇到的问题如下

    1. 托管Hadoop集群中task节点或core节点由于没有mysql的权限导入数据失败:

    请授权给集群中所有节点对MySQL数据库的select权限。

    2. 在进行数据导入时只会有一个mapreduce任务在跑:

    可通过-m参数指定map任务数,命令中为1。


文档是否已解决您的问题?

  已解决   未解决

如您有其它疑问,您也可以与我们技术专家联系探讨。

联系技术专家