sqoop实现Mysql、Oracle与hdfs之间数据的互导 ╰半橙微兮° 2022-08-06 01:13 122阅读 0赞 ## 通过Sqoop实现Mysql / Oracle 与HDFS / Hbase互导数据 ## ## SQOOP的描述 ## SQOOP是用于对数据进行导入导出的。 (1)把MySQL、Oracle等数据库中的数据导入到HDFS、Hive、HBase中 (2)把HDFS、Hive、HBase中的数据导出到MySQL、Oracle等数据库中 ### 一、Mysql与HDFS互导数据 ### 环境: 环境介绍:3台虚拟机安装centos6.464位、jdk1.7 64位、hadoop2.5.1 64位 192.168.0.108 m1 192.168.0.109 s1 192.168.0.110 s2 ## SQOOP的安装 ## 解压缩sqoop的tar.gz文件,设置环境变量(source /etc/profile) ## 把数据从mysql导入到hdfs(默认是/user/<username>)中 ## 1. 复制mysql的驱动到sqoop目录下的lib中 2. 执行导入命令 sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\\t' --null-string '\*\*' -m 1 --append --hive-import 说明: ü 执行import命令将mysql的hive数据库中的TBLS表导入到hdfs中(默认目录user/root) ü \--fields-terminated-by '\\t' :表示导入到hdfs中以’\\t’进行切割 ü \--null-string ‘\*\*’:表示当字段为null时用’\*\*’替换 ü \-m1:表示只指定一个map任务(map任务的个数关系生成文件的个数) ü \--append:表示如果执行多次则进行追加(否则多次执行则会报already exsist) ü \--hive-import:表示导入到hive中(如果只需导入到hdfs中则可不写) ü sqoop import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\\t' --null-string '\*\*' -m 1 --append --hive-import --check-column 'TBL\_ID' --incremental append --last-value 6 说明: ü 执行import命令将mysql的hive数据库中的TBLS表导入到hdfs中(默认目录user/root) ü \--check-column 'TBL\_ID':表示检查’TBL\_ID‘列 ü \--incremental:表示增量 ü \--last-value 6:表示开始追加导入的列从第6列开始(不包含第6列) ü \--check-column 'TBL\_ID' --incremental append --last-value 6:整体解释为检查导入的主键列‘TBL\_ID’当该列的值(增量)大于6时,可以进行追加导入,否则不进行导入 (这样做的目的:当第一次导入数据时主键列的最后一个值为6,第二次导入时我们不想导入所有的数据而是后来增加的数据,所以我们可以接着上一次的数据导入,即不导入重复数据) ## 把数据从hdfs导出到mysql中 ## sqoop export --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table ids --fields-terminated-by '\\t' --export-dir '/ids' 说明: \--export-dir '/ids':指定要导出到Mysql的文件目录 ## 设置为作业,运行作业 ## sqoop job --create myjob -- import --connect jdbc:mysql://hadoop0:3306/hive --username root --password admin --table TBLS --fields-terminated-by '\\t' --null-string '\*\*' -m 1 --append --hive-import 说明: ü 设置为作业后可以直接执行作业,执行作业即执行该命令 ü 执行作业的命令:sqoop job –exec myjob ü 查看作业已创建的Job作业:sqoop job –list 注:运行作业第一次需要输入密码,输入密码后即可执行,然后修改sqoop/conf/sqoop-site.xml中的sqoop.metastore.client.record.password(去掉注释即可) 以后运行就不需要在此输入密码了 ## 导入导出的事务是以Mapper任务为单位。 ## 即一个Map任务一个事务 案例: 连接测试 sqoop list-tables --connect jdbc:mysql://192.168.0.114:3306/test --username root --password zwx \#sqoop实现数据从oracle导入hdfs(hbase) sqoop import --append --connect jdbc:oracle:thin:@192.168.0.20:1521:orcl --username yqdev --password yq --m 1 --table c_text --columns id,url,title,publishtime,copy --hbase-create-table --hbase-table c_text --hbase-row-key id --column-family textinfo \#mysql sqoop import --append --connect jdbc:mysql://192.168.0.114:3306/test --username root --password zwx --m 1 --table c_text --columns id,url,title,author --hbase-create-table --hbase-table c_text --hbase-row-key id --column-family textinfo
还没有评论,来说两句吧...