sqoop使用以及常見問題


1、hdfs文件的權限問題

問題分析與解決:

根據報錯信息是hdfs文件的權限問題,命令進入集群執行的用戶為null,而hdfs文件所有者為hdfs。

要么以用戶hdfs執行命令,要么調整hdfs文件的權限,因為我只是使用hdfs文件的其中之一,暫時考慮:以hdfs用戶執行命令。

在~/.bash_profile文件增加:

export HADOOP_USER_NAME=hdfs

2、文件格式問題

hive sequencefile導入文件遇到FAILED: SemanticException Unable to load data to destination table. Error: The file that you are trying to load does not match the file format of the destination table.錯誤

原因

這是因為SequenceFile的表不能使用load來加載數據,只能導入sequence類型的數據

解決辦法

  • 先創建一個臨時表(save as textfile),將數據導入進去,
  • 然后再導入這個表里   insert into table test_sq select * from test_tex

3、錯誤:ERROR tool.ImportTool: Error during import: No primary key could be found for table TRANS_GJJY02. Please specify one with –split-by or perform a sequential import with ‘-m 1’.

 

 根據錯誤提示我們可以知道這是因為表中的數據沒有設置主鍵。而針對這個問題有兩種傑解決方案:

      方案一:老老實實地在表中設置主鍵,然后再執行這個導入語句,就不會出錯。

      方案二:有些數據無法設置主鍵,比如很多的監測記錄數據,找不到唯一值,針對這種數據,我們可以根據上面的錯誤提示通過以下兩個方法來解決:

     (1)將你的map個數設置為1(Sqoop默認是4)

             -m 1

      (2)使用–split-by,后面跟上表的最后一列名字。從而能夠對數據進行分行 ,命令如下:

          –split-by column1

      這兩種解決方法,推薦使用方法(2),因為方法(1)只用一個map,效率太低,相比較而言,方法(2)可以自己設置map個數,效率會高一些。
 

4、Output directory already exists錯誤

增加配置參數  –delete-target-dir \

5、實例:sqoop從MySQL導入數據到Hive

sqoop import \
–connect jdbc:mysql://ip:3306/test \
–username root \
–password 123456\
–table users\
–fields-terminated-by ‘\t’ \
–delete-target-dir \
–num-mappers 1 \
–hive-import \
–hive-database sqoop\
–hive-table users

參數解釋:

import:從MySQL導入到HDFS文件系統數據

–connect:數據庫JDBC連接字符串

–username:數據庫用戶名

–password:數據庫密碼

–table:數據庫表名

–columns:數據庫列名

–where: 查詢條件

–query: 指定查詢sql

–delete-target-dir  導入后刪除hdfs的目錄

–num-mappers 1  指定map數量=1,可以簡寫為 -m 1

–hive-import       導入hive

–hive-database sqoop   hive的database

–hive-table users      hive表

–hive-partition-key    分區字段

–hive-partition-value  分區值

–hive-overwrite     覆蓋數據

實際上import命令,從MySQL導入到HDFS文的背后依然是執行的MapReduce。執行完map后,又執行了load data

如果導出的數據庫是mysql  則可以添加一個 屬性  –direct ,加了 direct 屬性在導出mysql數據庫表中的數據會快一點 執行的是mysq自帶的導出功能

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM