欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

jdbc連接mysql數據庫代碼,怎么用sqoop把hive的數據導入mysql

林子帆2年前23瀏覽0評論
jdbc連接mysql數據庫代碼,怎么用sqoop把hive的數據導入mysql?

運行環境 centos 5.6 hadoop hive

sqoop是讓hadoop技術支持的clouder公司開發的一個在關系數據庫和hdfs,hive之間數據導入導出的一個工具。

上海尚學堂hadoop大數據培訓組原創,陸續有hadoop大數據技術相關文章奉上,請多關注!

在使用過程中可能遇到的問題:

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'