1)列出mysql数据库中的所有数据库命令 # sqoop list-databases --connect jdbc:mysql://localhost:3306/ --username root --password 123456 2)连接mysql并列出数据库中的表命令 # sqoop list-tables --connect jdbc:mysql://localhost:3306/test --username root --password 123456 命令中的test为mysql数据库中的test数据库名称 username password分别为mysql数据库的用户密码 3)将关系型数据的表结构复制到hive中 sqoop create-hive-table --connect jdbc:mysql://localhost:3306/test --table username --username root --password 123456 --hive-table test其中 --table username为mysql中的数据库test中的表 --hive-table test 为hive中新建的表名称 4)从关系数据库导入文件到hive中sqoop import --connect jdbc:mysql://localhost:3306/test --username root --password mysql-password --table t1 --hive-import
5)将hive中的表数据导入到mysql中
./sqoop export --connect jdbc:mysql://localhost:3306/test --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03
如果报错11/08/05 10:51:22 INFO mapred.JobClient: Running job: job_201108051007_0010 11/08/05 10:51:23 INFO mapred.JobClient: map 0% reduce 0% 11/08/05 10:51:36 INFO mapred.JobClient: Task Id : attempt_201108051007_0010_m_000000_0, Status : FAILED java.util.NoSuchElementException at java.util.AbstractList$Itr.next(AbstractList.java:350) at uv_info.__loadFromFields(uv_info.java:194) at uv_info.parse(uv_info.java:143) at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:79) at com.cloudera.sqoop.mapreduce.TextExportMapper.map(TextExportMapper.java:38) at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144) at com.cloudera.sqoop.mapreduce.AutoProgressMapper.run(AutoProgressMapper.java:187) at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:647) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:323) at org.apache.hadoop.mapred.Child$4.run(Child.java:270) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127) at org.apache.hadoop.mapred.Child.main(Child.java:264) 此错误的原因为sqoop解析文件的字段与MySql数据库的表的字段对应不上造成的。因此需要在执行的时候给sqoop增加参数,告诉sqoop文件的分隔符,使它能够正确的解析文件字段。
hive默认的字段分隔符为'\001'./sqoop export --connect jdbc:mysql://localhost:3306/datacenter --username root --password admin --table uv_info --export-dir /user/hive/warehouse/uv/dt=2011-08-03 --input-fields-terminated-by '\t'
第一种是将hive上某张表的全部数据导入到mysql对应的表中。第二种是将hive上某张表中的部分数据导入到mysql对应的表中。两种方式的区别在于第二种情况需要指定要导入数据的列名称。两种情况的导入方式分别如下:1.全部导入Sqoop export --connect jdbc:mysql://127.0.0.1:3306/dbname --username mysql(mysql用户名) --password 123456(密码) --table student(mysql上的表) --hcatalog-database sopdm(hive上的schema) --hcatalog-table student(hive上的表)2.部分导入Sqoop export --connect jdbc:mysql://127.0.0.1:3306/dbname --username mysql(mysql用户名) --password 123456(密码) --table student(mysql上的表) --columns "id,name,age" --hcatalog-database sopdm(hive上的schema) --hcatalog-table student(hive上的表)
参考文献:
如何利用sqoop将hive数据导入导出数据到mysql
使用Sqoop将Hive表数据导入到mysql
转载于:https://www.cnblogs.com/shujuxiong/p/10278486.html
相关资源:数据结构—成绩单生成器