热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Hadoop平台上用Sqoop在Hive和DB2数据库之间传输数据的实践和总结

笔者总结下Sqoop初学习过程中的一些经验,与大家分享和讨论下。首先,在网上找了些零碎的资料了解皮毛后,直接参阅官方的文档地址http:archive.cloudera.comcdh3sqo
笔者总结下Sqoop初学习过程中的一些经验,与大家分享和讨论下。首先,在网上找了些零碎的资料了解皮毛后,直接参阅官方的文档地址 http://archive.cloudera.com/cdh/3/sqoop/SqoopUserGuide.html  。然后,通过manual文件来获取更多的信息,命令如下代码所示。最后,在网上搜索到一些实例,但是这些实例不一定适合我的工作环境,所以需要测试和修改,得到适合自己的环境的命令。

[Bash shell] 纯文本查看 ?
123 $sqoop
help
$sqoop
import
--help
$sqoop
export
--help

  笔者的应用环境是DB2数据和Hive数据之间传数据。大家用sqoop会比较关心两个选项import、export,本文主要总结这两个选项。考虑Hive数据库中的表的类型可以是不带分区和带分区,在import数据到Hive的时候会有所不一样,总结的内容也分块叙述。命令中的一些参数选项,可以写入到一个options file,这样可以规范管理和增加命令的复用率,但是本文为了展示直观,直接将命令全部写一起。

一、从DB2导入Hive数据库

1. Hive上无分区表
  对于没有分区的表,可以直接将DB2数据导入到Hive库的表中,无需指定partition,是最简单的,命令如下:
[Bash shell] 纯文本查看 ?
1234 $sqoop
import
--hive-
import
--connect jdbc:db2:
//10.000.000.000:60000/DB_NAME
--username username --password password \
--outdir
/home/ocdc/bin/app/sqoop_ouput_files
--table DB2_TABNAME --hive-table HIVE_TABNAME -m 1 --target-
dir
'/TODB2_PATH/'
\
--fields-terminated-by
"\t"
--lines-terminated-by
"\n"
--delete-target-
dir
--null-string
''
--null-non-string
'' 
\
--
--default-character-
set=utf-8


2. Hive上单个分区表
  对于Hive库中有分区,而分区是单个分区的,需要用--hive-partition-key KEY --hive-partition-value KEY_VALUE两个命令组合,命令如下(没有找到合适表的测试),所以这个仅供参考。
[Bash shell] 纯文本查看 ?
123 $sqoop
import
--hive-
import
--connect jdbc:db2:
//10.000.000.000:60000/DB_NAME
--username username --password password --outdir
/home/ocdc/bin/app/sqoop_ouput_files
\
--table
DB2_TABNAME --hive-table HIVE_TABNAME  -m 1 --target-
dir
'/TODB2_PATH/DB2_TABNAME/'
--fields-terminated-by "\t"
--lines-terminated-by
"\n"
\
--hive-partition-key
KEY --hive-partition-value KEY_VALUE --delete-target-
dir
--null-string
''
--null-non-string
''
-- --default-character-
set=utf-8


3. Hive上多个分区表
  由于--hive-partition-key KEY --hive-partition-value KEY_VALUE不支持传入多个分区键,至少笔者搜索和测试的结果显示是如此。所以,多分区的表只能绕弯的入到Hive库中,这里提供的一个建议方法是:
[Bash shell] 纯文本查看 ?
01020304050607080910 #
add partition for dst table
$hive
-e
"alter table HIVE_TABNAME add partition (month_id='201410',day_id='20141007',hour_id='2014100700');"
 #
sqoop import data to hdfs
$sqoop
import
--connect jdbc:db2:
//10.000.000.000:60000/DB_NAME
--username username --password password -m 1 --outdir
/home/ocdc/bin/app/sqoop_ouput_files
\
$--table
DB2_TABNAME --target-
dir
"/TODB2_PATH"
--fields-terminated-by '\t'
--null-string
''
--null-non-string
''
--delete-target-
dir
\
$--
--default-character-
set=utf-8
 #
hive load data into table
$hive
-e
"set mapred.job.ocdc.priority=100;load data inpath '/TODB2_PATH/part-m-00000' overwrite into table HIVE_TABNAME partition (month_id=${MONTH_ID},day_id=${DAY_ID}, hour_id=${DAY_ID}${HOUR_ID});"




二、从Hive库导入DB2库
  先将Hive数据库内的表,导出到HDFS上。其实这里笔者困惑于两者同在HDFS上,区别在哪里,可能跟Hive的普通表、外部表、分区表这个概念有一定的类似理解方式吧。再用sqoop工具导入到DB2数据库,这里,笔者暂时没有测试通过,是否可以用Hive实体表的存放位置做--export-dir的参数,后续测试一下。下面给出一个建议方法:

[Bash shell] 纯文本查看 ?
1234 $hive
-e
"insert overwrite directory '/TODB2_PATH/${OP_TIME}${TAB_NAME}/' select * from ${TAB_NAME} where month_id=${OP_TIME}"
$sqoop
export
--connect jdbc:db2:
//10.000.000.000:60000/DB_NAME
--username username --password password \
$--outdir
/home/ocdc/bin/app/sqoop_ouput_files
--table ${DST_SCHEMA}.${TMP_TAB_NAME} \
$--export-dir
"/TODB2_PATH/${OP_TIME}${TAB_NAME}/000000_0"
--input-null-string ''
--input-null-non-string
''




三、options file的使用方法

  将繁琐的命令进行规范化,并添加相应的注释,这就是options file来做的事情。举一个简单的例子:
[Bash shell] 纯文本查看 ?
0102030405060708091011121314151617181920212223242526272829303132 #
options_file.opt
#
This is a sqoop import options file.
#
call it like:
#
sqoop --options-file /home/ocdc/bin/app/sqoop_option_files/options_file.opt --table DB2_TABNAME \
#
--export-dir '/TODB2_PATH/DB2_TABNAME' --input-null-non-string '' --input-null-string ''
 #
Specifies the tool being invoked
export #
Connect parameter and value
#
default connect to 155
--connectjdbc:db2://10.000.000.000:60000/DB_NAME --usernameusername --passwordpassword #
Output directory for generated code
#
in order to remove them cyclical.
--outdir/home/ocdc/bin/app/sqoop_ouput_files #
Sets the field separator character
--fields-terminated-by"\0001" #
Sets the end-of-line character
--lines-terminated-by"\n"

推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
author-avatar
三十二号t娶我吧
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有