利用sqoop将hive数据导入导出数据到mysql
http://niuzhenxin.iteye.com/blog/1726414
運行環境? centos 5.6?? hadoop? hive
sqoop是讓hadoop技術支持的clouder公司開發的一個在關系數據庫和hdfs,hive之間數據導入導出的一個工具
在使用過程中可能遇到的問題:
- sqoop依賴zookeeper,所以必須配置ZOOKEEPER_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?http://archive.cloudera.com/redhat/cdh/cloudera-cdh3.repo
?? # 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默認的字段分隔符為'\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'
與50位技術專家面對面20年技術見證,附贈技術全景圖
總結
以上是生活随笔為你收集整理的利用sqoop将hive数据导入导出数据到mysql的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring 项目中集成 Protoco
- 下一篇: java 通过jdbc驱动连接hive操