Load将Mysql数据导入Hive样例方案

举报
南派三叔 发表于 2020/07/17 17:07:22 2020/07/17
【摘要】 1.1 业务场景模拟使用Loader工具将客户移动电话系统产生的历史数据从原始数据库Mysql导入到Hive中,进行离线分析。1.2 操作步骤1.2.1 创建用户1. 进入FunsionInsight Manager界面,进去系统,创建本次测试用户,给予最大权限即可。1.2.2 Loader准备工作1. 获取关系型数据库对应的驱...

1.1      业务场景

模拟使用Loader工具将客户移动电话系统产生的历史数据从原始数据库Mysql导入到Hive中,进行离线分析。

1.2      操作步骤

1.2.1        创建用户

1.     进入FunsionInsight Manager界面,进去系统,创建本次测试用户,给予最大权限即可。

1.2.2        Loader准备工作

1.     获取关系型数据库对应的驱动jar包保存在Loader服务主备节点的lib路径:“${BIGDATA_HOME}/FusionInsight_Porter_6.5.0/install/FusionInsight-Sqoop-1.99.3/FusionInsight-Sqoop-1.99.3/server/webapps/loader/WEB-INF/ext-lib”。

2.     使用root用户在主备节点分别执行以下命令修改权限:

chown omm:wheel jar包文件名

chmod 600 jar包文件名

         

3.     登录FusionInsight Manager系统,选择“集群 > 服务 > Loader > 更多 > 重启,输入管理员密码重启Loader

 

 

1.2.3        Mysql准备工作

1.     登录事先安装好的Mysql数据库,方式如下:

    mysql –uroot –p Huawei@123

2.     创建并使用数据库

        create database inform;

         use inform;

3.     创建mysql数据表(模拟客户原始数据表)

        CREATE TABLE data_temp_demo (

              tel_num INT NOT NULL             #电话号码

              ,user_ip_addr VARCHAR(256)             #IP地址

              ,device_name VARCHAR(128)             #设备名

              ,rom_ver VARCHAR(128)                    #ROM版本

              ,hardware_ver VARCHAR(256)          #硬件版本

              ,app_name VARCHAR(256)                 #应用名称

              ,os_ver VARCHAR(256)                      #操作系统版本

              ,os_language VARCHAR(256)              #语言

              ,carrier VARCHAR(128)                      #运营商

              ,dt INT NOT NULL                              #日期

              ,mobile_color VARCHAR(256)             #颜色

              );

       备注:

4.     使用脚本生成业务数据,方式如下:

  

  Java  -jar createDataTool.jar  100000   #100000表示数据条数

  

5.     将生成的数据data.csv导入mysql中,方式如下:

   LOAD DATA LOCAL INFILE '/opt/data.csv' into table data_temp_demo FIELDS TERMINATED BY ',';

1.2.4        Hive准备工作

1.     需要提前下载Hive客户端,在客户端节点引入环境变量,认证用户,如下所示:

   

2.     创建Hive存放数据的HDFS目录,如下

  hdfs dfs -mkdir -p /data/mobilePhone/inform

3.     进入Hive shell客户端,创建并使用数据库

  beeline

  create  database inform;

  use inform;

4.     创建数据表dwd_evt_hota_device_logresult表(结果分析表)

   CREATE EXTERNAL TABLE IF NOT EXISTS inform.dwd_evt_hota_device_log(

    tel_num              int      

    ,user_ip_addr      VARCHAR(256)     

    ,device_name      VARCHAR(128)      

    ,rom_ver          VARCHAR(128)      

    ,hardware_ver      VARCHAR(256)     

    ,app_name         VARCHAR(256)     

    ,os_ver            VARCHAR(256)

    ,os_language       VARCHAR(256)      

    ,carrier            VARCHAR(128)     

    ,dt                int 

,mobile_color       VARCHAR(256)

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

STORED AS textfile

LOCATION '/data/mobilePhone/inform';

创建result表:

CREATE  TABLE IF NOT EXISTS inform.result

(

     tel_num              int      

    ,user_ip_addr      VARCHAR(256)     

    ,device_name      VARCHAR(128)      

    ,rom_ver              VARCHAR(128)      

    ,hardware_ver      VARCHAR(256)     

    ,app_name           VARCHAR(256)     

    ,os_ver                VARCHAR(256)

    ,os_language        VARCHAR(256)      

    ,carrier            VARCHAR(128)     

    ,dt                 int 

    ,mobile_color           VARCHAR(256)      

)

ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n'

STORED AS textfile;

1.2.5        配置Loader任务

1.     进入FunsionInsight Manager界面,点击Loader服务的主实例,进去loader任务配置界面,如下:

 

2.     进入Loader任务界面后,点击新建作业

 

3.     进行基本信息配置,按照如下步骤进行设置

 

备注:1.驱动程序类:com.mysql.jdbc.Driver

         2.连接URLjdbc:mysql://96.6.10.1:3306/informIP地址是Mysql所在机器的,inform表示数据库)

         3.用户名和密码是mysql数据库的

         4.配置完成,点击测试,显示测试成功,表示可以成功访问Mysql

4.     进入输入设置界面,按照如下方式配置即可

5.     进入转换设置,在左侧输入算子和输出算子分别选择表输入和“Hive输出”将其拖到右侧方格中,从表输入的

   方向连接至Hive输出,显示如下

6.     表输入算子配置,双击表输入进行配置,点击自动识别可以直接识别mysql对应数据表的字段,如下:

 

7.     Hive输出算子配置,双击“Hive输出”进行配置,点击关联可自动关联mysql字段,如下:

   

8.     进行“输出设置”,按照如下步骤操作,保存并运行任务

9.     查看任务运行结果,如下

1.3      查看结果

1.3.1        查看Hivedwd_evt_hota_device_log查看结果

select count(*)  from inform.dwd_evt_hota_device_log;

select * from inform.dwd_evt_hota_device_log a limit 10;

1.3.2        结果分析

1.     查询device_name名为iphone的数据并导入result表中,如下

insert into result select * from inform.dwd_evt_hota_device_log a where a.device_name='iphone';

1.4      FAQ

1.4.1        Loader任务Map数设置为20个,但在yarn上看到的实际Map数只有1,为什么?

答:hive导出是按照hive分区数进行划分的。

策略如下:
1、如果hive表实际分区数大于界面配置的map数,那么实际map数就是界面上配置的map
2、如果hive实际分区数小于界面上配置的map数,那实际生效的map数就是实际的分区数

具体到你的环境,你的hive表应该是没有配置分区表,那分区数就是1

实际生效的map数也是1

1.4.2        Loader是否支持关系型数据库(Oracle)中存在ClobBlob等大对象类型字段?

答:不支持。如果存在,建议将Clob引导成Long类型、Blob引导成Long row类型。

1.4.3        是否可以在URL中指定字符编码格式为UTF-8

答:可以。

jdbc:mysql://96.6.10.1:3306/test?useUnicode=true&characterEncoding=UTF-8

1.4.4        Loader可以通过调大Map的个数,提升导入导出速度吗?

答:可以。一个Map数对应到HDFS上为一个文件。多个Map对应多个文件,表示并发写入。

1.4.5        Loader提升导入导出速率的方式?

答:1.设置多Map2.使用MysqlOracle专用连接器;3.建议关系型数据库做分区,建索引。

1.4.6        Loader导入导出作业,运行一段时间后超时失败?

答:设置Loader自定义作业超时时间,保存重启Loader服务,然后重新执行任务。

mapreduce.task.stuck.timeout-ms 3600000

 


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。