利用Sqoop在数据库和Hive、HDFS之间做ETL操作

文章目录

  • @[toc] 目录:
    • 一、利用Sqoop,从Oracle到HDFS
    • 二、利用Sqoop,从Oracle到Hive
    • 三、遇到的问题

目录:

一、利用Sqoop,从Oracle到HDFS

第一步:把Oracle驱动拷贝到Sqoop安装路径中的lib文件夹下。

第二步:切换账户su hdfs

第三步:执行import操作

sqoop import --connect jdbc:oracle:thin:@IPAddress:databaseName --username userName --password password --table TABLENAME --target-dir /user/operate -m 1 --where "where子句 and 根据需要添加"

说明:

1、导入的目录若已经存在则要先删除已经存在的目录,否则会报路径以存在的错误提示:

FileAlreadyExistsException: Output directoryhdfs://master:8020/user/operate already exists

删除路径语句:hadoop fs –rmr /user/operate

如果多次导入同一个表中的数据,数据要以append的形式插入到HDFS目录中。

2、-m 1表示使用几个map任务处理,sqoop默认采用4个map任务,有几个任务在HDFS中执行,结果中就有几个part-m文件;若m值不等于1,则导入的表需要有主键,否则会报错:

Error during import: No primary key could befound for table KW_CARENLIST. Please specify one with --split-by or perform asequential import with '-m 1'.

sqoop是根据–splite-by <字段名>进行分区,–m设置map的数量,sqoop根据不同的splite参数进行切分,然后将切分出来的区域分配到不同的map中。Splite-by的参数类型不同则其切分方法不同,如int型,sqoop会取最大和最小splite-by字段。Sqoop会向关系数据库发送一个命令;select max(id),min(id) from table,然后会把max、min之间的区间平均分成m份,最后m个并行的map会执行任务。–splite-by认是主键,如果操作的表没有主键导入时会报错。splite-by对非数字类型的字段支持不好,一般用于主键及数字类型的字段(对于非数字类型有可能会导致数据量丢失。如:a,b,c,d,e,a,a,v,f,g)。在实例测试中,要导入的Oracle一张表(200多万条数据)中没有关键字,若以数据表的最后一列(NUMBER类型,值存在null,存在重复值)为splite-by对象,则最终检验导入的数据只有100多万条。

3、Sqoop默认从数据库导入到HDFS的分隔符是逗号,**可用—field –terminated-by 来指定输出文件中的行字段分隔符。**如果导入数据的字段内容中存在分隔符,可以另外指定父、字段包围符和转转义字符。

4、空列的值使用null。Sqoop默认导入的数据格式为文本文件。另可导入其他几种文件格式,如SequenceFile、Avro格式。文本文件不能保存二进制字段(如数据库中类型为VARBINARY的列),且在区分null值和null字符串时可能出现问题。Avro和SequenceFile格式的文件能够为导入的数据提供最精确的表示方式,同时还允许对数据进行压缩,并支持MapReduce并行处理同一文件的不同部分。(不过目前版本还不能将Avro或Sequence文件加载到Hive中,尽管可以手动地将Avro数据文件加载到Hive中)。SequenceFile文件格式的最后一个缺点是它只支持Java语言,而Avro数据文件却可以被很多语言支持。

5、Sqoop中的map数设置原则:一个表的数据抽取不超过3分钟,否则就增加map数。

辅助操作:

查看路径下文件:hadoop fs -ls /user/operate/

打开指定文件:hadoop fs –cat/user/operate/tabe_name

统计文件中行数:hadoop fs –cat /路径/文件名 |wc –l

二、利用Sqoop,从Oracle到Hive

访问 Hive数据库:
第一步:进入到hive命令行。
第二步:直接导入Hive数据库。

sqoop import --connect jdbc:oracle:thin:@IPAddress:1521:databaseName --username userName --password password --table TABLENAME  -m 1 --hive-import --hive-database test

相比导入到HDFS中,添加了—hive-import 、–hive-database参数。

–hive-import指定导入方式是导入到hive数据库中

–hive-database指定导入的目标数据库test,若无此参数则默认导入到Hive的默认数据库default中

上面的导入结果是导入到了test.test_table中,Hive自动创建了一张与Oracle导入表一样的表。也可以自己创建表,指定自己的表名:–hive-table tbName。

注意:因Oracle、Hive数据类型的不一致,导入的数据会存在精度减低的问题

也可以使用–option-file传入一个文件,使用这种方式可以重用一些配置参数(该方法为测试,看起来不错,做下记录,有兴趣的可以baidu一下):

