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
[[email protected] ~]$ mv sqoop-1.4.7.bin__hadoop-2.6.0 sqoop
三、編輯環境變數:
[[email protected] ~]$ sudo vi /etc/profile
追加下面兩句
export SQOOP_HOME=/home/hadoop/sqoop
export PATH=
SQOOP_HOME/bin
重起環境變數
[[email protected] ~]$ 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>