A. hiveUDF函數能替換存儲過程嗎
直接新建一個Job,裡面些匿名PLsql程序塊即可: BEGIN INSERT INTO B SELECT A.ID, A.ANAME, A,ATYPE FROM A WHERE NOT EXISTS( SELECT 1 FROM B WHERE B.BID = A.AID AND B.BNAME=A.ANAME); END;
B. 大數據培訓學校學哪些內容
首先我們要了解Java語言和Linux操作系統,這兩個是學習大數據的基礎,學習的順序不分前後。
大數據
大數據
Java :只要了解一些基礎即可,做大數據不需要很深的Java 技術,學java SE 就相當於有學習大數據基礎。
Linux:因為大數據相關軟體都是在Linux上運行的,所以Linux要學習的扎實一些,學好Linux對你快速掌握大數據相關技術會有很大的幫助,能讓你更好的理解hadoop、hive、hbase、spark等大數據軟體的運行環境和網路環境配置,能少踩很多坑,學會shell就能看懂腳本這樣能更容易理解和配置大數據集群。還能讓你對以後新出的大數據技術學習起來更快。
Hadoop:這是現在流行的大數據處理平台幾乎已經成為大數據的代名詞,所以這個是必學的。Hadoop裡麵包括幾個組件HDFS、MapRece和YARN,HDFS是存儲數據的地方就像我們電腦的硬碟一樣文件都存儲在這個上面,MapRece是對數據進行處理計算的,它有個特點就是不管多大的數據只要給它時間它就能把數據跑完,但是時間可能不是很快所以它叫數據的批處理。
Zookeeper:這是個萬金油,安裝Hadoop的HA的時候就會用到它,以後的Hbase也會用到它。它一般用來存放一些相互協作的信息,這些信息比較小一般不會超過1M,都是使用它的軟體對它有依賴,對於我們個人來講只需要把它安裝正確,讓它正常的run起來就可以了。
Mysql:我們學習完大數據的處理了,接下來學習學習小數據的處理工具mysql資料庫,因為一會裝hive的時候要用到,mysql需要掌握到什麼層度那?你能在Linux上把它安裝好,運行起來,會配置簡單的許可權,修改root的密碼,創建資料庫。這里主要的是學習SQL的語法,因為hive的語法和這個非常相似。
Sqoop:這個是用於把Mysql里的數據導入到Hadoop里的。當然你也可以不用這個,直接把Mysql數據表導出成文件再放到HDFS上也是一樣的,當然生產環境中使用要注意Mysql的壓力。
Hive:這個東西對於會SQL語法的來說就是神器,它能讓你處理大數據變的很簡單,不會再費勁的編寫MapRece程序。有的人說Pig那?它和Pig差不多掌握一個就可以了。
Oozie:既然學會Hive了,我相信你一定需要這個東西,它可以幫你管理你的Hive或者MapRece、Spark腳本,還能檢查你的程序是否執行正確,出錯了給你發報警並能幫你重試程序,最重要的是還能幫你配置任務的依賴關系。我相信你一定會喜歡上它的,不然你看著那一大堆腳本,和密密麻麻的crond是不是有種想屎的感覺。
Hbase:這是Hadoop生態體系中的NOSQL資料庫,他的數據是按照key和value的形式存儲的並且key是唯一的,所以它能用來做數據的排重,它與MYSQL相比能存儲的數據量大很多。所以他常被用於大數據處理完成之後的存儲目的地。
Kafka:這是個比較好用的隊列工具,隊列是干嗎的?排隊買票你知道不?數據多了同樣也需要排隊處理,這樣與你協作的其它同學不會叫起來,你干嗎給我這么多的數據(比如好幾百G的文件)我怎麼處理得過來,你別怪他因為他不是搞大數據的,你可以跟他講我把數據放在隊列里你使用的時候一個個拿,這樣他就不在抱怨了馬上灰流流的去優化他的程序去了,因為處理不過來就是他的事情。而不是你給的問題。當然我們也可以利用這個工具來做線上實時數據的入庫或入HDFS,這時你可以與一個叫Flume的工具配合使用,它是專門用來提供對數據進行簡單處理,並寫到各種數據接受方(比如Kafka)的。
Spark:它是用來彌補基於MapRece處理數據速度上的缺點,它的特點是把數據裝載到內存中計算而不是去讀慢的要死進化還特別慢的硬碟。特別適合做迭代運算,所以演算法流們特別稀飯它。它是用scala編寫的。Java語言或者Scala都可以操作它,因為它們都是用JVM的。
C. hivewithas不同的作業相同的臨時表會有影響嗎
會。
在同一個會話不同作用域的時候(例如:大存儲過程內含小存儲過程的場景),使用同一個臨時表名,會引起錯亂。
只要把這個@operNum=#Tab.oper_num的欄位獲取的值注釋掉,就可以正常運行,不然運行的時候就一直'提示oper_num列無效',就很納悶,這個欄位是表中存在的,怎麼會無效呢。
反復查找原因,發現原來是那個功能使用的存儲過程裡面有一段執行更新這個表的代碼,而剛好在這個更新語句前面有個同樣名的#Tab臨時表,於是,在執行存儲過程事務進程的時候,觸發器在事務內就直接使用前面產生的臨時表進行賦值操作,而導致列名不匹配,無效。
D. hive底層依賴hadoop中的哪些框架
1. 什麼是hive
•Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供類SQL查詢功能。
•本質是將HQL轉換為MapRece程序
2. 為什麼使用hive
•操作介面採用類SQL語法,提供快速開發的能力
•避免了去寫MapRece,減少開發人員的學習成本
•擴展功能很方便
3. hive 特點
•可擴展
Hive可以自由的擴展集群的規模,一般情況下不需要重啟服務
•延展性
Hive支持用戶自定義函數,用戶可以根據自己的需求來實現自己的函數
•容錯
良好的容錯性,節點出現問題SQL仍可完成執行
4. hive 與hadoop 關系
發出HQL —> hive 轉換成maprece—> maprece—> 對hdfs進行操作
5. hive 與傳統數據對比
Hive
RDBMS
查詢語言
HQL
SQL
數據存儲
HDFS
Raw Device or Local FS
執行
MapRece
Excutor
執行延遲
高
低
處理數據規模
大
小
索引
0.8版本後加入點陣圖索引
有復雜的索引
6. hive 的未來
•增加更多類似傳統資料庫的功能,如存儲過程
•提高轉換成的MapRece性能
•擁有真正的數據倉庫的能力
•UI部分加強
Hive是基於Hadoop平台的,它提供了類似SQL一樣的查詢語言HQL。有了Hive,如果使用過SQL語言,並且不理解Hadoop MapRece運行原理,也就無法通過編程來實現MR,但是你仍然可以很容易地編寫出特定查詢分析的HQL語句,通過使用類似SQL的語法,將HQL查詢語句提交Hive系統執行查詢分析,最終Hive會幫你轉換成底層Hadoop能夠理解的MR Job。
對於最基本的HQL查詢我們不再累述,這里主要說明Hive中進行統計分析時使用到的JOIN操作。在說明Hive JOIN之前,我們先簡單說明一下,Hadoop執行MR Job的基本過程(運行機制),能更好的幫助我們理解HQL轉換到底層的MR Job後是如何執行的。我們重點說明MapRece執行過程中,從Map端到Rece端這個過程(Shuffle)的執行情況,如圖所示(來自《Hadoop: The Definitive Guide》)
基本執行過程,描述如下:
- 一個InputSplit輸入到map,會運行我們實現的Mapper的處理邏輯,對數據進行映射操作。
- map輸出時,會首先將輸出中間結果寫入到map自帶的buffer中(buffer默認大小為100M,可以通過io.sort.mb配置)。
- map自帶的buffer使用容量達到一定門限(默認0.80或80%,可以通過io.sort.spill.percent配置),一個後台線程會准備將buffer中的數據寫入到磁碟。
- 這個後台線程在將buffer中數據寫入磁碟之前,會首先將buffer中的數據進行partition(分區,partition數為Recer的個數),對於每個的數據會基於Key進行一個in-memory排序。
- 排序後,會檢查是否配置了Combiner,如果配置了則直接作用到已排序的每個partition的數據上,對map輸出進行化簡壓縮(這樣寫入磁碟的數據量就會減少,降低I/O操作開銷)。
- 現在可以將經過處理的buffer中的數據寫入磁碟,生成一個文件(每次buffer容量達到設置的門限,都會對應著一個寫入到磁碟的文件)。
- map任務結束之前,會對輸出的多個文件進行合並操作,合並成一個文件(若map輸出至少3個文件,在多個文件合並後寫入之前,如果配置了Combiner,則會運行來化簡壓縮輸出的數據,文件個數可以通過min.num.splits.for.combine配置;如果指定了壓縮map輸出,這里會根據配置對數據進行壓縮寫入磁碟),這個文件仍然保持partition和排序的狀態。
- rece階段,每個rece任務開始從多個map上拷貝屬於自己partition(map階段已經做好partition,而且每個rece任務知道應該拷貝哪個partition;拷貝過程是在不同節點之間,Recer上拷貝線程基於HTTP來通過網路傳輸數據)。
- 每個rece任務拷貝的map任務結果的指定partition,也是先將數據放入到自帶的一個buffer中(buffer默認大小為Heap內存的70%,可以通過mapred.job.shuffle.input.buffer.percent配置),如果配置了map結果進行壓縮,則這時要先將數據解壓縮後放入buffer中。
- rece自帶的buffer使用容量達到一定門限(默認0.66或66%,可以通過mapred.job.shuffle.merge.percent配置),或者buffer中存放的map的輸出的數量達到一定門限(默認1000,可以通過mapred.inmem.merge.threshold配置),buffer中的數據將會被寫入到磁碟中。
- 在將buffer中多個map輸出合並寫入磁碟之前,如果設置了Combiner,則會化簡壓縮合並的map輸出。
- 當屬於該recer的map輸出全部拷貝完成,則會在recer上生成多個文件,這時開始執行合並操作,並保持每個map輸出數據中Key的有序性,將多個文件合並成一個文件(在rece端可能存在buffer和磁碟上都有數據的情況,這樣在buffer中的數據可以減少一定量的I/O寫入操作開銷)。
- 最後,執行rece階段,運行我們實現的Recer中化簡邏輯,最終將結果直接輸出到HDFS中(因為Recer運行在DataNode上,輸出結果的第一個replica直接在存儲在本地節點上)。
通過上面的描述我們看到,在MR執行過程中,存在Shuffle過程的MR需要在網路中的節點之間(Mapper節點和Recer節點)拷貝數據,如果傳輸的數據量很大會造成一定的網路開銷。而且,Map端和Rece端都會通過一個特定的buffer來在內存中臨時緩存數據,如果無法根據實際應用場景中數據的規模來使用Hive,尤其是執行表的JOIN操作,有可能很浪費資源,降低了系統處理任務的效率,還可能因為內存不足造成OOME問題,導致計算任務失敗。
下面,我們說明Hive中的JOIN操作,針對不同的JOIN方式,應該如何來實現和優化:
生成一個MR Job
多表連接,如果多個表中每個表都使用同一個列進行連接(出現在JOIN子句中),則只會生成一個MR Job,例如:
1 SELECTa.val, b.val, c.valFROMaJOINbON(a.key= b.key1)JOINcON(c.key= b.key1)
三個表a、b、c都分別使用了同一個欄位進行連接,亦即同一個欄位同時出現在兩個JOIN子句中,從而只生成一個MR Job。
生成多個MR Job
多表連接,如果多表中,其中存在一個表使用了至少2個欄位進行連接(同一個表的至少2個列出現在JOIN子句中),則會至少生成2個MR Job,例如:
1 SELECTa.val, b.val, c.valFROMaJOINbON(a.key= b.key1)JOINcON(c.key= b.key2)
三個表基於2個欄位進行連接,這兩個欄位b.key1和b.key2同時出現在b表中。連接的過程是這樣的:首先a和b表基於a.key和b.key1進行連接,對應著第一個MR Job;表a和b連接的結果,再和c進行連接,對應著第二個MR Job。
E. hive怎麼從資料庫中提取數據
可以使用Sqoop、DataX、或者Hive存儲過程來完成。搜索"lxw的大數據田地",裡面有很多關於Hive的文章,肯定能找到你想要的。
F. ORACLE存儲過程怎麼遷移到HIVE
直接新建一個Job,裡面些匿名PLSQL程序塊即可: BEGIN INSERT INTO B SELECT A.ID, A.ANAME, A,ATYPE FROM A WHERE NOT EXISTS( SELECT 1 FROM B WHERE B.BID = A.AID AND B.BNAME=A.ANAME); END;
G. hive中怎麼在當下資料庫操作另一個資料庫數據
可以使用Sqoop、DataX、或者Hive存儲過程來完成。搜索"lxw的大數據田地",裡面有很多關於Hive的文章,肯定能找到你想要的。
H. 好用的數據分析軟體有哪些
1、思邁特軟體Smartbi專注於商業智能(BI)、數據分析軟體產品與服務。2、數據處理工具:Excel。數據分析師,在有些公司也會有數據產品經理、數據挖掘工程師等等。他們最初級最主要的工具就是Excel。有些公司也會涉及到像Visio,Xmind、PPT等設計圖標數據分析方面的高級技巧。
3、資料庫:MySQL。Excel如果能夠玩的很轉,能勝任一部分數據量不是很大的公司。但是基於Excel處理數據能力有限,如果想勝任中型的互聯網公司中數據分析崗位還是比較困難。因此需要學會資料庫技術,一般Mysql。
4、數據可視化:Tableau & 思邁特軟體。如果說前面2條是數據處理的技術,那麼在如今「顏值為王」的現在,如何將數據展現得更好看,讓別人更願意看,這也是一個技術活。
5、大數據分析:SPSS & Python& HiveSQL 等。如果說Excel是「輕數據處理工具」,Mysql是「中型數據處理工具」那麼,大數據分析,涉及的面就非常廣泛,技術點涉及的也比較多。這也就是為什麼目前互聯網公司年薪百萬重金難求大數據分析師的原因。
數據分析軟體靠不靠譜,來試試Smartbi,思邁特軟體Smartbi經過多年持續自主研發,凝聚大量商業智能最佳實踐經驗,整合了各行業的數據分析和決策支持的功能需求。滿足最終用戶在企業級報表、數據可視化分析、自助探索分析、數據挖掘建模、AI智能分析等大數據分析需求。
思邁特軟體Smartbi個人用戶全功能模塊長期免費試用
馬上免費體驗:Smartbi一站式大數據分析平台
I. 如何用sql來寫動態sql,本文主要是hiveql
動態SQL語句在編譯時,並不知道SQL語句的內容,SQL語句的內容「不確定」,只有在運行時,才建立、解析並執行SQL語句。利用動態SQL,在存儲過程中,可以動態創建表、視圖、觸發器等。
動態SQL主要用在以下兩種場景:
編譯時,無法確定SQL語句的內容
靜態SQL不支持的SQL語句,就比如上面代碼中的create
我們可以看到,靜態SQL在編譯時就已經提前檢查了SQL正確性,以及涉及的資料庫對象和對應的許可權關系,而動態SQL則需要在運行的時候才能判斷,所以,靜態SQL的效率高於動態SQL。說了這么多概念的東西,我們現在就來實際看看如何編寫動態SQL,以及如何運行動態SQL。
J. etl工程師沒基礎能學嗎
技術方面:需要學習使用數據源、目標端工具的基本使用(如 oracle MySQL hive等);需要學習etl工具的安裝配置常用錯誤解決(如 kettle DataStage infa sqoop datax等)理論方面:懂得數倉分層架構,維度建模等。從ETL的字面來看,它主要包含三大階段,分別是數據抽取、數據轉換、數據載入。
1.數據抽取這個階段的主要目標是匯總多種數據源,為下一步的轉換做准備。2.數據轉換這個階段是ETL的核心環節,也是最復雜的環節。它的主要目標是將抽取到的各種數據,進行數據的清洗、格式的轉換、缺失值填補、剔除重復等操作,最終得到一份格式統一、高度結構化、數據質量高、兼容性好的數據,為後續的分析決策提供可靠的數據支持。3.數據載入這個階段的主要目標是把數據載入至目的地,比如數據倉庫中。通常的做法是,將處理好的數據寫成特定格式(如parquet、csv等)的文件,然後再把文件掛載到指定的表分區上。也有些表的數據量很小,不會採用分區表,而是直接生成最終的數據表。了解了ETL這部分的工作主要做什麼,接下來再來說作為ETL工程師需要具備哪些技能,這些也就是需要學習的重點——1、精通SQL語言,具備存儲過程開發能力,能熟練進行SQL查詢優化;2、熟悉Hive數據倉庫設計,了解數據倉庫模型及思想、維度建模思想,了解數據倉庫;3、熟悉Hadoop、Spark、Flink、Kafka等相關技術;4、熟練Python、Java中至少一種語言;5、熟悉Mysql、Nosql等常見資料庫。