sqoop –option-file /user/hive/import.txt –table test.table
其中,/user/hive/import.txt文件内容如下:

辅助操作:
删除数据库:DROP DATABASE IF EXISTS test;

删除数据库表:DROP TBALE test.test_table;

退出hive命令行:exit;

三、遇到的问题

在使用Sqoop从Oracle抽数据到Hive表时,有时候会遇到以下报错

Error: java.lang.RuntimeException: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Connection resetat org.apache.sqoop.mapreduce.db.DBInputFormat.setDbConf(DBInputFormat.java:170)at org.apache.sqoop.mapreduce.db.DBInputFormat.setConf(DBInputFormat.java:161)at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:73)at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:133)at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:749)at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1714)at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: java.lang.RuntimeException: java.sql.SQLRecoverableException: IO Error: Connection resetat org.apache.sqoop.mapreduce.db.DBInputFormat.getConnection(DBInputFormat.java:223)at org.apache.sqoop.mapreduce.db.DBInputFormat.setDbConf(DBInputFormat.java:168)... 10 more

解决
此问题一般是由于缺少一个生成快速随机数的工具,一般可以通过在JRE中的java.security中修改securerandom.source的值为以下内容并重新登陆shell解决问题。

cd $JAVA_HOME/jre/lib/securityvi java.securitysecurerandom.source=file:/dev/../dev/urandom

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456486.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

跨地域的VPC私网互通【高速通道案例】

最近一家大型企业正在将业务迁移至阿里云平台&#xff0c;用户有深圳&#xff0c;北京&#xff0c;上海等分支&#xff0c;其中上海为总部&#xff0c;用户要求在阿里云上的华南1&#xff0c;华北2&#xff0c;华东2分别建立VPC网络&#xff0c;其中华南1&#xff0c;华北2要与…

HDU 1711 Number Sequence(KMP模板)

http://acm.hdu.edu.cn/showproblem.php?pid1711 这道题就是一个KMP模板。 1 #include<iostream> 2 #include<cstring>3 using namespace std;4 5 const int maxn 10000005;6 7 int n,m;8 9 int next[maxn]; 10 int a[maxn], b[maxn]; 11 12 void get_next() 13…

Redis数据库学习笔记

一、NoSql&#xff08;非关系型数据库&#xff09; NoSQL&#xff1a;NoSQL Not Only SQL 非关系型数据库 ​ NoSQL&#xff0c;泛指非关系型的数据库。随着互联网web2.0网站的兴起&#xff0c;传统的关系数据库在应付web2.0网站&#xff0c;特别是超大规模和高并发的SNS类型…

Sqoop的安装配置及工作机制

文章目录[toc] 目录&#xff1a;1、简介2、sqoop安装2.1、下载并解压2.2、修改配置文件2.3、加入mysql或oracle的jdbc驱动包2.4、验证启动3、Sqoop的原理3.1、代码定制目录&#xff1a; 1、简介 sqoop是apache旗下一款“Hadoop和关系数据库服务器之间传送数据”的工具。 导入…

3D打印技术在医疗领域能做些什么?帮助精确完成手术

3D打印技术出现在20世纪90年代中期。它与普通打印工作原理基本相同&#xff0c;打印机内装有液体或粉末等“打印材料”&#xff0c;与电脑连接后&#xff0c;通过电脑控制把“打印材料”一层层叠加起来&#xff0c;最终把计算机上的蓝图变成实物。这打印技术称为3D立体打印技术…

【一些简单的jQuery选择器】

学习【js DOM 编程艺术】&#xff0c;最后面有许多jQuery的选择器&#xff0c;每个都动手敲了一遍。 jQuery 提供了高级选择器的方法。 js获取元素的三个基本方法分别是通过标签名&#xff0c;类名和id&#xff0c;即(getElementsByTagName, getElementsByClassName和getElemen…

pymysql操作mysql数据库

一、pymysql操作mysql数据库 安装pymysql pip install pymysql 1.1 pymysql操作数据库的五行拳 连接数据库 使用Connect方法连接数据库 pymysql.Connections.Connection(hostNone, userNone, password, databaseNone, port0, charset) 参数说明&#xff1a;host – 数据库服务…

SecureCRT常用的使用技巧

文章目录前言&#xff1a;1、SecureCRT 超时自动断开连接的解决办法2、SecureCRT连接Linux时&#xff0c;终端显示乱码的问题。3、SecureCRT使用自动记录日志功能4、使用SecureCRT从Windows上传文件到Linux5、SecureCRT配色推荐和永久设置前言&#xff1a; 由于工作需要&#…

