上云无忧 > 文档中心 > 百度智能云MapReduce - Sqoop应用文档
百度智能云MapReduce - Sqoop应用文档

文档简介:
在本示例中,hive数据表的location为BOS路径,hive数据表的partition为dt(string),根据dt指定日期,区分每一天的导入数据。 说明: 由于hive数据表的location为BOS,无法直接通过sqoop将RDS的数据导入hive,因为hive在加载数据时,会先将数据写入本地hdfs,然后将数据所在目录移动到hive表的location上。由于本地hdfs和BOS数据两个不同的文件系统,直接进行移动操作会抛出异常。因此,本场景需要“数据导入BOS”和“数据导入hive”两个步骤。
*此产品及展示信息均由百度智能云官方提供。免费试用 咨询热线:400-826-7010,为您提供专业的售前咨询,让您快速了解云产品,助您轻松上云! 微信咨询
  免费试用、价格特惠

场景描述

通过BMR Sqoop可以将RDS上的数据导入BMR Hive:

在本示例中,hive数据表的location为BOS路径,hive数据表的partition为dt(string),根据dt指定日期,区分每一天的导入数据。

说明

由于hive数据表的location为BOS,无法直接通过sqoop将RDS的数据导入hive,因为hive在加载数据时,会先将数据写入本地hdfs,然后将数据所在目录移动到hive表的location上。由于本地hdfs和BOS数据两个不同的文件系统,直接进行移动操作会抛出异常。因此,本场景需要“数据导入BOS”和“数据导入hive”两个步骤。

准备阶段

本示例所用数据为BMR Samples公共数据集。

第一步 准备数据

本示例的建表以及数据可以通过sql文件进行,下载地址。

第二步 建表并导入数据

  • 关于如何登录RDS数据库,参考文档。
  • 登录RDS后,选择一个数据库导入下载的sql文件,构建bmr_public_data_logs数据表,导入公共数据集。

步骤如下:

  1. 选中数据库sqoop;
  2. 点击导入;
  3. 选择下载的sql文件,注意如果是自己的sql文件,不能超过8M,超过8M可以先尝试压缩成zip文件,注意压缩文件结尾为.sql.zip。

结果如下图所示:

第三步 创建Hive数据表

登录BMR集群,切换到hdfs用户,创建hive数据表。

# eip可以在BMR Console集群详情页的实例列表获取
ssh root@eip

# 切换到hdfs用户
su hdfs
cd

# 启动hive shell
hive

# 输入以下建表语句
CREATE EXTERNAL TABLE `bmr_public_data_logs`(
   `id` int,
   `remote_addr` string,
   `time_local` string,
   `request` string,
   `status` int,
   `body_bytes_send` int,
   `http_referer` string,
   `http_cookie` string,
   `remote_user` string,
   `http_user_agent` string,
   `request_time` double,
   `host` string,
   `msec` double)
PARTITIONED BY (
   `dt` string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
    'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
    'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'    
LOCATION
    'bos://test-sqoop-example/bmr-public-data-logs/';

注意

  • 由于sqoop import默认的字段分隔符是',',所以在建表的时候将hive表的字段分隔设为',',即建表语句中:ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
  • 将location的bos路径修改为自己的bos路径

数据导入BOS

使用Sqoop将RDS上的数据导入BOS,关于Sqoop的更多用法,参考文档。

# eip可以在BMR Console集群详情页的实例列表获取
ssh root@eip

# 切换到hdfs用户
su hdfs
cd

# 使用sqoop命令将数据导入bos
sqoop import --connect jdbc//rds_mysql_hostname:port/sqoop --username test --password test
 --table  bmr_public_data_logs --split-by id --target-dir bos://test-sqoop-example/bmr-log-test

备注:

Sqoop命令中需要替换的地方,如下图所示:

(1)RDS域名; (2)RDS数据库; (3)RDS数据库用户名; (4)RDS数据库密码; (5)BOS上的目标路径(不能在sqoop导入前存在);

数据导入Hive

使用hive进行加载data

# eip可以在BMR Console集群详情页的实例列表获取
ssh root@eip

# 切换到hdfs用户
su hdfs
cd

# 启动hive shell
hive

# 导入数据
load data inpath 'bos://test-sqoop-example/bmr-log-test' into table bmr_public_data_logs partition (dt='2015-11-02');

说明:

  1. bos://test-sqoop-example/bmr-log-test是sqoop导入数据到bos上的目标路径。
  2. 加载数据过程中,hive将sqoop导入bos上的数据移动到hive表所指定的location中,在location(bos://test-sqoop-example/bmr-public-data-logs/)中新建目录“dt=2015-11-02”,将数据移动到这个目录下,而sqoop导入到bos上的原目录已经成为空目录,可以进行删除。
  3. 在加载数据过程中,可以带有overwrite,例如“load data inpath 'bos://test-sqoop-example/bmr-log-test' overwrite into table bmr_public_data_logs partition (dt='2015-11-02');”覆盖原有partition,如果不覆盖,只会将重名文件重命名,这样如果数据文件中有重复数据,则hive表中就会存在重复数据。
相似文档
  • 概览: 实现云上流式场景下数据流打通,方便用户在百度智能云上使用各个产品实现流式需求,实现流式数据处理全流程。 需求场景: 事件流: 事件流具能够持续产生大量的数据,这类数据最早出现与传统的银行和股票交易领域,也在互联网监控、无线通信网等领域出现、需要以近实时的方式对更新数据流进行复杂分析如趋势分析、预测、监控等。
  • 概览: 离线数据分析适用于数据规模大、处理实时性要求不高的场景,例如用户行为分析、用户留存分析、报表统计等等。基于百度智能云大数据平台,用户可以便捷地实现离线数据分析,包括数据的采集、数据清洗、数据仓库以及商业智能展现。
  • 协议生效时间:2019年05月01日。 本服务等级协议(Service Level Agreement,以下简称 "SLA")规定了百度智能云向客户提供的MapReduce BMR的服务可用性等级指标及赔偿方案。
  • BMR产品介绍: 介绍BMR的优势及产品特性。
  • BMR作业操作演示: 演示BMR如何在控制台编辑作业。 BMR集群操作演示: 演示BMR如何在控制台编辑集群。
官方微信
联系客服
400-826-7010
7x24小时客服热线
分享
  • QQ好友
  • QQ空间
  • 微信
  • 微博
返回顶部