sqoop1.4.4从oracle导数据到hive中

sqoop从oracle定时增量导入数据到hive

感谢:

http://blog.sina.com.cn/s/blog_3fe961ae01019a4l.html
http://f.dataguru.cn/thread-94073-1-1.html sqoop.metastore.client.record.password
http://blog.csdn.net/ryantotti/article/details/14226635 开启sqoop metastore

step 1 创建sqoop job
a.配置sqoop metastore服务
修改sqoop/conf/sqoop-site.xml文件

相关属性:

sqoop.metastore.server.location
sqoop.metastore.server.port
sqoop.metastore.client.autoconnect.url

上面三个参数是为了实现共享(shared)metastore,"By default, job descriptions are saved to a private repository stored in $HOME/.sqoop/. You can configure Sqoop to instead use a shared metastore, which makes saved jobs available to multiple users across a shared cluster. Starting the metastore is covered by the section on the sqoop-metastoretool."这样在其他的cluster上就可以共享job并执行。

如果不需要共享job,只需要把上面三个属性在配置文件中用<!-- -->注释掉即可。

sqoop.metastore.client.enable.autoconnect
sqoop.metastore.client.record.password 这个属性是为了保存数据库密码的,默认情况下处于安全需要,不会将密码保存到metastore中,这样每次执行job时就需要重新输入数据库的密码。为了定时执行,我们修改这个属性,是他可以保存密码。

修改如下:

<property>
 <name>sqoop.metastore.server.location</name>
 <value>/tmp/sqoop-metastore/shared.db</value>
</property>
<property>
 <name>sqoop.metastore.server.port</name>
 <value>16000</value>
</property>
<property>
  <name>sqoop.metastore.client.autoconnect.url</name>
 <value>jdbc:hsqldb:hsql://118.228.197.115:16000/sqoop</value>
</property>
<property>
  <name>sqoop.metastore.client.record.password</name>
  <value>true</value>
</property>
<!--注释掉这个属性
<property>
  <name>sqoop.metastore.client.enable.autoconnect</name>
  <value>false</value>
</property>
-->

b.启动metasotre,控制台执行sqoop metastore命令(如果没有配置前三个属性,请跳过此步骤)
c.创建sqoop job

(为了方便执行,将下面的脚本写入到文件保存,然后用chmod u+x FILENAME修改权限后,通过 ./FILENAME执行文件,创建job)

sqoop job --meta-connect jdbc:hsqldb:hsql://hostIP:16000/sqoop --create JOBNAME -- import --hive-import --incremental append --connect jdbc:oracle:thin:@DatabaseIP:1521/INSTANCENAME --username USERNAME --password PASSWD --verbose -m 1 --bindir /opt/sqoop/lib --table TABLENAME --check-column COLUMNNAME --last-value VALUE

注意:

1) 如果前面没有配置共享metastore(即”sqoop.metastore.server.location" 、”sqoop.metastore.server.port“、”sqoop.metastore.client.autoconnect.url“三个属性在配置文件中已经注释了),那就需要将上面的脚本中 ”--meta-connect jdbc:hsqldb:hsql://hostIP:16000/sqoop“ 去掉。

2) "--create JOBNAME -- import"中”--“后面加一个空格再写import命令,否则执行出错
3) --check-column列不能是char varchar等,可以是date,int,
参考官网:http://sqoop.apache.org/docs/1.4.4/SqoopUserGuide.html 在官网页面查找 check-column字段,快速定位到相关解释

step 2 执行sqoop job看是否可以顺利进行

<!--查看job列表,看是否成功创建-->
sqoop job --list
<!--执行job,测试能否正常执行,此处如果导入的数据量大,会很耗费时间-->
sqoop job --exec JOBNAME

step 3 确定sqoop job可以正常执行后,编写脚本定时执行

将下面的脚本写入一个文本文件,如 execJob,然后执行 chmod u+x execJob 命令添加可执行权限

source /etc/profile
rm TABLENAME.java -f
sqoop job -exec JOBNAME

step 4 用crontab工具实现定时执行

执行crontab -e 命令,添加如下一行脚本,保存退出即可

# 每天1点钟执行数据导入job
0 1 * * * execJob 1>/root/execlogs 2>&1

注意:execJob就是step3创建的脚本文件,需要用具体的路径,如/root/execJob。“1>/root/execlogs 2>&1”这句是重定向stdout和stderr输出对象到指定文件,可以在文件中查看执行输出的信息。

crontab命令工具用法参考:

http://www.cnblogs.com/jiafan/articles/1153066.html

http://baike.baidu.com/view/1229061.htm

 

sqoop1.4.4从oracle导数据到hive中

时间: 2024-11-04 15:05:01

sqoop1.4.4从oracle导数据到hive中的相关文章

