sqoop在關係型數據庫與分佈式文件系統之間傳輸數據

sqoop用於 hadoop 與關係型數據庫之間的數據傳遞,可以將數據庫中的數據導入到hdfs等文件系統,也可以將hdfs 上的數據導入到數據庫中。

準備sqoop 軟件包 sqoop-1.4.7.bin__hadoop-2.6.0
http://archive.apache.org/dist/sqoop/1.4.7/

一、將sqoop 軟件複製到 根目錄下
在這裏插入圖片描述
二、解壓軟件
tar -zxvf sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz
2.2 重命名 爲sqoop
[hadoop@nna ~]$ mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
在這裏插入圖片描述

三、編輯環境變量:
[hadoop@nna ~]$ sudo vi /etc/profile
追加下面兩句
export SQOOP_HOME=/home/hadoop/sqoop
export PATH=PATH:PATH:SQOOP_HOME/bin
重起環境變量
[hadoop@nna ~]$ source /etc/profile
3.2 修改sqoop1 的腳步
在sqoop-env.sh 腳本中,修改環境變量路徑。

#Set path to where bin/hadoop is available
export HADOOP_COMMON_HOME=/home/hadoop/hadoop-2.7.7
#Set path to where hadoop-*-core.jar is available
export HADOOP_MAPRED_HOME=/home/hadoop/hadoop-2.7.7

四、加載驅動包,因爲要跟數據庫連接,要有相應的數據庫的驅動,這裏以mysql爲例。
mysql-connector-java-5.1.46-bin.jar
https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.46.zip
hadoop-common-2.7.7.jar
hadoop的jar包,可以在hadoop安裝包lib 文件下找。
在這裏插入圖片描述

五、導入:將mysql 數據庫中的數據導入分佈式文件系統,
在這裏插入圖片描述

sqoop import --connect jdbc:mysql://192.168.80.1:3306/test   #連接數據庫驅動
--username root #用戶名
 --password 123456  # 密碼
 --table sqoop        #表名字
  --fileds-terminated-by  ','  #行的字段分隔符  
  --null- string '**'  # 若字符爲空則用*代替
  -m 1  #指定任務執行過程當中使用map 的任務數
  --append 
  --target-dir '/sqoop/'  #輸出到HDFS的文件路徑
  --where 'id>1'   #查詢條件

在這裏插入圖片描述
生成的格式就是這樣。
在這裏插入圖片描述

六、HDFS 導出數據到mysql,需要導出的數據格式爲:
在這裏插入圖片描述

sqoop export 
--connect jdbc:mysql://192.168.80.1:3306/test 
--username root 
--password 123456 
--table sqoop --fields-terminated-by ',' 
--export-dir '/sqoop_exports/export.txt'  #需要導出的文件
--batch  #批量導出
--update-key id   #設定主鍵
--update-mode allowinsert  #指定如何更新表中的數據

在這裏插入圖片描述
查看mysql 數據庫是否導出成功。
在這裏插入圖片描述

9、踩抗記!!!
9.1 ERROR manager.SqlManager: Error executing statement: java.sql.SQLException: null, message from server: "Host ‘nna’ is not allowed to connect to this MySQL server"
nna 禁止連接win 系統的mysql,應該是win 的mysql 沒有開啓遠程連接
在這裏插入圖片描述
參照: https://www.2cto.com/database/201205/132457.html

9.2 Generating splits for a textual index column allowed only in case of “-Dorg.apache.sqoop.splitter.allow_text_splitter=true” property passed as a parameter
在這裏插入圖片描述
在導入的時候遇到的錯誤,解決辦法是在import後面加入 -Dorg.apache.sqoop.splitter.allow_text_splitter=true

9.3 org.apache.hadoop.yarn.exceptions.InvalidResourceRequestException): Invalid resource request, requested memory < 0, or requested memory > max configured, requestedMemory=1536, maxMemory=1024
在這裏插入圖片描述

最後執行成功的時候我們可以看到,sqoop 數據遷移,其實用的也是mapreduce,出現這原因是yarn 資源管理給予的yarn.nodemanager.resource.memory-mb 內存不夠大,默認是1536。
在這裏插入圖片描述
解決辦法:在yarn-site.xml 追加下面兩個屬性:

<property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>2500</value>
</property>
<property>
    <name>yarn.nodemanager.resource.memory-mb</name>
    <value>2500</value>
</property>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章