针对sqoop1.99.6 从jdbc向hdfs中抽取数据的几点感想
最近在用sqoop1.99.6做數據抽取,期間遇到了很多問題,特此在這里記錄一下,方便以后的回顧與整理
1.首先配置的時候,需要配置hdfs的lib目錄到catalina.properties
common.loader=${catalina.base}/lib,${catalina.base}/lib/*.jar,${catalina.home}/lib,${catalina.home}/lib/*.jar,${catalina.home}/../lib/*.jar,/usr/lib/hadoop/*.jar,/usr/lib/hadoop/lib/*.jar,/usr/lib/hadoop-hdfs/*.jar,/usr/lib/hadoop-hdfs/lib/*.jar,/usr/lib/hadoop-mapreduce/*.jar,/usr/lib/hadoop-mapreduce/lib/*.jar,/usr/lib/hadoop-yarn/*.jar,/usr/lib/hadoop-yarn/lib/*.jar,/usr/lib/hive/lib/*.jar
在sqoop.properties中配置logs目錄與db的目錄
2.配置完后即可啟動sqoop(應先啟動hadoop)
3.創建一個sqoop任務需要先創建link,在1.99.6中需創建一個
fromlink,和tolink。
create link -cid 1 create link -cid 3?這兩行命令是分別創建一個jdbclink 和一個hdfs link
jdbclink 需要填寫一些參數:一定需要填寫的參數為connectString,database user database password
hdfs link需要填寫的參數為:hdfs的url :hdfs://namenode:9000/
在設置好這些參數以后就可以進行連接了。
本人測試過mysql連接和oracle連接。
oracle連接的連接參數可以用sid進行連接:jdbc:oracle:thin:@IP:Port:orcl
在構建了link 后就可以構建job了。
create job -f 1 -t 2?需填寫的參數為
Name:可不填
From database configuration
Schema name:
Table name:
Table SQL statement:
Table Columns name:
...
To HDFS configuration
...
output format:
compression format:
...
Output directory:
...
在這里要著重寫一下幾個參數的意義。特別是在數據庫一端的設置。
(Schema name,Table name)和Table SQL statement 不能同時設置,這是為了防止表名不同一造成的問題。
Table Columns name可以設置要抽取的列名。基本格式為:COL1,COL2,COL3? .因為Table Columns name的長度有一個變態的設置,就是這個字符串長度不能超過50.所以基本上設置不了幾列。在這里,我通過查找源碼發現了Table SQL statement的用法,其實可以說他的存在就是為了解決上面的問題。首先我們可以看到源碼里sql的size為2000.所以有足夠的長度。但是之前試了好多種sql的寫法,發現總是不成功。于是對sqoop各種吐槽。。。
后來終于發現它的基本寫法是這樣子滴:SELECT ID,COL1,COL2,COL3 FROM SCHEMA.TABLE WHERE ${CONDITIONS}
那個${CONDITIONS}只是個占位符,沒有什么用處,它在源碼里會被替換成1=1
這樣子就解決了COLUMNS設置的問題。
再來講解一下
Partition column name 一般可設置為ID,它的作用就是為了并行處理做準備的。sqoop通過獲取Partition column的最大值和最小值對數據庫表進行切割,分塊讀取數據(這樣很有可能導致任務之間的不平衡)。
為了解決這個問題,可以用Boundary Query來解決分塊的問題,這部分我還沒有研究。
最后一個問題,sqoop現在列之間的分隔符用的是“,”而不是“\t”,而且在外部已經不能手動去改了,它在代碼里寫死了。要改的話可以通過重新編譯源代碼的方式進行修改。
那個類是org.apache.sqoop.connector.hdfs.HdfsConstants
對于sqoop的學習暫且先記到這里。
?
轉載于:https://www.cnblogs.com/yulijunzj/p/5341534.html
總結
以上是生活随笔為你收集整理的针对sqoop1.99.6 从jdbc向hdfs中抽取数据的几点感想的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 我的弗丽嘉是什么意思
- 下一篇: eclipse 启动tomcat时弹出错