解决:(1062, Duplicate entry '2019-08-30' for key 'rdate')

解决(1062, "Duplicate entry 2019-08-30 for key rdate") 显然这个问题是因为插入重复主键导致从库不工作了&#xff0c;更改库的唯一限制&#xff1a; unique 为normal 或者删除unique ALTER TABLE 表明 DROP INDEX 字节名; 实例 CREATE TABLE good_booked (au…

人民币数字金额转大写金额

public class t {public static String Trans2RMB(String money) {int index money.indexOf(".");if (index < 0) {// 没有角分money money ".00";index money.indexOf(".");}if (money.substring(index, money.length()).length() < …

eventBus 与fragment

同一个eventbut是不可以注册两次的&#xff0c;所以我们会在ondestroy方法中进行unregister&#xff08;&#xff09; 但是在fragment中&#xff0c;最好把unregister&#xff08;&#xff09;方法写到 onDestroyView&#xff08;&#xff09;方法中而不是onDestrory&#xff0…

机器学习之线性代数总结

目录1、SVD是什么、表达式是什么及对应的数学含义&#xff1b;2、了解方阵、行列式的含义&#xff08;方阵即矩阵&#xff0c;行列式即矩阵的计算结果&#xff09;3、了解代数余子式的概念4、伴随矩阵的概念5、知道方阵的逆的公式、范德蒙行列式6、知道矩阵的乘法&#xff0c;掌…

Python操作MongoDB

一 安装 pymongo pip install pymongo3.4 ​ 导入 MongoClient from pymongo import MongoClient 二 连接MongoDB数据库 MongoDB端口号:27017 连接MongoDB我们需要使用PyMongo库里面的MongoClient&#xff0c;一般来说传入MongoDB的IP及端口即可&#xff0c;第一个参数为地…

各种插件

上下滚动抽奖效果, 移动端省级联动, 时间联动 , pc端省级联动 vue 支持各种方式上传 一个不太完善的拖拽排序 react 拖拽交换插件 各种小插件 压缩图片移动端 h5上传 h5分片上传 包括服务器 slideSuper 各种滑动效果 wow.js 转载于:https://www.cnblogs.com/dhsz/p/6377956.h…

MailBee.NET Objects发送电子邮件(SMTP)教程六:创建并发送带有附件的邮件

2019独角兽企业重金招聘Python工程师标准>>> MailBee.NET Objects是一款为创建、发送、接收以及处理电子邮件而设计的健壮、功能丰富的.NET控件。几行代码便可为应用程序添加E-Mail支持&#xff0c;简单高效。具备“必需”以及独特的功能&#xff0c;这些控件帮助开…

机器学习之凸优化原理推导及相关知识总结

文章目录目录1、了解凸集和仿射集的基本概念。2、知道几何体的向量表达。3、了解超平面和半空间的概念。4、了解分割超平面和支撑超平面的含义。5、知道jensen不等式。6、掌握知识&#xff1a;凸函数。7、掌握凸优化目录 1、了解凸集和仿射集的基本概念。 凸集&#xff1a;在…

jQuery BreakingNews 间歇滚动

BreakingNews 是一款基于jQuery的间歇滚动插件。它可以设置标题、标题颜色、标题背景颜色、链接颜色、字体大小、边框、宽度、自动滚动、间歇时间等等&#xff0c;同时它还好提供两种过度方式——淡入淡出&#xff08;fade&#xff09;和向上滑动&#xff08;slide&#xff09;…

机器学习之回归总结

目录1、了解线性回归2、了解似然函数3、了解交叉验证的原理4、梯度下降算法4.1、批量梯度下降算法&#xff08;Batch Gradient Descent&#xff0c;简称BGD&#xff09;&#xff1a;4.2、随机梯度下降算法&#xff08;SGD&#xff09;&#xff1a;4.3、折中&#xff1a; 5、了解…

html中的url、href、src的区别

url不是属性&#xff0c;src和href是属性&#xff0c;src用于替换当前元素&#xff0c;href用于在当前文档和引用资源之间确立联系&#xff0c;也就是说src引用的路径是img自己的路径&#xff0c;href引用的路径是要跳转到的地方。 URL&#xff1a;Uniform Resource Locators&…

SSIS 包部署错误 0xC0010014

SSIS 包部署错误 0xC0010014 Reinhard 在部署 SSIS 包时&#xff0c;提示如下错误。 由于错误 0xC0010014“发生了一个或多个错误。在此消息之前应有更为具体的错误消息&#xff0c;对这些错误进行详细说明。此消息用作遇到错误的函数的返回值。”&#xff0c;无法加载包。当 C…