1. 程式人生 > >大資料學習記錄(hadoop hive flume azkaban sqoop)

大資料學習記錄(hadoop hive flume azkaban sqoop)


大資料學習記錄(hadoop hive flume azkaban sqoop)

1. hadoop對海量資料進行分散式處理
2. 核心元件:HDFS(分散式檔案系統)、YARN(運算資源排程系統)、MAPREDUCE(分散式運算程式設計框架)
3. HIVE:基於大資料技術(檔案系統+運算框架)的SQL資料倉庫工具
4. HBASE:基於HADOOP的分散式海量資料庫
5. Mahout:基於mapreduce/spark/flink等分散式運算框架的機器學習演算法庫
6. Oozie/Azkaban:工作流排程框架
7. Sqoop:資料匯入匯出工具
8. Flume:日誌資料採集框架    


hadoop理解記錄:
    1. hadoop在windows下的搭建可以參考一下本地配置:https://blog.csdn.net/u010993514/article/details/82914827;
    2. java api中使用hadoop的copyFromLocalFile方法,需要目錄存在。hdfs dir一定要存在,否則命令不會執行;
    3. reduce的shuffle機制:就是將maptask輸出的處理結果資料,分發給reducetask,並在分發的過程中,對資料按key進行了分割槽和排序;
    4. Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而mapreduce等運算程式則相當於運行於作業系統之上的應用程式;
    5. mapreduce對於一個檔案分片時,在分片末尾會不會有一條記錄被拆開,從而導致map端在輸入的時候,會不會有一行記錄是不完整的疑惑?其實這肯定是不可能,如果這樣的問題沒有解決,那在生產生活中肯定是經常遇到,所以hadoop原始碼中肯定有這方面的處理。即使跨split.跨block也不能阻止它完整讀取一行資料的決心。如果start!=0也就是不是第一個分片的時候,都要預設從第二行的開始位置讀起,這裡start更新為第二行的起始位置;

 

hive理解記錄:
    1. Hive是基於Hadoop的一個數據倉庫工具,可以將結構化的資料檔案對映為一張資料庫表,並提供類SQL查詢功能;
    2. Hive利用HDFS儲存資料,利用MapReduce查詢資料;
    3. hive內建函式和使用者自定義函式:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-OperatorsprecedencesOperatorsPrecedencesOperatorsPrecedences;


Flume理解記錄:
    1. Flume分散式系統中最核心的角色是agent,每一個agent相當於一個數據傳遞員,內部有三個元件:
    Source:採集源,用於跟資料來源對接,以獲取資料;Sink:下沉地,採集資料的傳送目的,用於往下一級agent傳遞資料或者往最終儲存系統傳遞資料;Channel:angent內部的資料傳輸通道;

 

工作流排程框架理解記錄:
    1. 為了組織複雜執行計劃,需要一個工作流排程系統來排程執行(oozie、azkaban);
    2. Azkaban定義了一種KV檔案格式來建立任務之間的依賴關係,並提供一個易於使用的web使用者介面維護和跟蹤工作流;


sqoop理解記錄
    1. sqoop是Hadoop和關係資料庫伺服器之間傳送資料的工具。匯入資料:MySQL,Oracle匯入資料到Hadoop的HDFS、HIVE、HBASE等資料儲存系統;匯出資料:從Hadoop的檔案系統中匯出資料到關係資料庫; 
    2. mysql匯入到hive:
    ./sqoop import --connect jdbc:mysql://localhost:3306/userdb --username root --password root --where "id ='1201'" --table emp --hive-import --m1
    3. mysql匯出到hdfs、mysql從hdfs匯入
    ./sqoop import --connect jdbc:mysql://localhost:3306/userdb  --username root  --password  root  (--where "id ='1201'") --direct --table emp  --target-dir /app/sqoop/wherequery -m1
    ./sqoop export --connect jdbc:mysql://localhost:3306/userdb  --username root  --password  root --table emp2  --export-dir /app/sqoop/
    4. 檢視匯出的檔案:
    hadoop fs -cat /app/sqoop/wherequery/part-*
    5. Sqoop提供的--fields-terminated-by選項可以支援指定自定義的分隔符;
    6. Sqoop的原理其實就是將匯入匯出命令轉化為mapreduce程式來執行,sqoop在接收到命令後,都要生成mapreduce程式;