1、sqoop1.4.6 to hbase1.2 in hue4.1html
CM安裝 cdh 5.15.x,因想用簡單的sqoop1因此parce裝的sqoop1 client,經測試報:SQOOP_CONF_DIR找不到,mysql drive no find ,檢查發現安裝目錄和classpath都有,依然如此,後找文檔說是cdh只支持sqoop2,sqoop1須要手配置 oozie/libext並上傳到hdfs下,連接https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_oozie_sqoop_jdbc.html,翻譯以下 :java
Sqoop 1不附帶第三方JDBC驅動程序。您必須單獨下載它們並將它們保存到在/ var / lib中/ sqoop /Oozie服務器上的目錄。有關更多信息,請參閱使用命令行設置Apache Sqoop。mysql
Cloudera建議您不要將Sqoop CLI命令與Oozie Shell Action一塊兒使用。此類部署不可靠,而且在升級和配置更改期間容易中斷。web
在開始此過程以前,請確認您的Sqoop1 JDBC驅動程序是否存在 在/ var / lib中/ sqoop。sql
SSH到Oozie服務器主機並執行如下命令在HDFS上部署和配置驅動程序:shell
cd / var / lib / sqoop sudo -u hdfs hdfs dfs -mkdir / user / oozie / libext sudo -u hdfs hdfs dfs -chown oozie:oozie / user / oozie / libext sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_NETEZZA_CONNECTOR/sqoop-nz-connector*.jar / user / oozie / libext / sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/lib/*.jar / user / oozie / libext / sudo -u hdfs hdfs dfs -put /opt/cloudera/parcels/SQOOP_TERADATA_CONNECTOR/sqoop-connector-teradata*.jar / user / oozie / libext / sudo -u hdfs hdfs dfs -put /var/lib/sqoop/*.jar / user / oozie / libext / sudo -u hdfs hdfs dfs -chown oozie:oozie /user/oozie/libext/*.jar sudo -u hdfs hdfs dfs -chmod 755 /user/oozie/libext/*.jar sudo -u hdfs hdfs dfs -ls / user / oozie / libext #[/ user / oozie / libext的樣本內容] -rwxr-xr-x 3 oozie oozie 959987 2016-05-29 09:58 /user/oozie/libext/mysql-connector-java.jar -rwxr-xr-x 3 oozie oozie 358437 2016-05-29 09:58 /user/oozie/libext/nzjdbc3.jar -rwxr-xr-x 3 oozie oozie 2739670 2016-05-29 09:58 /user/oozie/libext/ojdbc6.jar -rwxr-xr-x 3 oozie oozie 3973162 2016-05-29 09:58 /user/oozie/libext/sqoop-connector-teradata-1.5c5.jar -rwxr-xr-x 3 oozie oozie 41691 2016-05-29 09:58 /user/oozie/libext/sqoop-nz-connector-1.3c5.jar -rwxr-xr-x 3 oozie oozie 2405 2016-05-29 09:58 /user/oozie/libext/tdgssconfig.jar -rwxr-xr-x 3 oozie oozie 873860 2016-05-29 09:58 /user/oozie/libext/terajdbc4.jar
使用如下步驟配置Oozie Sqoop1操做工做流:數據庫
sudo -u hdfs hdfs dfs -ls / user / oozie / libext
oozie.use.system.libpath = true oozie.libpath = / user / oozie / libext
然而並沒有卵用,後國外社區 上有說driver傳hdfs://usr/share/lib/sqoop下,試了下, SQOOP_CONF_DIR依然找不到,mysql drive no find 解決了但不能用sql user name 登陸,找不到用戶,而這一切在命令行下徹底正常,報錯以下:apache
Sqoop command arguments : list-databases --connect jdbc:mysql://172.16.12.44:3306/ --username bigdata_ro --password ******** Fetching child yarn jobs tag id : oozie-ed23d117051393fc0989abc9110ba08d 2018-07-31 18:58:46,734 [main] INFO org.apache.hadoop.yarn.client.RMProxy - Connecting to ResourceManager at master/172.16.60.151:8032 Child yarn jobs are found - ================================================================= >>> Invoking Sqoop command line now >>> 2018-07-31 18:58:46,957 [main] WARN org.apache.sqoop.tool.SqoopTool - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2018-07-31 18:58:47,013 [main] INFO org.apache.sqoop.Sqoop - Running Sqoop version: 1.4.6-cdh5.15.0 2018-07-31 18:58:47,027 [main] WARN org.apache.sqoop.tool.BaseSqoopTool - Setting your password on the command-line is insecure. Consider using -P instead. 2018-07-31 18:58:47,039 [main] WARN org.apache.sqoop.ConnFactory - $SQOOP_CONF_DIR has not been set in the environment. Cannot check for additional configuration. 2018-07-31 18:58:47,124 [main] INFO org.apache.sqoop.manager.MySQLManager - Preparing to use a MySQL streaming resultset. 2018-07-31 18:58:47,467 [main] ERROR org.apache.sqoop.manager.CatalogQueryManager - Failed to list databases java.sql.SQLException: Access denied for user 'bigdata_ro'@'172.16.60.149' (using password: YES) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119) .... <<< Invocation of Sqoop command completed <<< No child hadoop job is executed. Intercepting System.exit(1) <<< Invocation of Main class completed <<< Failing Oozie Launcher, Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1] Oozie Launcher failed, finishing Hadoop job gracefully
至此檢查全部相關配置文件發現,hue sqoop根本沒走 sqooq腳本,因此全部設置無效,而是走oozie的一個類:org.apache.oozie.action.hadoop.SqoopMain,因此可能Hue裏只支持sqoop2,幫暫時擱置,先導入數據 之後研究,,,,,,,瀏覽器
2、sqoop1.4.6 to hbase1.2 in shell:安全
# sqoop list-databases --connect jdbc:mysql://172.16.12.44:3306/che100 --username bigdata_ro --password *******
Please set $ACCUMULO_HOME to the root of your Accumulo installation.
18/07/31 19:15:15 INFO sqoop.Sqoop: Running Sqoop version: 1.4.6-cdh5.15.0
18/07/31 19:15:15 WARN tool.BaseSqoopTool: Setting your password on the command-line is insecure. Consider using -P instead.
18/07/31 19:15:15 INFO teradata.TeradataManagerFactory: Loaded connector factory for 'Cloudera Connector Powered by Teradata' on version 1.7c5
18/07/31 19:15:15 INFO manager.MySQLManager: Preparing to use a MySQL streaming resultset.
information_schema
admin
......
# sqoop import --connect jdbc:mysql://172.16.12.44:3306/che100 --username bigdata_ro --password ******* --table tc_district --hbase-table tc_district --column-family f1 --hbase-row-key id --check-column update_dt --incremental lastmodified --last-value 0 -m 1
# hbase shell
hbase(main):001:0> list
TABLE
tc_district
1 row(s) in 0.2410 seconds
hue hive建外表關聯hbase表並刷新結構到impala:
CREATE EXTERNAL TABLE che100.tc_district(
id INT,
dname STRING,
pid INT,
update_dt TIMESTAMP)
ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key, f1:dname, f1:pid, f1:update_dt") //注意 這裏key 是默認的不能用導入 的rwokey 字段 id,提示多一列,其它注意數據類型轉化,INT ,TINYINT,BOOLEAN, TIMESTAMP,decimal(11,6)
TBLPROPERTIES("hbase.table.name" = "tc_district");
hue impala 刷新後找到相關表後查詢測試:
INVALIDATE METADATA
SELECT * FROM `che100`.`tc_district` LIMIT 100
至此一切正常,但想從hbase browse裏看hbase數據,表都刷不出來:文檔得知爲了安全,hbase thrift 不容許直接對外訪問,由於這樣全部人知道你的thrift 地址均可以直接鏈的hbase服務器了:https://www.cloudera.com/documentation/enterprise/latest/topics/cdh_sg_hbase_security.html翻譯以下:
想學習如何自定義權限認證,請參考過往記憶的博文:HiveServer2(Spark ThriftServer)自定義權限認證
要配置HBase安全性,請完成如下任務:
要使HBase可以使用Kerberos安全性,必須執行在CDH 5和ZooKeeper安全配置中配置Hadoop安全性中的安裝和配置步驟。
雖然HBase Thrift服務器能夠鏈接到安全的Hadoop集羣,可是從客戶端到HBase Thrift服務器的訪問不受保護。要加密客戶端與HBase Thrift服務器之間的通訊,請參閱爲HBase Thrift服務器配置TLS / SSL。
Hue包含一個HBase應用程序,容許您經過Thrift代理服務器與HBase交互。由於Hue位於Thrift服務器和客戶端之間,因此Thrift服務器假定全部HBase操做都來自色調用戶而不是客戶。確保只容許Hue中的用戶執行分配給他們本身的憑據的HBase操做,而不是那些色調用戶,必須啓用HBase模擬。
Hue團隊發佈於2015年3月25日,HBase,Video
Hue附帶了一個HBase應用程序,可讓您建立表格,搜索行,閱讀單元格內容......只需點擊幾下。咱們如今很高興發佈最後一個缺失的安全性(在即將到來的Hue 3.8中可用),以便讓應用程序生產準備就緒!
HBase應用程序經過代理服務器(稱爲Thrift Server V1)與HBase通訊,代理服務器將命令轉發給HBase。由於Hue位於代理服務器和實際用戶之間,因此代理服務器認爲全部操做(例如建立表,掃描某些數據......)來自'hue'用戶而不是實際的Web用戶。這顯然不是很安全!
爲了確保HBase應用程序真正安全,咱們須要:
注意
咱們假設您已在羣集中安裝了HBase Thrift Server。若是使用Cloudera Manager,請轉到HBase服務實例列表,而後單擊「添加角色實例」並選擇「HBase Thrift Server」。
如今能夠將HBase配置爲提供模擬(使用或不使用Kerberos)。在咱們的例子中,這意味着用戶能夠經過Hue向HBase發送命令,而不會失去他們將在本身的憑據(而不是'hue'用戶)下運行的事實。
首先,確保在hbase-site.xml中有這個:
1 2 3 4 五 6 7 8 9 |
|
注意
若是使用Cloudera Manager,能夠經過在HBase服務的配置搜索中鍵入「thrift」並檢查前兩個結果來完成。
而後在core-site.xml中檢查HBase是否有權冒充某人:
1 2 3 4 五 6 7 8 9 |
|
最後檢查Hue是否指向其hue.ini中指定的HBase的本地配置目錄:
1 2 |
|
注意
若是您使用的是Cloudera Manager,則可能須要在Hue配置中選擇HBase Thrift服務器,並在hue_safety_valve.ini的Hue服務高級配置代碼段(安全閥)中輸入相似的內容。
1 2 |
|
就是這樣,啓動HBase Thrift Server和Hue,你就準備好了!
如今Hue能夠向HBase Thrift Server發送命令並告訴他以某個用戶身份執行它們,咱們須要確保只容許Hue執行此操做。咱們使用Kerberos來強烈驗證HBase服務的用戶。在咱們的例子中,HBase Thrift服務器只有在來自Hue用戶時纔會接受命令。
確保HBase配置了Kerberos,而且您在Hue指向的hbase-site.xml中具備此功能:
1 2 3 4 五 6 7 8 9 |
|
注意
若是在沒有模擬的狀況下使用Cloudera Manager或常規Thrift,請確保設置「HBase Thrift Authentication」hbase.thrift.security.qop必須設置爲如下之一:
若是使用Cloudera Manager,請轉至「Hbase服務>配置>服務範圍/安全:HBase Thrift身份驗證」,而後選擇如下三個選項之一。
與上面相似,請確保hue.ini指向帶有hbase-site.xml的有效目錄:
1 2 |
|
要麼
1 2 |
|
注意
若是使用模擬,請確保HTTP / _HOST主體位於其HBase Thrift服務器的密鑰表中。
重啓HBase和Hue,它們如今應該所有安全!
您如今能夠肯定Hue用戶只能查看或修改HBase級別容許的內容。Hue保證若是用戶不能在HBase shell中執行某個操做,它將經過Hue徹底相同(Hue就像HBase頂部的'view')。
請注意,HBase選擇經過HTTP Thrift支持模擬,所以在使用模擬時常規Thrift不起做用。以前的Kerberos支持如今也頗有意義,由於全部操做都再也不來自Hue用戶了!只需點擊一下便可完成全部這些配置步驟。
如今是時候玩表示例並打開HBase給全部用戶了!
注意
此錯誤意味着上面的'hadoop.proxyuser.hbase.hosts'/'hadoop.proxyuser.hbase.groups'屬性不正確:
1 2 3 |
|
注意
您如今可能會看到以下所示的權限錯誤。
1 |
|
這是由於:
解決此問題的一種快速方法是隻提供全部權限。顯然,這不建議用於真正的設置,而是閱讀有關HBase訪問控制的更多信息!
1 2 3 |
|
注意
若是你獲得一個「Api錯誤:TSocket讀取0字節」,這是由於Hue不知道Thrift服務器正在期待Thrift HTTP。仔細檢查Hue是否指向包含hbase.regionserver.thrift.http屬性設置爲true的hbase-site.xml。
暫時的黑客將是在hue.ini中插入:
1 2 |
|
注意
「Api錯誤:超出最大遞歸深度」表示HBase Thrift服務器未做爲HTTP Kerberos服務運行。
在最新的Hue 3.8中,您如今應該只獲得401錯誤。
注意
使用模擬時未測試緩衝傳輸模式,但可能有效。
注意
若是您收到此錯誤:
1 |
|
您極可能會點擊 https://issues.apache.org/jira/browse/HBASE-13069。還要確保HTTP / _HOST主體位於其HBase Thrift Server的keytab中。請注意,做爲後續行動,您可能會得到https://issues.apache.org/jira/browse/HBASE-14471。
還有一個框架傳輸問題還沒有獲得支持。咱們建議使用緩衝傳輸。
至此若是還有錯誤,請移步到hue登陸用戶側點 hue administers,或訪問http://master:8889/hue/about/會自動檢查配置:
Configuration files located in /run/cloudera-scm-agent/process/332-hue-HUE_SERVER
Potential misconfiguration detected. Fix and restart Hue.
OOZIE_EMAIL_SERVER |
Email notifications is disabled for Workflows and Jobs as SMTP server is localhost. |
HBase Browser |
Failed to authenticate to HBase Thrift Server, check authentication configurations. |
在查相關文檔解決:但看了最新版hue4.1以後,第一句話讓你看到原來它是支持SQOOP1的,只是使用方式徹底界面化了 ,且配置文件根本不在相關conf 下,而是每次啓動會動態建立一個,omg --!:
發佈者色相隊在2017年8月24日,在順化4.1,SQL,Sqoop
明年將在Hue 4.1和CDH 6中推出使人興奮的新功能。其中之一是Hue的全新工具,使用Apache Sqoop 1將關係數據庫中的數據導入HDFS文件或Hive表。它使咱們可以經過交互式UI只需幾回點擊便可將大量數據帶入集羣。此Sqoop鏈接器已添加到Hue 的現有導入數據嚮導中。
過去,使用Sqoop命令行界面導入數據多是一個麻煩且低效的過程。該任務指望用戶對Sqoop有很好的瞭解。例如,他們須要將一系列必需的參數放在一塊兒,這些參數具備特定的語法,這將致使容易出錯。一般,正確地獲取這些可能須要幾個小時的工做。如今有了Hue的新功能,您能夠在幾分鐘內完成Sqoop的工做。進口在YARN上運行,由Oozie安排。本教程提供了有關如何執行此操做的分步指南。
首先,您須要在其中配置Apache Sqoop,Apache YARN,Apache Oozie和Hue的正在運行的集羣。
接下來,您須要安裝特定於數據庫的JDBC jar。爲此,請將它們放在HDFS上的某個目錄中。
要得到MySQL自動完成功能,須要配置Lib RDBMS和筆記本:http://gethue.com/custom-sql-query-editors/
此外,您須要經過在Hue ini中的索引器部分下將enable_sqoop設置爲true來打開該功能。
注意:
若是使用Cloudera Manager,請檢查如何在hue.ini安全閥中添加屬性並將上述參數值放在那裏。
如今讓咱們開始吧!
在本教程中,咱們將從Teradata導入表到Apache Hive。單擊左側窗格中的漢堡菜單,而後選擇屏幕左下角的選項以導航到Hue的索引器部分。從「類型」下拉列表中選擇「外部數據庫」。
選擇數據庫有兩種模式:
注意:任一模式中的JDBC選項都容許咱們使用JDBC特定憑據指向數據庫。
咱們如今將選擇自定義模式,提供數據庫憑據並啓動測試鏈接。測試經過後,下拉列表將填充數據庫名稱列表。在數據庫選擇時,將填充表名列表。在桌面選擇上,快速預覽很是方便。您還能夠選中「全部表」選項以一次性導入特定數據庫的全部表。
完成源頁面後,單擊「下一步」以導航到目標頁面。在這裏,選擇Destination類型,它能夠是HDFS文件或Hive表。還要選擇Sqoop運行導入做業所需的全部數據庫特定jar。因爲咱們選擇了Teradata,咱們將選擇全部teradata特有的罐子。
咱們還能夠爲咱們的導入做業添加額外的選項,如映射器編號,輸出數據格式,分隔符,詳細模式,拆分選項,壓縮模式等。文檔部分對此進行了詳細說明。
咱們甚至能夠重命名列名稱,並經過取消選中「保持」複選框來過濾掉不須要的列。
如今,讓咱們點擊「提交」按鈕。在這樣作時,會生成一個Sqoop做業,能夠在Hue的做業瀏覽器中進行跟蹤。
完成工做後,咱們能夠經過對新導入的數據執行Hive / Impala查詢,利用Hue的編輯器進行數據處理和查詢分析。
咱們須要執行Sqoop導入做業所需的全部庫。該要求特定於正在使用的數據庫。下面列出了一些流行數據庫所需的罐子:
屬性提供了許多其餘選項來進一步調整導入操做以適應您的特定工做負載。
Sqoop 1支持的任何數據庫。
在導入過程當中,列的數據類型能夠更改成HDFS / Hive兼容的數據類型。導入表時,主鍵用於爲映射器建立拆分。若是沒有主鍵,則須要明確選擇拆分列; 若是不這樣作會致使導入失敗。在執行全表導入時,若是全部表都沒有主鍵,則導入做業將失敗。此外,若是因爲某種緣由做業失敗,您能夠從做業跟蹤器中的日誌中找出失敗的緣由。如需進一步幫助,請訪問https://sqoop.apache.org/docs/1.4.6/