2016-05-06 58 views
1
  1. 堆棧:安裝HDP-2.3.2.0-2950使用Ambari 2.1
  2. 源是圍繞1.6TB和大約25表 的最終目標是一個MS SQL數據庫檢查現有查詢是否可以在HDP上運行得更快
  3. 導入數據的時間和可用性沒有多少時間,因此導入必須執行一次,並且Hive表,查詢等需要例如,先嚐試在ORC中創建一個正常的分區表。如果它不夠,請嘗試索引等。可能的話,我們也將評估鑲木格式等

4.As到4的解決方案,我決定先導入表到HDFS中的Avro格式,例如:導入到HDFS或蜂巢(直接地)

sqoop import --connect 'jdbc:sqlserver://server;database=dbname' --username someuser --password somepassword --as-avrodatafile --num-mappers 8 --table tablename --warehouse-dir /dataload/tohdfs/ --verbose 

現在我打算創建一個Hive表,但我有一些問題提及here

我的問題是,給出以上所有要點,什麼是最安全的(在時間方面而不是搞亂HDFS等)方法 - 首先引入HDFS,創建Hive表和實驗或直接導入Hive我不知道如果現在我刪除這些表,並希望重新開始,我必須重新導入數據)

+0

我看到這兩個斷言之間的矛盾:*「沒有時間多次導入數據」* vs *「目標表必須經過實驗...重新創建具有不同選項的表格」 *。如果你想用不同的分區方案嘗試不同的SerDe(ORC,Parquet),那麼你必須重新創建Hive表並重新加載它們幾次。 –

+0

So **你是什麼意思**通過「導入數據」 - 你想在HDFS中以便攜格式(例如CSV)創建一個轉儲,多次用作源代碼?使用'Sqoop'。或者你想要一個端到端的解決方案來從SQL Server讀取數據並直接將數據加載到你的分區ORC/Parquet格式?使用'Spark',最新版本可以像Sqoop *一樣進行並行加載(但要小心一些不會自動從Metastore中獲取的選項,例如Parquet壓縮 - 並且分區管理不是直接的)* –

+0

通過導入數據',我的意思是'訪問sql服務器並將數據加載到hdfs',即我可以在Hive中做任何我想做的事情。的時間,但我無法訪問sql服務器不止一次來獲取數據。 我已經導入了Avro格式的sql服務器表,現在我正在構建Hive ORC和Hive Avro表頂部,唯一的混淆是導入期間Avro文件格式是否會導致perf。 Hive查詢執行後的問題 –

回答

0

加載,你可以嘗試以下幾種

1)你可以做一個mysql導入到CSV文件將作爲備份存儲在您的Linux文件系統中,然後爲HDFS執行distcp。

2)如上所述,您可以執行Sqoop導入並將數據加載到Hive表(parent_table)。

爲了使用不同的格式檢查性能&分區表,您可以使用CTAS(Create Table As Select)查詢,您可以在其中從基表(parent_table)創建新表。在CTAS中,你可以提到parque或avro等格式,分區選項也在那裏。

即使刪除由CTAS創建的新表,基表也會在那裏。

根據我的經驗,Parque +分區將提供最佳性能,但它也取決於您的數據。

0

我看到連接和設置都是正確的。但我在查詢中看到--fetch-size。默認情況下,--fetch-size是1000,這將永遠在你的情況下。如果列數少的話。我會建議增加--fetch-size 10000。當列數小於50時,我已經達到了50000。如果您有100列,那麼可能是20000。我會建議檢查每行數據的大小,然後決定。如果有一列的大小大於1MB數據。然後我不會推薦1000以上的任何東西。