回覆列表
  • 1 # 邢州巔峰數碼

    執行環境 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"

  • 中秋節和大豐收的關聯?
  • 什麼叫三相電動機的相電流和線電流,它們之間有什麼關係?