Hive应用sqoop从MS-SQL 和Oracle 全量增量导入至HIVE



全量导入比较容易,关键在于增量导入


Sqoop导入数据顺序




其实可以把导入的代码固定成脚本,然后只要把库名跟表名换掉就可以了


Sqoop的增量导入要与sqoop的Job关联在一起

全量导入MS-SQL数据至HIVE

#Set the RDBMS connection params
rbms_driver='com.microsoft.sqlserver.jdbc.SQLServerDriver'
rdbms_connstr="jdbc:sqlserver://MSSQL数据库主机;username=用户名;password=密码;database=库名"
rdbms_username="MSSQL数据库用户名"
rdbms_pwd="MSSQL数据库密码"
#Set the source table in RDBMS
source_table="MSSQL数据库要导入的表"
import_columns="SSQL数据库要导入的表的字段"
#Set the hive tables
hive_table_name="导入Hive中Hive的表名"
hive_database="导入Hive中Hive的库名"
#---------------------------------------------------------
#Import init data in RDBMS into Hive
$SQOOP_HOME/bin/sqoop import --driver ${rbms_driver} -connect ${rdbms_connstr} --username ${rdbms_username} --password ${rdbms_pwd} --table ${source_table} --columns "${import_columns}" --hive-import --split-by 分割字段--hive-import --hive-overwrite --hive-table ${hive_table_name} --hive-database ${hive_database} --hive-delims-replacement "\\\\n" 2>&1 >> /opt/swb/日志.log


说明:--hive-overwrite表示的是全量导入 如果没有此参数 就是增量导了

全量导入Oracle数据至HIVE

username='Oracle库用户名'
password='Oracle库密码'
hive_database='Hive库名'
hive_tablename='Hive表名'
hadoop fs -rm -r /user/sqoop/mysql/$hive_database/$tablename
sqoop import --driver oracle.jdbc.driver.OracleDriver --hive-import --connect "jdbc:oracle:thin:@Oracle主机IP:商品/Oracle的SID" --target-dir /user/sqoop/mysql/$hive_database/$hive_tablename --username $username --password $password -m 1 --query "select * from 用户名.表名 where \$CONDITIONS" --hive-overwrite  --hive-table $tablename --hive-database $hive_database   --hive-delims-replacement "\\\\n" 2>&1 >> /opt/swb/日志.log



关于增量导入
1。网上增量导入的方法一般是通过sqoop的Job结合两种增量导入模式来实现 但在实际应用业务中 一般是用linux的crontab来做定时导入的 用sqoop的JOB关键在于取最后一笔记录的时间或ID值来做增量导入。
2。我用的是另一种方案 也比较完美实现 思路就是通过--query 中下条件实现 前提是表中有个时间戳


username='MSSQL数据库用户名'
password='MSSQL数据库密码'
hive_database='Hive库名'
tablename='Hive表名'
hadoop fs -rm -r /user/sqoop/mysql/$hive_database/$tablename
sqoop import --driver com.microsoft.sqlserver.jdbc.SQLServerDriver --connect "jdbc:sqlserver://MSSQL数据库主机;username=用户名;password=密码;database=库名" --username $username  --password $password  --query "select *  from 表名where convert(varchar(10),createdtime,120) =convert(varchar(10),getdate(),120) and \$CONDITIONS" --target-dir /user/sqoop/mysql/Hive/HDFS路径 --split-by id --hive-import  --hive-table $tablename --hive-database $hive_database --hive-delims-replacement "\\\\n" 2>&1 >>/opt/swb/日志.log

注意这里是没有--hive-overwrite的




注意的地方
1.导入的脚本要去除(BOM),存成Linux式的 UTF8格式的.sh文件,因为脚本是有LINUX下运行的。


2.导入MS-SQL和Oracle的数据,记得安装JDBC和上传jar包
3.导入Oracle库中的脚本 在--query中的查询语句表名中一定要带上用户名 以用户名.表名形式


记录一下,以防以后老了记不住.




[本日志由 admin 于 2017-05-25 01:02 PM 更新]
上一篇: Hive 的字符串UrlDecode 中文解码
下一篇: 大数据应用之应用场景
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 0 | 引用: 0 | 查看次数: 3986
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 30 字 | UBB代码 关闭 | [img]标签 关闭