A. 大數據雲計算好不好學習
說一下大數據的四個典型的特徵:
數據量大;
數據類型繁多,(結構化、非結構化文本、日誌、視頻、圖片、地理位置等);
商業價值高,但需要在海量數據之上,通過數據分析與機器學習快速的挖掘出來;
處理時效性高,海量數據的處理需求不再局限在離線計算當中。
第一章:Hadoop
在大數據存儲和計算中Hadoop可以算是開山鼻祖,現在大多開源的大數據框架都依賴Hadoop或者與它能很好的兼容。
關於Hadoop,你至少需要搞清楚這些是什麼:
自己學會如何搭建Hadoop,先讓它跑起來。建議先使用安裝包命令行安裝,不要使用管理工具安裝。現在都用Hadoop 2.0。
目錄操作命令;上傳、下載文件命令;提交運行MapRece示常式序;打開Hadoop WEB界面,查看Job運行狀態,查看Job運行日誌。知道Hadoop的系統日誌在哪裡。
以上完成之後,就應該去了解他們的原理了:
MapRece:如何分而治之;HDFS:數據到底在哪裡,究竟什麼才是副本;
Yarn到底是什麼,它能幹什麼;NameNode到底在幹些什麼;Resource Manager到底在幹些什麼;
如果有合適的學習網站,視頻就去聽課,如果沒有或者比較喜歡書籍,也可以啃書。當然最好的方法是先去搜索出來這些是干什麼的,大概有了概念之後,然後再去聽視頻。
第二章:更高效的WordCount
在這里,一定要學習SQL,它會對你的工作有很大的幫助。
就像是你寫(或者抄)的WordCount一共有幾行代碼?但是你用SQL就非常簡單了,例如:
SELECT word,COUNT(1) FROM wordcount GROUP BY word;
這便是SQL的魅力,編程需要幾十行,甚至上百行代碼,而SQL一行搞定;使用SQL處理分析Hadoop上的數據,方便、高效、易上手、更是趨勢。不論是離線計算還是實時計算,越來越多的大數據處理框架都在積極提供SQL介面。
另外就是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適合做海量數據的數據倉庫工具,而不是資料庫工具。
了解了它的作用之後,就是安裝配置Hive的環節,當可以正常進入Hive命令行是,就是安裝配置成功了。
了解Hive是怎麼工作的
學會Hive的基本命令:
創建、刪除表;載入數據到表;下載Hive表的數據;
MapRece的原理(還是那個經典的題目,一個10G大小的文件,給定1G大小的內存,如何使用java程序統計出現次數最多的10個單詞及次數);
HDS讀寫數據的流程;向HDFS中PUT數據;從HDFS中下載數據;
自己會寫簡單的MapRece程序,運行出現問題,知道在哪裡查看日誌;
會寫簡單的Select、Where、group by等SQL語句;
Hive SQL轉換成MapRece的大致流程;
Hive中常見的語句:創建表、刪除表、往表中載入數據、分區、將表中數據下載到本地;
從上面的學習,你已經了解到,HDFS是Hadoop提供的分布式存儲框架,它可以用來存儲海量數據,MapRece是Hadoop提供的分布式計算框架,它可以用來統計和分析HDFS上的海量數據,而Hive則是SQL On Hadoop,Hive提供了SQL介面,開發人員只需要編寫簡單易上手的SQL語句,Hive負責把SQL翻譯成MapRece,提交運行。
此時,你的」大數據平台」是這樣的:那麼問題來了,海量數據如何到HDFS上呢?
第三章:數據採集
把各個數據源的數據採集到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表;如果後續選型確定使用Sqoop作為數據交換工具,那麼建議熟練掌握,否則,了解和會用Demo即可。
3.4 Flume
Flume是一個分布式的海量日誌採集和傳輸框架,因為「採集和傳輸框架」,所以它並不適合關系型資料庫的數據採集和傳輸。Flume可以實時的從網路協議、消息系統、文件系統採集日誌,並傳輸到HDFS上。
因此,如果你的業務有這些數據源的數據,並且需要實時的採集,那麼就應該考慮使用Flume。
下載和配置Flume。使用Flume監控一個不斷追加數據的文件,並將數據傳輸到HDFS;Flume的配置和使用較為復雜,如果你沒有足夠的興趣和耐心,可以先跳過Flume。
3.5 阿里開源的DataX
現在DataX已經是3.0版本,支持很多數據源。
第四章:把Hadoop上的數據搞到別處去
Hive和MapRece進行分析了。那麼接下來的問題是,分析完的結果如何從Hadoop上同步到其他系統和應用中去呢?其實,此處的方法和第三章基本一致的。
HDFS GET命令:把HDFS上的文件GET到本地。需要熟練掌握。
HDFS API:同3.2.
Sqoop:同3.3.使用Sqoop完成將HDFS上的文件同步到MySQL;使用Sqoop完成將Hive表中的數據同步到MySQL。
如果你已經按照流程認真完整的走了一遍,那麼你應該已經具備以下技能和知識點:
知道如何把已有的數據採集到HDFS上,包括離線採集和實時採集;
知道sqoop是HDFS和其他數據源之間的數據交換工具;
知道flume可以用作實時的日誌採集。
從前面的學習,對於大數據平台,你已經掌握的不少的知識和技能,搭建Hadoop集群,把數據採集到Hadoop上,使用Hive和MapRece來分析數據,把分析結果同步到其他數據源。
接下來的問題來了,Hive使用的越來越多,你會發現很多不爽的地方,特別是速度慢,大多情況下,明明我的數據量很小,它都要申請資源,啟動MapRece來執行。
第五章:SQL
其實大家都已經發現Hive後台使用MapRece作為執行引擎,實在是有點慢。因此SQL On Hadoop的框架越來越多,按我的了解,最常用的按照流行度依次為SparkSQL、Impala和Presto.這三種框架基於半內存或者全內存,提供了SQL介面來快速查詢分析Hadoop上的數據。
我們目前使用的是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中的表。Spark不是一門短時間內就能掌握的技術,因此建議在了解了Spark之後,可以先從SparkSQL入手,循序漸進。
關於Spark和SparkSQL,如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
第六章:數據多次利用
請不要被這個名字所誘惑。其實我想說的是數據的一次採集、多次消費。
在實際業務場景下,特別是對於一些監控日誌,想即時的從日誌中了解一些指標(關於實時計算,後面章節會有介紹),這時候,從HDFS上分析就太慢了,盡管是通過Flume採集的,但Flume也不能間隔很短就往HDFS上滾動文件,這樣會導致小文件特別多。
為了滿足數據的一次採集、多次消費的需求,這里要說的便是Kafka。
關於Kafka:什麼是Kafka?Kafka的核心概念及名詞解釋。
如何部署和使用Kafka:使用單機部署Kafka,並成功運行自帶的生產者和消費者例子。使用Java程序自己編寫並運行生產者和消費者程序。Flume和Kafka的集成,使用Flume監控日誌,並將日誌數據實時發送至Kafka。
如果你認真完成了上面的學習和實踐,此時,你的」大數據平台」應該是這樣的。
這時,使用Flume採集的數據,不是直接到HDFS上,而是先到Kafka,Kafka中的數據可以由多個消費者同時消費,其中一個消費者,就是將數據同步到HDFS。
如果你已經認真完整的學習了以上的內容,那麼你應該已經具備以下技能和知識點:
為什麼Spark比MapRece快。
使用SparkSQL代替Hive,更快的運行SQL。
使用Kafka完成數據的一次收集,多次消費架構。
自己可以寫程序完成Kafka的生產者和消費者。
從前面的學習,你已經掌握了大數據平台中的數據採集、數據存儲和計算、數據交換等大部分技能,而這其中的每一步,都需要一個任務(程序)來完成,各個任務之間又存在一定的依賴性,比如,必須等數據採集任務成功完成後,數據計算任務才能開始運行。如果一個任務執行失敗,需要給開發運維人員發送告警,同時需要提供完整的日誌來方便查錯。
第七章:越來越多的分析任務
不僅僅是分析任務,數據採集、數據交換同樣是一個個的任務。這些任務中,有的是定時觸發,有點則需要依賴其他任務來觸發。當平台中有幾百上千個任務需要維護和運行時候,僅僅靠crontab遠遠不夠了,這時便需要一個調度監控系統來完成這件事。調度監控系統是整個數據平台的中樞系統,類似於AppMaster,負責分配和監控任務。
7.1 Apache Oozie
Oozie是什麼?有哪些功能?
Oozie可以調度哪些類型的任務(程序)?
Oozie可以支持哪些任務觸發方式?
安裝配置Oozie。
7.2 其他開源的任務調度系統
Azkaban,light-task-scheler,Zeus,等等。另外,我這邊是之前單獨開發的任務調度與監控系統,具體請參考《大數據平台任務調度與監控系統》。
第八章:我的數據要實時
在第六章介紹Kafka的時候提到了一些需要實時指標的業務場景,實時基本可以分為絕對實時和准實時,絕對實時的延遲要求一般在毫秒級,准實時的延遲要求一般在秒、分鍾級。對於需要絕對實時的業務場景,用的比較多的是Storm,對於其他准實時的業務場景,可以是Storm,也可以是Spark Streaming。當然,如果可以的話,也可以自己寫程序來做。
8.1 Storm
什麼是Storm?有哪些可能的應用場景?
Storm由哪些核心組件構成,各自擔任什麼角色?
Storm的簡單安裝和部署。
自己編寫Demo程序,使用Storm完成實時數據流計算。
8.2 Spark Streaming
什麼是Spark Streaming,它和Spark是什麼關系?
Spark Streaming和Storm比較,各有什麼優缺點?
使用Kafka + Spark Streaming,完成實時計算的Demo程序。
至此,你的大數據平台底層架構已經成型了,其中包括了數據採集、數據存儲與計算(離線和實時)、數據同步、任務調度與監控這幾大模塊。接下來是時候考慮如何更好的對外提供數據了。
第九章:數據要對外
通常對外(業務)提供數據訪問,大體上包含以下方面。
離線:比如,每天將前一天的數據提供到指定的數據源(DB、FILE、FTP)等;離線數據的提供可以採用Sqoop、DataX等離線數據交換工具。
實時:比如,在線網站的推薦系統,需要實時從數據平台中獲取給用戶的推薦數據,這種要求延時非常低(50毫秒以內)。根據延時要求和實時數據的查詢需要,可能的方案有:HBase、Redis、MongoDB、ElasticSearch等。
OLAP分析:OLAP除了要求底層的數據模型比較規范,另外,對查詢的響應速度要求也越來越高,可能的方案有:Impala、Presto、SparkSQL、Kylin。如果你的數據模型比較規模,那麼Kylin是最好的選擇。
即席查詢:即席查詢的數據比較隨意,一般很難建立通用的數據模型,因此可能的方案有:Impala、Presto、SparkSQL。
這么多比較成熟的框架和方案,需要結合自己的業務需求及數據平台技術架構,選擇合適的。原則只有一個:越簡單越穩定的,就是最好的。
B. 在hive資料庫中怎麼查看錶結構
查看錶結構信息如下
1、descformattedtable_name;
2、desctable_name。
C. Hive是什麼
此外,hive也支持熟悉map-rece的開發者使用map-rece程序對數據做更加復雜的分析。 hive可以很好的結合thrift和控制分隔符,也支持用戶自定義分隔符。 hive基於hadoop,hadoop是批處理系統,不能保存低延遲,因此,hive的查詢也不能保證低延遲。 hive的工作模式是:提交一個任務,等到任務結束時被通知,而不是實時查詢。相對應的是,類似於Oracle這樣的系統當運行於小數據集的時候,響應非常快,可當處理的數據集非常大的時候,可能需要數小時。需要說明的是,hive即使在很小的數據集上運行,也可能需要數分鍾才能完成。 低延遲不是hive追求的首要目標。
D. hive中怎麼刪除表中的部分數據
工具:(1)HIVE;
(2)電腦;
(3)Xshell;
採用hdfs命令進行刪除表中的部分數據:
1、先使用hdfs查看該表實際分區以及數據目錄位置
hdfs dfs -ls /user/hive/warehouse/tbdata.db/表名小寫/;
E. 如何在Java中執行Hive命令或HiveQL
這里所說的在Java中執行Hive命令或HiveQL並不是指Hive
Client通過JDBC的方式連接HiveServer(or
HiveServer2)執行查詢,而是簡單的在部署了HiveServer的伺服器上執行Hive命令。當然這是一個簡單的事情,平常我們通過Hive做簡單的數據分析實驗的時候,都是直接進入Hive執行HiveQL
通過進入Hive執行HiveQL,只能將分析結果列印到屏幕或是存入臨時表,如果想把分析結果寫入文件,或者對分析結果做進一步的分析,用程序做分析,就是為什麼要在Java中執行Hive命令。
Java在1.5過後提供了ProcessBuilder根據運行時環境啟動一個Process調用執行運行時環境下的命令或應用程序(1.5以前使用Runtime),關於ProcessBuilder請參考Java相關文檔。調用代碼如下:
String
sql="show
tables;
select
*
from
test_tb
limit
10";
List<String>
command
=
new
ArrayList<String>();
command.add("hive");
command.add("-e");
command.add(sql);
List<String>
results
=
new
ArrayList<String>();
ProcessBuilder
hiveProcessBuilder
=
new
ProcessBuilder(command);
hiveProcess
=
hiveProcessBuilder.start();
BufferedReader
br
=
new
BufferedReader(new
InputStreamReader(
hiveProcess.getInputStream()));
String
data
=
null;
while
((data
=
br.readLine())
!=
null)
{
results.add(data);
}其中command可以是其它Hive命令,不一定是HiveQL。
F. 怎麼在Java中執行Hive命令或HiveQL
Java在1.5過後提供了ProcessBuilder根據運行時環境啟動一個Process調用執行運行時環境下的命令或應用程序(1.5以前使用Runtime),關於ProcessBuilder請參考Java相關文檔。調用代碼如下:
String sql="show tables; select * from test_tb limit 10";
List<String> command = new ArrayList<String>();
command.add("hive");
command.add("-e");
command.add(sql);
List<String> results = new ArrayList<String>();
ProcessBuilder hiveProcessBuilder = new ProcessBuilder(command);
hiveProcess = hiveProcessBuilder.start();
BufferedReader br = new BufferedReader(new InputStreamReader(
hiveProcess.getInputStream()));
String data = null;
while ((data = br.readLine()) != null) {
results.add(data);
}
其中command可以是其它Hive命令,不一定是HiveQL。
G. 怎樣用命令配置hive啟動hwi
您好,很高興為您解答。
1、hive-site.xml配置
<property>
<name>hive.hwi.war.file</name>
<value>lib/hive-hwi-0.10.0-cdh4.3.0.war</value>
<description>,relativeto${HIVE_HOME}.
</description>
</property>
<property>
<name>hive.hwi.listen.host</name>
<value>0.0.0.0</value>
<description>
on</description>
</property>
<property>
<name>hive.hwi.listen.port</name>
<value>9999</value>
<description></description>
</property>
2、添加jar
將一下jar包添加到hive的lib下面
jasper-compiler-5.5.23.jar
jasper-runtime-5.5.23.jar
ant.jar
ant-launcher-1.8.2.jar
tools.jar(jdk的lib包下面的jar包)
3、啟動hwi服務
nohupbin/hive--servicehwi>/dev/null2>/dev/null&
4、訪問界面
http://172.21.1.56:9999/hwi
如若滿意,請點擊右側【採納答案】,如若還有問題,請點擊【追問】
希望我的回答對您有所幫助,望採納!
~O(∩_∩)O~
H. hive中怎麼退出所連接的資料庫
1、hive 命令行模式,直接輸入/hive/bin/hive的執行程序,或者輸入 hive --service cli
用於linux平台命令行查詢,查詢語句基本跟mysql查詢語句類似
2、 hive web界面的 (埠號9999) 啟動方式
hive –service hwi &
用於通過瀏覽器來訪問hive,感覺沒多大用途
I. hive命令中有沒有一個命令是顯示資料庫下所有的partitions
insert overwrite table t_table1 select * from t_table1 where XXXX; 其中xxx是你需要保留的數據的查詢條件。 如果清空表,如下: insert overwrite table t_table1 select * from t_table1 where 1=0;