如何利用sqoop将hive数据导入导出数据到mysql

运转条件  centos 5.6   hadoop  hive
sqoop是让hadoop技巧扶助的clouder公司开垦的叁个在关周密据库和hdfs,hive之间数据导入导出的三个工具。

新加坡尚学堂hadoop大数据培养操练组原创,时断时续有hadoop大额本领相关小说奉上,请多关切!

图片 1
在应用进度中只怕境遇的主题素材:

  • sqoop重视zookeeper,所以必得安顿ZOOKEEPEENVISION_HOME到碰着变量中。
  • sqoop-1.2.0-CDH3B4注重hadoop-core-0.20.2-CDH3B4.jar,所以你需求下载hadoop-0.20.2-CDH3B4.tar.gz,解压缩后将hadoop-0.20.2-CDH3B4/hadoop-core-0.20.2-CDH3B4.jar复制到sqoop-1.2.0-CDH3B4/lib中。

1  首先安装sqoop,即使您使用的是clouder分发版的话就特别轻易  
   # yum install sqoop
  假设用合法版本的话 
   # cd /etc/yum.repos.d
   # wget 
   # yum -y install sqoop
   sqoop就能够安装实现
2  使用sqoop
   首先将mysql-connector-java-5.1.16-bin.jar文件复制到/usr/lib/sqoop/lib文件夹下
   
3  导入导出数据库
   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暗中认可的字段分隔符为'01'
./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'

 

本文由明仕msyz手机版发布于旅游-环球旅讯,转载请注明出处:如何利用sqoop将hive数据导入导出数据到mysql

TAG标签:
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。