1.hadoop有三個主要的核心組件:HDFS(分布式文件存儲)、MAPREDUCE(分布式的計算)、YARN(資源調度),現在雲計算包括大數據和虛擬化進行支撐。
在HADOOP(hdfs、MAPREDUCE、yarn)大數據處理技術框架,擅長離線數據分析.
Zookeeper 分布式協調服務基礎組件,Hbase 分布式海量數據庫,離線分析和在線業務處理。
Hive sql 數據倉庫工具,使用方便,功能豐富,基於MR延遲大,可以方便對數據的分析,並且數據的處理可以自定義方法進行操作,簡單方便。
Sqoop數據導入導出工具,將數據從數據導入Hive,將Hive導入數據庫等操作。
Flume數據采集框架,可以從多種源讀取數據。
Azkaban對操作進行管理,比如定時腳本執行,有圖形化界面,上傳job簡單,只需要將腳本打成bao,可直接上傳。
2.hadoop的可以做離散日志分析,一般流程是:
將web中的數據取過來【通過flume】,然后通過預處理【mapreduce,一般只是使用map就可以了】,就是將數據中沒有用處的數據去除掉,將數據轉換【比如說時間的格式,Agent的組合】,並將數據進行處理之后以固定格式輸出,由Hive處理,Hive是作用是將數據轉換出一個表,RTL就是寫SQL的一個過程,將數據進行分析,然后將數據報表統計,這個時候使用的是pig數據分析【hive一般作為庫,pig做分析,我沒有使用pig,因為感覺還沒有hive的HQL處理方便】,最后將含金量最大的數據放入到mysql中,然后將mysql中的數據變為可視圖化的工具。
推薦的使用:當我們瀏覽一各網頁的時候,將數據的值值傳遞給后台保存到log中,后台將數據收集起來,hadoop中的fiume可以將數據拿到放入到HDFS中,原始的數據進行預處理,然后使用HIVE將數據變為表,進行數據的分析,將有價值的數據放入到mysql,作為推薦使用,這個一般是商城,數據的來源也是可以通過多種方式的,比如說隱形圖片、js、日志等都可以作為采集數據的來源。
3.hadoop中的HDFS有兩個重要的角色:NameNode、datanode,Yarn有兩個主要的主角:ResourceManager和nodeManager.
4.分布式:使用多個節點協同完成一項或者多項業務功能的系統叫做分布式系統,分布式一般使用多個節點組成,包括主節點和從節點,進行分析
5.mapreduce:是使用較少的代碼,完成對海量數據的處理,比如wordCount,統計單詞的個數。
實現思想:將單詞一個一個的遍歷,然后將單詞加1處理,但是這是集群,那么就每個節點計算自己節點的數據,然后最后交給一個統計的程序完成就可以了,最后將單詞和結果輸出。
代碼實現:
map階段:
從HDFS的數據文件中逐行讀取數據
將每一行數據切分出單詞
為每一個單詞構造出鍵值對(單詞,1)[這里的1不是java類型的]
將鍵值對發送給reduce
public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ //map方法的生命周期: 框架每傳一行數據就被調用一次 //key : 偏移量 //value: 這一行的內容 @Override protected void map(LongWritable key, Text value, Context context) throws Exception { //拿到一行數據轉換為string String line = value.toString(); //將這一行切分出各個單詞 String[] words = line.split(" "); //遍歷數組,輸出<單詞,1> for(String word:words){ context.write(new Text(word), new IntWritable(1)); } } }
reduce階段:
接收到map階段的單詞的key-value鍵值對。
將相同的單詞匯聚為一組。
對每一組,遍歷組中的所有的值,累加求和,並得到最后的結果
將值保存到HDFS中。
@Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { //定義一個計數器 int count = 0; for(IntWritable value:values){ count += value.get(); } context.write(key, new IntWritable(count)); } }
map和reduce就實現完成了。
6.配置ssh免登陸
#生成ssh免登陸密鑰
#進入到我的home目錄
cd ~/.ssh
ssh-keygen -t rsa
執行完這個命令后,會生成兩個文件id_rsa(私鑰)、id_rsa.pub(公鑰)
將公鑰拷貝到要免密登陸的目標機器上
ssh-copy-id hostname
7. 上傳 hadoop fs -put 本地目錄 /遠程目錄
查看 hadoop fs -cat 本地目錄 /遠程目錄
大於128M的數據,會進行切片處理,我們可以將片寫入一個文件之后,數據就會比比變為上傳之前的文件。
創建多級目錄使用的是-p