① 大數據需要學編程嗎
導讀:
第一章:初識Hadoop
第二章:更高效的WordCount
第三章:把別處的數據搞到Hadoop上
第四章:把Hadoop上的數據搞到別處去
第五章:快一點吧,我的SQL
第六章:一夫多妻制
第七章:越來越多的分析任務
第八章:我的數據要實時
第九章:我的數據要對外
第十章:牛逼高大上的機器學習
數據量大,TB->PB
數據類型繁多,結構化、非結構化文本、日誌、視頻、圖片、地理位置等;
商業價值高,但是這種價值需要在海量數據之上,通過數據分析與機器學習更快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
Hadoop 1.0、Hadoop 2.0
MapRece、HDFS
NameNode、DataNode
JobTracker、TaskTracker
Yarn、ResourceManager、NodeManager
0和Hadoop2.0的區別;
MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用Java程序統計出現次數最多的10個單詞及次數);
HDFS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;
自己會寫簡單的MapRece程序,運行出現問題,知道在哪裡查看日誌;
會寫簡單的SELECT、WHERE、GROUP BY等SQL語句;
Hive SQL轉換成MapRece的大致流程;
Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;
為什麼Spark比MapRece快。
使用SparkSQL代替Hive,更快的運行SQL。
使用Kafka完成數據的一次收集,多次消費架構。
自己可以寫程序完成Kafka的生產者和消費者。
經常有初學者在博客和QQ問我,自己想往大數據方向發展,該學哪些技術,學習路線是什麼樣的,覺得大數據很火,就業很好,薪資很高。如果自己很迷茫,為了這些原因想往大數據方向發展,也可以,那麼我就想問一下,你的專業是什麼,對於計算機/軟體,你的興趣是什麼?是計算機專業,對操作系統、硬體、網路、伺服器感興趣?是軟體專業,對軟體開發、編程、寫代碼感興趣?還是數學、統計學專業,對數據和數字特別感興趣。。
其實這就是想告訴你的大數據的三個發展方向,平台搭建/優化/運維/監控、大數據開發/設計/架構、數據分析/挖掘。請不要問我哪個容易,哪個前景好,哪個錢多。
先扯一下大數據的4V特徵:
現如今,正式為了應對大數據的這幾個特點,開源的大數據框架越來越多,越來越強,先列舉一些常見的:
文件存儲:Hadoop HDFS、Tachyon、KFS
離線計算:Hadoop MapRece、Spark
流式、實時計算:Storm、Spark Streaming、S4、Heron
K-V、NOSQL資料庫:HBase、Redis、MongoDB
資源管理:YARN、Mesos
日誌收集:Flume、Scribe、Logstash、Kibana
消息系統:Kafka、StormMQ、ZeroMQ、RabbitMQ
查詢分析:Hive、Impala、Pig、Presto、Phoenix、SparkSQL、Drill、Flink、Kylin、Druid
分布式協調服務:Zookeeper
集群管理與監控:Ambari、Ganglia、Nagios、Cloudera Manager
數據挖掘、機器學習:Mahout、Spark MLLib
數據同步:Sqoop
任務調度:Oozie
……
眼花了吧,上面的有30多種吧,別說精通了,全部都會使用的,估計也沒幾個。
就我個人而言,主要經驗是在第二個方向(開發/設計/架構),且聽聽我的建議吧。
第一章:初識Hadoop
1.1 學會網路與Google
不論遇到什麼問題,先試試搜索並自己解決。
Google首選,翻不過去的,就用網路吧。
1.2 參考資料首選官方文檔
特別是對於入門來說,官方文檔永遠是首選文檔。
相信搞這塊的大多是文化人,英文湊合就行,實在看不下去的,請參考第一步。
1.3 先讓Hadoop跑起來
Hadoop可以算是大數據存儲和計算的開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。
關於Hadoop,你至少需要搞清楚以下是什麼:
自己搭建Hadoop,請使用第一步和第二步,能讓它跑起來就行。
建議先使用安裝包命令行安裝,不要使用管理工具安裝。
另外:Hadoop1.0知道它就行了,現在都用Hadoop 2.0.
1.4 試試使用Hadoop
HDFS目錄操作命令;
上傳、下載文件命令;
提交運行MapRece示常式序;
打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。
知道Hadoop的系統日誌在哪裡。
1.5 你該了解它們的原理了
MapRece:如何分而治之;
HDFS:數據到底在哪裡,什麼是副本;
Yarn到底是什麼,它能幹什麼;
NameNode到底在幹些什麼;
ResourceManager到底在幹些什麼;
1.6 自己寫一個MapRece程序
請仿照WordCount例子,自己寫一個(照抄也行)WordCount程序,
打包並提交到Hadoop運行。
你不會Java?Shell、Python都可以,有個東西叫Hadoop Streaming。
如果你認真完成了以上幾步,恭喜你,你的一隻腳已經進來了。
第二章:更高效的WordCount
2.1 學點SQL吧
你知道資料庫嗎?你會寫SQL嗎?
如果不會,請學點SQL吧。
2.2 SQL版WordCount
在1.6中,你寫(或者抄)的WordCount一共有幾行代碼?
給你看看我的:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,我這一句就搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。
2.3 SQL On Hadoop之Hive
什麼是Hive?官方給的解釋是:
The Apache Hive data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage and queried using SQL syntax.
為什麼說Hive是數據倉庫工具,而不是資料庫工具呢?有的朋友可能不知道數據倉庫,數據倉庫是邏輯上的概念,底層使用的是資料庫,數據倉庫中的數據有這兩個特點:最全的歷史數據(海量)、相對穩定的;所謂相對穩定,指的是數據倉庫不同於業務系統資料庫,數據經常會被更新,數據一旦進入數據倉庫,很少會被更新和刪除,只會被大量查詢。而Hive,也是具備這兩個特點,因此,Hive適合做海量數據的數據倉庫工具,而不是資料庫工具。
2.4 安裝配置Hive
請參考1.1 和 1.2 完成Hive的安裝配置。可以正常進入Hive命令行。
2.5 試試使用Hive
請參考1.1 和 1.2 ,在Hive中創建wordcount表,並運行2.2中的SQL語句。
在Hadoop WEB界面中找到剛才運行的SQL任務。
看SQL查詢結果是否和1.4中MapRece中的結果一致。
2.6 Hive是怎麼工作的
明明寫的是SQL,為什麼Hadoop WEB界面中看到的是MapRece任務?
2.7 學會Hive的基本命令
創建、刪除表;
載入數據到表;
下載Hive表的數據;
請參考1.2,學習更多關於Hive的語法和命令。
如果你已經按照《寫給大數據開發初學者的話》中第一章和第二章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
從上面的學習,你已經了解到,HDFS是Hadoop提供的分布式存儲框架,它可以用來存儲海量數據,MapRece是Hadoop提供的分布式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapRece,提交運行。
此時,你的」大數據平台」是這樣的:
那麼問題來了,海量數據如何到HDFS上呢?
第三章:把別處的數據搞到Hadoop上
此處也可以叫做數據採集,把各個數據源的數據採集到Hadoop上。
3.1 HDFS PUT命令
這個在前面你應該已經使用過了。
put命令在實際環境中也比較常用,通常配合shell、python等腳本語言來使用。
建議熟練掌握。
3.2 HDFS API
HDFS提供了寫數據的API,自己用編程語言將數據寫入HDFS,put命令本身也是使用API。
實際環境中一般自己較少編寫程序使用API來寫數據到HDFS,通常都是使用其他框架封裝好的方法。比如:Hive中的INSERT語句,Spark中的saveAsTextfile等。
建議了解原理,會寫Demo。
3.3 Sqoop
Sqoop是一個主要用於Hadoop/Hive與傳統關系型資料庫Oracle/MySQL/SQLServer等之間進行數據交換的開源框架。
就像Hive把SQL翻譯成MapRece一樣,Sqoop把你指定的參數翻譯成MapRece,提交到Hadoop運行,完成Hadoop與其他資料庫之間的數據交換。
自己下載和配置Sqoop(建議先使用Sqoop1,Sqoop2比較復雜)。
了解Sqoop常用的配置參數和方法。
使用Sqoop完成從MySQL同步數據到HDFS;
使用Sqoop完成從MySQL同步數據到Hive表;
PS:如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。
3.4 Flume
Flume是一個分布式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關系型資料庫的數據採集和傳輸。
Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。
因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。
下載和配置Flume。
使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;
PS:Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
之所以介紹這個,是因為我們公司目前使用的Hadoop與關系型資料庫數據交換的工具,就是之前基於DataX開發的,非常好用。
可以參考我的博文《異構數據源海量數據交換工具-Taobao DataX 下載和使用》。
現在DataX已經是3.0版本,支持很多數據源。
你也可以在其之上做二次開發。
PS:有興趣的可以研究和使用一下,對比一下它與Sqoop。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
第四章:把Hadoop上的數據搞到別處去
前面介紹了如何把數據源的數據採集到Hadoop上,數據到Hadoop上之後,便可以使用Hive和MapRece進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?
其實,此處的方法和第三章基本一致的。
4.1 HDFS GET命令
把HDFS上的文件GET到本地。需要熟練掌握。
4.2 HDFS API
同3.2.
4.3 Sqoop
同3.3.
使用Sqoop完成將HDFS上的文件同步到MySQL;
使用Sqoop完成將Hive表中的數據同步到MySQL;
4.4 DataX
同3.5.
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
如果你已經按照《寫給大數據開發初學者的話2》中第三章和第四章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;
你已經知道sqoop(或者還有DataX)是HDFS和其他數據源之間的數據交換工具;
你已經知道flume可以用作實時的日誌採集。
從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapRece來分析數據,把分析結果同步到其他數據源。
接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapRece來執行。
第五章:快一點吧,我的SQL
其實大家都已經發現Hive後台使用MapRece作為執行引擎,實在是有點慢。
因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.
這三種框架基於半內存或者全內存,提供了SQL介面來快速查詢分析Hadoop上的數據。關於三者的比較,請參考1.1.
我們目前使用的是SparkSQL,至於為什麼用SparkSQL,原因大概有以下吧:
使用Spark還做了其他事情,不想引入過多的框架;
Impala對內存的需求太大,沒有過多資源部署;
5.1 關於Spark和SparkSQL
什麼是Spark,什麼是SparkSQL。
Spark有的核心概念及名詞解釋。
SparkSQL和Spark是什麼關系,SparkSQL和Hive是什麼關系。
SparkSQL為什麼比Hive跑的快。
5.2 如何部署和運行SparkSQL
Spark有哪些部署模式?
如何在Yarn上運行SparkSQL?
使用SparkSQL查詢Hive中的表。
PS: Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。
關於Spark和SparkSQL,可參考http://lxw1234.com/archives/category/spark
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
第六章:一夫多妻制
請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。
在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。
為了滿足數據的一次採集、多次消費的需求,這里要說的便是Kafka。
6.1 關於Kafka
什麼是Kafka?
Kafka的核心概念及名詞解釋。
6.2 如何部署和使用Kafka
使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。
使用Java程序自己編寫並運行生產者和消費者程序。
Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。
如果你已經按照《寫給大數據開發初學者的話3》中第五章和第六章的流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務
不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。
7.1 Apache Oozie
1. Oozie是什麼?有哪些功能?
2. Oozie可以調度哪些類型的任務(程序)?
3. Oozie可以支持哪些任務觸發方式?
4. 安裝配置Oozie。
第八章:我的數據要實時
在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。
8.1 Storm
1. 什麼是Storm?有哪些可能的應用場景?
2. Storm由哪些核心組件構成,各自擔任什麼角色?
3. Storm的簡單安裝和部署。
4. 自己編寫Demo程序,使用Storm完成實時數據流計算。
8.2 Spark Streaming
1. 什麼是Spark Streaming,它和Spark是什麼關系?
2. Spark Streaming和Storm比較,各有什麼優缺點?
3. 使用Kafka + Spark Streaming,完成實時計算的Demo程序。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的:
至此,你的大數據平台底層架構已經成型了,其中包括了數據採集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。
第九章:我的數據要對外
通常對外(業務)提供數據訪問,大體上包含以下方面:
離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;離線數據的提供可以採用Sqoop、DataX等離線數據交換工具。
實時:比如,在線網站的推薦系統,需要實時從數據平台中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。
根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
OLAP分析:OLAP除了要求底層的數據模型比較規范,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那麼Kylin是最好的選擇。
即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。
這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。
如果你已經掌握了如何很好的對外(業務)提供數據,那麼你的「大數據平台」應該是這樣的:
第十章:牛逼高大上的機器學習
關於這塊,我這個門外漢也只能是簡單介紹一下了。數學專業畢業的我非常慚愧,很後悔當時沒有好好學數學。
在我們的業務中,遇到的能用機器學習解決的問題大概這么三類:
分類問題:包括二分類和多分類,二分類就是解決了預測的問題,就像預測一封郵件是否垃圾郵件;多分類解決的是文本的分類;
聚類問題:從用戶搜索過的關鍵詞,對用戶進行大概的歸類。
推薦問題:根據用戶的歷史瀏覽和點擊行為進行相關推薦。
大多數行業,使用機器學習解決的,也就是這幾類問題
② 求大數據分析技術
目前,大數據領域每年都會涌現出大量新的技術,成為大數據獲取、存儲、處理分析或可視化的有效手段。大數據技術能夠將大規模數據中隱藏的信息和知識挖掘出來,為人類社會經濟活動提供依據,提高各個領域的運行效率,甚至整個社會經濟的集約化程度。
01 大數據生命周期
③ 為什麼Impala要使用C++語言,而不是Java
Impala的最大特點也是最大賣點就是它的快速
因為c++直接編譯成機器指令的,執行效率相對java要高一些,java是在jvm虛擬機里運行的,效率相對c++要低一些。
就好比蘋果手機和android手機一樣,android用java開發的app體驗總的來說流暢度還是沒有objective-c、swift編寫的app(objective-c、swift也是編譯成機器指令的)好
④ impalashell的用法 shell腳本怎麼寫
我們可以使用Impala Shell來運行查詢任務。當然首先服務端的Impala必須先運行起來。
(1)運行Impala服務端
1.運行statestored
GLOG_v=1 nohup /usr/bin/statestored -state_store_port=24000
2.運行impalad
GLOG_v=1 impalad -state_store_host=slaver1 -state_store_port=24000 -ipaddress=**** -nn=master -nn_port=9000
(2)運行Impala客戶端
1.啟動Impala shell,連接到Impalad
2.運行connect命令連接到Impala instance
按兩次Tab鍵或者輸入help命令可以查看可運行的命令
(1)按兩次Tab鍵,顯示如下:
(2)輸入help命令,顯示如下:
運行select命令進行查詢
⑤ 大數據分析應該掌握哪些基礎知識呢
前言,學大數據要先換電腦:
保證電腦4核8G內存64位操作系統,盡量有ssd做系統盤,否則卡到你喪失信心。硬碟越大越好。
1,語言要求
java剛入門的時候要求javase。
scala是學習spark要用的基本使用即可。
後期深入要求:
java NIO,netty,多線程,ClassLoader,jvm底層及調優等,rpc。
2,操作系統要求
linux 基本的shell腳本的使用。
crontab的使用,最多。
cpu,內存,網路,磁碟等瓶頸分析及狀態查看的工具。
scp,ssh,hosts的配置使用。
telnet,ping等網路排查命令的使用
3,sql基本使用
sql是基礎,hive,sparksql等都需要用到,況且大部分企業也還是以數據倉庫為中心,少不了sql。
sql統計,排序,join,group等,然後就是sql語句調優,表設計等。
4,大數據基本了解
Zookeeper,hadoop,hbase,hive,sqoop,flume,kafka,spark,storm等這些框架的作用及基本環境的搭建,要熟練,要會運維,瓶頸分析。
5,maprece及相關框架hive,sqoop
深入了解maprece的核心思想。尤其是shuffle,join,文件輸入格式,map數目,rece數目,調優等。
6,hive和hbase等倉庫
hive和hbase基本是大數據倉庫的標配。要回用,懂調優,故障排查。
hbase看浪尖hbase系列文章。hive後期更新。
7,消息隊列的使用
kafka基本概念,使用,瓶頸分析。看浪尖kafka系列文章。
8,實時處理系統
storm和spark Streaming
9,spark core和sparksql
spark用於離線分析的兩個重要功能。
10,最終方向決策
a),運維。(精通整套系統及故障排查,會寫運維腳本啥的。)
b),數據分析。(演算法精通)
c),平台開發。(源碼精通)
自學還是培訓?
無基礎的同學,培訓之前先搞到視頻通學一遍,防止盲目培訓跟不上講師節奏,浪費時間,精力,金錢。
有基礎的盡量搞點視頻學基礎,然後跟群里大牛交流,前提是人家願意,
想辦法跟大牛做朋友才是王道。
⑥ Hadoop的應用領域有哪些
Hadoop本身是一個生態圈. 整個生態圈裡包含了底層的分布式存儲HDFS, 計算框架Maprece, 集群調度管理工具Zookeeper,集群資源管理工具YARN, 分布式資料庫HBASE等等. 我拿淘寶的店鋪淘生意舉一個例子吧, 可能不是那麼准確:
比如一個店鋪一天有10萬的訪客量, 你想分析的諸如這些訪客來自哪裡,性別,年齡,訪問過什麼商品,買過什麼商品等等都會在訪問網站的時候留下相關的痕跡文件(簡稱日誌),比如這些文件一天就有1TB,那麼你怎麼存大文件?一個客戶可能對應的特性就有上萬條,你怎麼在資料庫里存大表,又怎麼分析用戶特性?這些都依賴於Hadoop的框架.
現在假設你有一個10台機器的集群:
HDFS:可以將你每天生成的1TB文件拆分存儲在這個集群內. Zookeeper可以監控你的文件系統以及其他主從框架的服務是否正常在線. YARN則可在集群內協調你的CPU/內存資源,當有任務的時候可以合理分配資源進行計算,Maprece則是執行分析計算的基本框架,HBASE則可以將你分析後的數據保存在整個分布式集群內. 以供其它應用來進行進一步的分析展示. 其它的Spark/Storm/HIVE/Impala/cassandra 等等在這就不說了.
總之,涉及超大數據進行存儲分析等領域,都是以Hadoop為基本框架的,至少底層都是HDFS 純手打,忘採納.
⑦ 什麼是impala,如何安裝使用Impala
一、Impala簡介
Cloudera Impala對你存儲在Apache Hadoop在HDFS,HBase的數據提供直接查詢互動的SQL。除了像Hive使用相同的統一存儲平台,Impala也使用相同的元數據,SQL語法(Hive SQL),ODBC驅動程序和用戶界面(Hue Beeswax)。Impala還提供了一個熟悉的面向批量或實時查詢和統一平台。
二、Impala安裝
1.安裝要求
(1)軟體要求
Red Hat Enterprise Linux (RHEL)/CentOS 6.2 (64-bit)
CDH 4.1.0 or later
Hive
MySQL
(2)硬體要求
在Join查詢過程中需要將數據集載入內存中進行計算,因此對安裝Impalad的內存要求較高。
2、安裝准備
(1)操作系統版本查看
>more/etc/issue
CentOSrelease 6.2 (Final)
Kernel \ron an \m
(2)機器准備
10.28.169.112mr5
10.28.169.113mr6
10.28.169.114mr7
10.28.169.115mr8
各機器安裝角色
mr5:NameNode、ResourceManager、SecondaryNameNode、Hive、impala-state-store
mr6、mr7、mr8:DataNode、NodeManager、impalad
(3)用戶准備
在各個機器上新建用戶hadoop,並打通ssh
(4)軟體准備
到cloudera官網下載:
Hadoop:
hadoop-2.0.0-cdh4.1.2.tar.gz
hive:
hive-0.9.0-cdh4.1.2.tar.gz
impala:
impala-0.3-1.p0.366.el6.x86_64.rpm
impala-debuginfo-0.3-1.p0.366.el6.x86_64.rpm
impala-server-0.3-1.p0.366.el6.x86_64.rpm
impala-shell-0.3-1.p0.366.el6.x86_64.rpm
impala依賴包下載:
4、hadoop-2.0.0-cdh4.1.2安裝
(1)安裝包準備
hadoop用戶登錄到mr5機器,將hadoop-2.0.0-cdh4.1.2.tar.gz上傳到/home/hadoop/目錄下並解壓:
tar zxvf hadoop-2.0.0-cdh4.1.2.tar.gz
(2)配置環境變數
修改mr5機器hadoop用戶主目錄/home/hadoop/下的.bash_profile環境變數:
exportJAVA_HOME=/usr/jdk1.6.0_30
exportJAVA_BIN=${JAVA_HOME}/bin
exportCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_OPTS="-Djava.library.path=/usr/local/lib-server -Xms1024m -Xmx2048m -XX:MaxPermSize=256m -Djava.awt.headless=true-Dsun.net.client.defaultReadTimeout=600
00-Djmagick.systemclassloader=no -Dnetworkaddress.cache.ttl=300-Dsun.net.inetaddr.ttl=300"
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=$HADOOP_HOME
exportHADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
export PATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(3)修改配置文件
在機器mr5上hadoop用戶登錄修改hadoop的配置文件(配置文件目錄:hadoop-2.0.0-cdh4.1.2/etc/hadoop)
(1)、slaves :
添加以下節點
mr6
mr7
mr8
(2)、hadoop-env.sh :
增加以下環境變數
exportJAVA_HOME=/usr/jdk1.6.0_30
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(3)、core-site.xml :
fs.default.name
hdfs://mr5:9000
The name of the defaultfile system.Either the literal string "local" or a host:port forNDFS.
true
io.native.lib.available
true
hadoop.tmp.dir
/home/hadoop/tmp
A base for other temporarydirectories.
(4)、hdfs-site.xml :
dfs.namenode.name.dir
file:/home/hadoop/dfsdata/name
Determines where on thelocal filesystem the DFS name node should store the name table.If this is acomma-delimited list of directories,then name table is replicated in all of thedirectories,for rendancy.
true
dfs.datanode.data.dir
file:/home/hadoop/dfsdata/data
Determines where on thelocal filesystem an DFS data node should store its blocks.If this is acomma-delimited list of directories,then data will be stored in all nameddirectories,typically on different devices.Directories that do not exist areignored.
true
dfs.replication
3
dfs.permission
false
(5)、mapred-site.xml:
maprece.framework.name
yarn
maprece.job.tracker
hdfs://mr5:9001
true
maprece.task.io.sort.mb
512
maprece.task.io.sort.factor
100
maprece.rece.shuffle.parallelcopies
50
maprece.cluster.temp.dir
file:/home/hadoop/mapreddata/system
true
maprece.cluster.local.dir
file:/home/hadoop/mapreddata/local
true
(6)、yarn-env.sh :
增加以下環境變數
exportJAVA_HOME=/usr/jdk1.6.0_30
exportHADOOP_HOME=/home/hadoop/hadoop-2.0.0-cdh4.1.2
exportHADOOP_PREFIX=${HADOOP_HOME}
exportHADOOP_MAPRED_HOME=${HADOOP_HOME}
exportHADOOP_COMMON_HOME=${HADOOP_HOME}
exportHADOOP_HDFS_HOME=${HADOOP_HOME}
exportHADOOP_YARN_HOME=${HADOOP_HOME}
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
exportJAVA_HOME JAVA_BIN PATH CLASSPATH JAVA_OPTS
exportHADOOP_LIB=${HADOOP_HOME}/lib
exportHADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
(7)、yarn-site.xml:
yarn.resourcemanager.address
mr5:8080
yarn.resourcemanager.scheler.address
mr5:8081
yarn.resourcemanager.resource-tracker.address
mr5:8082
yarn.nodemanager.aux-services
maprece.shuffle
yarn.nodemanager.aux-services.maprece.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.nodemanager.local-dirs
file:/home/hadoop/nmdata/local
thelocal directories used by the nodemanager
yarn.nodemanager.log-dirs
file:/home/hadoop/nmdata/log
thedirectories used by Nodemanagers as log directories
(4)拷貝到其他節點
(1)、在mr5上配置完第2步和第3步後,壓縮hadoop-2.0.0-cdh4.1.2
rm hadoop-2.0.0-cdh4.1.2.tar.gz
tar zcvf hadoop-2.0.0-cdh4.1.2.tar.gz hadoop-2.0.0-cdh4.1.2
然後將hadoop-2.0.0-cdh4.1.2.tar.gz遠程拷貝到mr6、mr7、mr8機器上
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr6:/home/hadoop/
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr7:/home/hadoop/
scp/home/hadoop/hadoop-2.0.0-cdh4.1.2.tar.gz hadoop@mr8:/home/hadoop/
(2)、將mr5機器上hadoop用戶的配置環境的文件.bash_profile遠程拷貝到mr6、mr7、mr8機器上
scp/home/hadoop/.bash_profile hadoop@mr6:/home/hadoop/
scp/home/hadoop/.bash_profile hadoop@mr7:/home/hadoop/
scp/home/hadoop/.bash_profile hadoop@mr8:/home/hadoop/
拷貝完成後,在mr5、mr6、mr7、mr8機器的/home/hadoop/目錄下執行
source.bash_profile
使得環境變數生效
(5)啟動hdfs和yarn
以上步驟都執行完成後,用hadoop用戶登錄到mr5機器依次執行:
hdfsnamenode -format
start-dfs.sh
start-yarn.sh
通過jps命令查看:
mr5成功啟動了NameNode、ResourceManager、SecondaryNameNode進程;
mr6、mr7、mr8成功啟動了DataNode、NodeManager進程。
(6)驗證成功狀態
通過以下方式查看節點的健康狀態和作業的執行情況:
瀏覽器訪問(本地需要配置hosts)
5、hive-0.9.0-cdh4.1.2安裝
(1)安裝包準備
使用hadoop用戶上傳hive-0.9.0-cdh4.1.2到mr5機器的/home/hadoop/目錄下並解壓:
tar zxvf hive-0.9.0-cdh4.1.2
(2)配置環境變數
在.bash_profile添加環境變數:
exportHIVE_HOME=/home/hadoop/hive-0.9.0-cdh4.1.2
exportPATH=$PATH:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${HIVE_HOME}/bin
exportHIVE_CONF_DIR=$HIVE_HOME/conf
exportHIVE_LIB=$HIVE_HOME/lib
添加完後執行以下命令使得環境變數生效:
..bash_profile
(3)修改配置文件
修改hive配置文件(配置文件目錄:hive-0.9.0-cdh4.1.2/conf/)
在hive-0.9.0-cdh4.1.2/conf/目錄下新建hive-site.xml文件,並添加以下配置信息:
hive.metastore.local
true
javax.jdo.option.ConnectionURL
jdbc:mysql://10.28.169.61:3306/hive_impala?createDatabaseIfNotExist=true
javax.jdo.option.ConnectionDriverName
com.mysql.jdbc.Driver
javax.jdo.option.ConnectionUserName
hadoop
javax.jdo.option.ConnectionPassword
123456
hive.security.authorization.enabled
false
hive.security.authorization.createtable.owner.grants
ALL
hive.querylog.location
${user.home}/hive-logs/querylog
(4)驗證成功狀態
完成以上步驟之後,驗證hive安裝是否成功
在mr5命令行執行hive,並輸入」show tables;」,出現以下提示,說明hive安裝成功:
>hive
hive>show tables;
OK
Time taken:18.952 seconds
hive>
6、impala安裝
說明:
(1)、以下1、2、3、4步是在root用戶分別在mr5、mr6、mr7、mr8下執行
(2)、以下第5步是在hadoop用戶下執行
(1)安裝依賴包:
安裝mysql-connector-java:
yum install mysql-connector-java
安裝bigtop
rpm -ivh bigtop-utils-0.4+300-1.cdh4.0.1.p0.1.el6.noarch.rpm
安裝libevent
rpm -ivhlibevent-1.4.13-4.el6.x86_64.rpm
如存在其他需要安裝的依賴包,可以到以下鏈接:
http://mirror.bit.e.cn/centos/6.3/os/x86_64/Packages/進行下載。
(2)安裝impala的rpm,分別執行
rpm -ivh impala-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-server-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-debuginfo-0.3-1.p0.366.el6.x86_64.rpm
rpm -ivh impala-shell-0.3-1.p0.366.el6.x86_64.rpm
(3)找到impala的安裝目錄
完成第1步和第2步後,通過以下命令:
find / -name impala
輸出:
/usr/lib/debug/usr/lib/impala
/usr/lib/impala
/var/run/impala
/var/log/impala
/var/lib/alternatives/impala
/etc/default/impala
/etc/alternatives/impala
找到impala的安裝目錄:/usr/lib/impala
(4)配置Impala
在Impala安裝目錄/usr/lib/impala下創建conf,將hadoop中的conf文件夾下的core-site.xml、hdfs-site.xml、hive中的conf文件夾下的hive-site.xml復制到其中。
在core-site.xml文件中添加如下內容:
dfs.client.read.shortcircuit
true
dfs.client.read.shortcircuit.skip.checksum
false
在hadoop和impala的hdfs-site.xml文件中添加如下內容並重啟hadoop和impala:
dfs.datanode.data.dir.perm
755
dfs.block.local-path-access.user
hadoop
dfs.datanode.hdfs-blocks-metadata.enabled
true
(5)啟動服務
(1)、在mr5啟動Impala state store,命令如下:
>GLOG_v=1 nohup statestored-state_store_port=24000 &
如果statestore正常啟動,可以在/tmp/statestored.INFO查看。如果出現異常,可以查看/tmp/statestored.ERROR定位錯誤信息。
(2)、在mr6、mr7、mr8啟動Impalad,命令如下:
mr6:
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr6 -ipaddress=10.28.169.113 &
mr7:
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr7 -ipaddress=10.28.169.114 &
mr8:
>GLOG_v=1 nohup impalad -state_store_host=mr5-nn=mr5 -nn_port=9000 -hostname=mr8 -ipaddress=10.28.169.115 &
如果impalad正常啟動,可以在/tmp/impalad.INFO查看。如果出現異常,可以查看/tmp/ impalad.ERROR定位錯誤信息。
(6)使用shell
使用impala-shell啟動Impala Shell,分別連接各Impalad主機(mr6、mr7、mr8),刷新元數據,之後就可以執行shell命令。相關的命令如下(可以在任意節點執行):
>impala-shell
[Not connected]> connect mr6:21000
[mr6:21000] >refresh
[mr6:21000]>connectmr7:21000
[mr7:21000]>refresh
[mr7:21000]>connectmr8:21000
[mr8:21000]>refresh
(7)驗證成功狀態
使用impala-shell啟動Impala Shell,分別連接各Impalad主機,刷新元數據,之後就可以執行shell命令。相關的命令如下(可以在任意節點執行):
>impala-shell
[Not connected]> connect mr6:21000
[mr6:21000]>refresh
[mr6:21000] >show databases
default
[mr6:21000] >
出現以上提示信息,說明安裝成功。
⑧ 為什麼impala主要場景用於數據分析(應用層)與而hive的使用場景卻是(數倉)
impala擅長的是秒級查詢數據,不擅長數據的清洗和計算
⑨ 基於spark SQL之上的檢索與排序對比性能測試
之前做過一年的spark研發,之前在阿里與騰訊也做了很久的hive,所以對這方面比較了解。
第一:其實快多少除了跟spark與hive本身的技術實現外,也跟機器性能,底層操作系統的參數優化息息相關,不能一概而論。
第二:hive 目前應該還是業界的主流,畢竟快與慢很多時候並非是至關重要的,對於一個生產系統來說,更重要的應該是穩定性,spark畢竟還算是比較新興的事務,快確實快,但是穩定性上距離hive相差甚遠。關於spark我們也修復了很多關於內存泄露的BUG,因為您問的是性能,所以不過多介紹(可以跟我要YDB編程指南,裡面有我對這些BUG的修正)
第三:關於性能,我測試的可能不夠全面,只能在排序與檢索過濾上提供我之前的基於YDB的BLOCK sort測試報告供您參考(網路上貼word太費勁,您可以跟我要 word文檔)。
排序可以說是很多日誌系統的硬指標(如按照時間逆序排序),如果一個大數據系統不能進行排序,基本上是這個系統屬於不可用狀態,排序算得上是大數據系統的一個「剛需」,無論大數據採用的是hadoop,還是spark,還是impala,hive,總之排序是必不可少的,排序的性能測試也是必不可少的。
有著計算奧運會之稱的Sort Benchmark全球排序每年都會舉行一次,每年巨頭都會在排序上進行巨大的投入,可見排序速度的高低有多麼重要!但是對於大多數企業來說,動輒上億的硬體投入,實在劃不來、甚至遠遠超出了企業的項目預算。相比大數據領域的暴力排序有沒有一種更廉價的實現方式?
在這里,我們為大家介紹一種新的廉價排序方法,我們稱為blockSort。
500G的數據300億條數據,只使用4台 16核,32G內存,千兆網卡的虛擬機即可實現 2~15秒的 排序 (可以全表排序,也可以與任意篩選條件篩選後排序)。
一、基本的思想是這樣的,如下圖所示:
1.將數據按照大小預先劃分好,如劃分成 大、中、小三個塊(block)。
2.如果想找最大的數據,那麼只需要在最大的那個塊里去找就可以了。
3.這個快還是有層級結構的,如果每個塊內的數據量很多,可以到下面的子快內進行繼續查找,可以分多個層進行排序。
4.採用這種方法,一個億萬億級別的數據(如long類型),最壞最壞的極端情況也就進行2048次文件seek就可以篩選到結果。
五、哪些用戶適合使用YDB?
1.傳統關系型數據,已經無法容納更多的數據,查詢效率嚴重受到影響的用戶。
2.目前在使用SOLR、ES做全文檢索,覺得solr與ES提供的分析功能太少,無法完成復雜的業務邏輯,或者數據量變多後SOLR與ES變得不穩定,在掉片與均衡中不斷惡性循環,不能自動恢復服務,運維人員需經常半夜起來重啟集群的情況。
3.基於對海量數據的分析,但是苦於現有的離線計算平台的速度和響應時間無滿足業務要求的用戶。
4.需要對用戶畫像行為類數據做多維定向分析的用戶。
5.需要對大量的UGC(User Generate Content)數據進行檢索的用戶。
6.當你需要在大數據集上面進行快速的,互動式的查詢時。
7.當你需要進行數據分析,而不只是簡單的鍵值對存儲時。
8.當你想要分析實時產生的數據時。
ps:說了一大堆,說白了最適合的還是蹤跡分析因為數據量大,數據還要求實時,查詢還要求快。這才是關鍵。
⑩ Hadoop下的impala資料庫語法應用
Impala的SQL解析與執行計劃生成部分是由impala-frontend(Java)實現的,監聽埠是21000。用戶通過Beeswax介面BeeswaxService.query()提交一個請求,在impalad端的處理邏輯是由void ImpalaServer::query(QueryHandle& query_handle, const Query& query)這個函數(在impala-beeswax-server.cc中實現)完成的。
在impala中一條SQL語句先後經歷BeeswaxService.Query->TClientRequest->TExecRequest,最後把TExecRequest交由impala-coordinator分發給多個backend處理。本文主要講一條SQL語句是怎麼一步一步變成TExecRequest的。