使用sqoop1.4.4从oracle导入数据到hive中错误记录及解决方案

在使用命令导数据过程中,出现如下错误 sqoop import --hive-import --connect jdbc:oracle:thin:@192.168.29.16:1521/testdb --username NAME --passord PASS --verbose -m 1 --table T_USERINFO 错误1:File does not exist: hdfs://opt/sqoop-1.4.4/lib/commons-io-1.4.jar FileNotFoundEx

sqoop 从oracle导数据到hive中,date型数据时分秒截断问题

oracle数据库中Date类型倒入到hive中出现时分秒截断问题解决方案 1.问题描述: 用sqoop将oracle数据表倒入到hive中,oracle中Date型数据会出现时分秒截断问题,只保留了‘yyyy-MM-dd',而不是’yyyy-MM-dd HH24:mi:ss'格式的,后面的‘HH24:mi:ss’被自动截断了,在对时间要求到秒级的分析处理中这种截断会产生问题. 2.解决方案: 在用sqoop倒入数据表是,添加--map-column-hive 和--map-column-jav

定期从Oracle导数据至MySQL

因部分项目需求,需要将Oracle中单表的数据定期导入至MySQL,注意此处对数据的时效性要求不高.要求高可以利用goldengate 首先,需要将visit表中的vid,userid,goodid,time4个字段导出来 MYDB=visit   #MySQL数据库名 MYUSER=vis_my_user  #MySQL用户名 MYPASS=is_my_pass  #MySQL密码 ORA_NAME=visit       #Oracle实例名 ORA_USER=visuser    #Ora

Oracle导数据到SQL server的方法总结

通过oracle10g 访问sql server 2008 导数据步骤 最近在项目中遇到要将Oracle数据库的数据导入到SQL server数据库中,解决办法如下: 一.准备工作 配置Oracle 客户端(TNS 监听)tnsnames.ora 文件,其中需要注意文件中的数据库别名"ORADB",确保主机可以通过SQLPlus 访问远程Oracle 数据库.示例如下: ORADB= (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =HO

kylin2.3版本启用jdbc数据源(可以直接通过sql生成hive表,省去手动导数据到hive,并建hive表的麻烦)

说明: jdbc数据源,本质上还是hive数据源. 由于数据库做大表关联方面性能还是不行.所以kylin的默认数据源仍然是hive,我觉得是非常合理的. 对应jdbc数据源,其实就是一种便利的方式.其基本原理就是通过连接数据库,选取所要用的表(或者sql查询). 通过sqoop并行的抽取数据,并按照表名生成对应的hive表.cube的构建就根据生成的hive表进行. 每次构建的时候都重新抽取数据,生成hive表,构建完成之后,就把这个hive表删除掉. 相当于是自动做了之前开发需要 自己做的数据

sqoop同步mysql数据到hive中

一.sqoop 在同步mysql表结构到hive sqoop create-hive-table --connect jdbc:mysql://ip:3306/sampledata --table t1--username dev --password 1234 --hive-table t1; 执行到这一步就退出了,但是在hadoop的hdfs上的/hive/warehouse/的目录下是找不到t1表的目录, 但是正常执行完成是下面这样的: 错误就是hive的jar包有缺失 全部的jar包该是

利用Sqoop将MySQL数据导入Hive中

参考 http://www.cnblogs.com/iPeng0564/p/3215055.html http://www.tuicool.com/articles/j2yayyj http://blog.csdn.net/jxlhc09/article/details/16856873 1.list databases sqoop list-databases --connect jdbc:mysql://192.168.2.1:3306/ --username sqoop --passwor

【甘道夫】Sqoop1.4.4 实现将 Oracle10g 中的增量数据导入 Hive0.13.1 ,并更新Hive中的主表

需求 将Oracle中的业务基础表增量数据导入Hive中,与当前的全量表合并为最新的全量表. ***欢迎转载,请注明来源***    http://blog.csdn.net/u010967382/article/details/38735381 设计 涉及的三张表: 全量表:保存了截止上一次同步时间的全量基础数据表 增量表:增量临时表 更新后的全量表:更新后的全量数据表 步骤: 通过Sqoop将Oracle中的表导入Hive,模拟全量表和增量表 通过Hive将"全量表+增量表"合并为

使用sqoop将mysql数据导入到hive中

首先准备工具环境:hadoop2.7+mysql5.7+sqoop1.4+hive3.1 准备一张数据库表: 接下来就可以操作了... 一.将MySQL数据导入到hdfs 首先我测试将zhaopin表中的前100条数据导出来,只要id.jobname.salarylevel三个字段. 再Hdfs上创建目录 hadoop fs -mkdir -p /data/base #用于存放数据 我们cd到sqoop目录下执行命令 # \ 用于换行bin/sqoop import --connect jdbc