sqoop将hive中数据导入mysql(实例讲解)

假设这样一个场景:

数据已经导入hive(hive实例讲解看这里),现在要把hive中数据库导入出到(mysql)关系型数据库中,这里使用的工具是sqoop(sqoop详细讲解看这里)。

该怎么处理呢?
首先,我们需要的是在mysql中建立对应的表,数据字段类型与hive数据表中要导出的数据类型保持一致;
然后,我们需要在假如你不是需要原样输出而是需要经过计算统计的话,就需要写在hive中使用HiveQL实现这些业务(事实上大部分是不是需要原样到导出的);
最后,sqoop导出参数配置。
下面从业务实例讲解下整个流程:

1、以下定义需要的参数#

#!/bin/bash

PREDATE=`date -d "1 day ago" +%Y-%m-%d`
PRETime=`date -d "1 day ago" +%Y-%m-%d HH:mm:dd`
echo "${PREDATE}"
YEARDATE=`date -d "1 year ago" +%Y-%m-%d`
echo "一年前的时间为:${YEARDATE}"

2、以下将统计,聚合等HiveQL操作写入参数sql,使用$(sql)调用#


sql=$(cat <if exists test;
create table test(
 date string,
 region_code string,
 telephone string,
 self_product int,
 compete_list string
)
row format delimited
fields terminated by '\t'
stored as textfile;

***********

!EOF)
#以上创建一个新的hive数据表,用于存放统计聚合结果,接下来可以写入
insert,update,group等操作,没有开源不方便放#

3、开始提取数据(以下sqoop参数解释戳这里):

echo $sql #输出sql内容
$HIVE_HOME/bin/hive -e "$sql" # hive执行sql
sqoop执行删除操作:
sqoop eval 
--connect 'jdbc:mysql://000.00.00.00:3306/data_analysesuseUnicode=true&characterEncoding=utf-8'
--username aaaa  
--password 0000 
--query "delete from test"
执行导出命令:
sqoop export --connect 'jdbc:mysql://000.00.00.00:3306/data_analyses?useUnicode=true&characterEncoding=utf-8'
--username aaaa
--password 0000
--table test
--export-dir /user/hive/warehouse/dm.db/d_compete_expection_statistic
--input-fields-terminated-by '\t'
--input-null-string '\\N'
--input-null-non-string '\\N'

判断是否执行完成:

exitCode=$?
if [ $exitCode -ne 0 ];then
         echo "[ERROR] hive execute failed!"
         exit $exitCode
fi

整个流程至此完成。

你可能感兴趣的:(大数据/云计算)