Hive应用sqoop从MS-SQL 和Oracle 全量增量导入至HIVE
作者:admin 日期:2017-05-25
全量导入比较容易,关键在于增量导入
Sqoop导入数据顺序
其实可以把导入的代码固定成脚本,然后只要把库名跟表名换掉就可以了
Sqoop的增量导入要与sqoop的Job关联在一起
全量导入MS-SQL数据至HIVE
复制内容到剪贴板
程序代码
![程序代码](images/code.gif)
#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
复制内容到剪贴板
程序代码
![程序代码](images/code.gif)
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 中下条件实现 前提是表中有个时间戳
复制内容到剪贴板
程序代码
![程序代码](images/code.gif)
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 更新]
![](images/Cprevious.gif)
![](images/Cnext.gif)
![](images/From.gif)
![](images/icon_trackback.gif)
![](images/tag.gif)
![](images/notify.gif)
评论: 0 | 引用: 0 | 查看次数: 3628
发表评论