目前CSDN,博客園,簡書同步發表中,更多精彩歡迎訪問個人gitee pageshtml
大數據(Big Data): 指沒法在必定時間範圍內用常規軟件工具進行捕捉,管理和處理的數據集合,是須要新處理模式才能具備更強的決策力,洞察發現力和流程優化能力的海量,高增加率和多樣化的信息資產.java
按順序給出數據存儲單位:bit,Byte,KB,MB,GB,TB,PB,EB,ZB,YB,BB,NB,DB.node
1Byte =8bit 1KB=1024Byte 1MB=1024KB 1GB=1024MB 1TB=1024GB 1PB=1024TBgit
Volume(大量):web
截至目前,人類生產的全部印刷材料的數據量是200PB,而歷史上全人類總共說過的話的數據量大約是5EB.當前,典型我的計算機硬盤的容量爲TB量級,而一些大企業的數據量已經接近EB量級.面試
Vekocity(高速):shell
這是大數據區分於傳統數據挖掘的最顯著特徵.根據IDC的"數字宇宙"的報告,預計到2020年,全球數據使用量將達到35.2ZB.在如此海量的數據面前,處理數據的效率就是企業的生命.數據庫
Variety(多樣):apache
這種類型的多樣性也讓數據被分爲結構化數據和非結構化數據.相對於以往便於存儲的以數據庫/文本爲主的結構化數據,非結構化數據愈來愈多,包括網絡日誌,音頻,視頻,圖片,地理位置信息等,這些多類型的數據對數據的處理能力提出了更高要求.編程
Value(低價值密度):
價值密度的高低與數據總量的大小成反比.如何快速對有價值數據"提純"成爲目前大數據背景下待解決的難題.
大數據部門組織結構,適用於大中型企業.
hadoop的初衷是採用大量的廉價機器,組成一個集羣!完成大數據的存儲和計算!
Hadoop三大發行版本:Apache、Cloudera、Hortonworks。
Apache版本最原始(最基礎)的版本,對於入門學習最好。
Cloudera在大型互聯網企業中用的較多。
Hortonworks文檔較好。
高可靠性
Hadoop底層維護多個數據副本,因此即便Hadoop某個計算元素或存儲出現故障,也不會致使數據的丟失.
高擴展性
在集羣間分配任務數據,可方便的擴展數以千計的節點.
高效性
在MapReduce的思想下,Hadoop是並行工做的,以加快任務處理速度.
高容錯性
可以自動將失敗的任務從新分配
HDFS: 負責大數據的存儲
核心進程(必須進程):
NameNode(1個):存儲文件的元數據.如文件名,文件目錄結構,文件屬性(生成時間,副本數,文件權限),以及每一個文件的塊列表和塊所在的DataNode等.
職責
接收客戶端的請求!
接收DN的請求!
向DN分配任務!
DataNode(N個):在本地文件系統存儲文件塊數據,以及塊數據的校驗和.
職責
負責接收NN分配的任務!
負責數據塊(block)的管理(讀,寫)!
可選進程:
MapReduce將計算過程分爲兩個階段:Map和Reduce
Map階段並行處理輸入數據
Reduce階段對Map結果進行彙總
YARN負責集羣中全部計算資源的管理和調度
常見進程
ResourceManager(1個): 負責整個集羣全部資源的管理!
職責
負責接受客戶端的提交Job的請求!
負責向NM分配任務!
負責接受NM上報的信息!
NodeManager(N個): 負責單臺計算機全部資源的管理!
職責
負責和RM進行通訊,上報本機中的可用資源!
負責領取RM分配的任務!
負責爲Job中的每一個Task分配計算資源!
Container(容器)
NodeManager爲Job的某個Task分配了2個CPU和2G內存的計算資源!
爲了防止當前Task在使用這些資源期間,被其餘的task搶佔資源!
將計算資源,封裝到一個Container中,在Container中的資源,會被暫時隔離!沒法被其餘進程所搶佔!
當前Task運行結束後,當前Container中的資源會被釋放!容許其餘task來使用!
圖中涉及的技術名詞解釋以下:
Sqoop:Sqoop是一款開源的工具,主要用於在Hadoop、Hive與傳統的數據庫(MySql)間進行數據的傳遞,能夠將一個關係型數據庫(例如 :MySQL,Oracle 等)中的數據導進到Hadoop的HDFS中,也能夠將HDFS的數據導進到關係型數據庫中。
Flume:Flume是Cloudera提供的一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統,Flume支持在日誌系統中定製各種數據發送方,用於收集數據;同時,Flume提供對數據進行簡單處理,並寫到各類數據接受方(可定製)的能力。
Kafka:Kafka是一種高吞吐量的分佈式發佈訂閱消息系統,有以下特性:
Storm:Storm用於「連續計算」,對數據流作連續查詢,在計算時就將結果以流的形式輸出給用戶。
Spark:Spark是當前最流行的開源大數據內存計算框架。能夠基於Hadoop上存儲的大數據進行計算。
Oozie:Oozie是一個管理Hdoop做業(job)的工做流程調度管理系統。
Hbase:HBase是一個分佈式的、面向列的開源數據庫。HBase不一樣於通常的關係數據庫,它是一個適合於非結構化數據存儲的數據庫。
Hive:Hive是基於Hadoop的一個數據倉庫工具,能夠將結構化的數據文件映射爲一張數據庫表,並提供簡單的SQL查詢功能,能夠將SQL語句轉換爲MapReduce任務進行運行。 其優勢是學習成本低,能夠經過類SQL語句快速實現簡單的MapReduce統計,沒必要開發專門的MapReduce應用,十分適合數據倉庫的統計分析。
R語言:R是用於統計分析、繪圖的語言和操做環境。R是屬於GNU系統的一個自由、免費、源代碼開放的軟件,它是一個用於統計計算和統計製圖的優秀工具。
Mahout:Apache Mahout是個可擴展的機器學習和數據挖掘庫。
ZooKeeper:Zookeeper是Google的Chubby一個開源的實現。它是一個針對大型分佈式系統的可靠協調系統,提供的功能包括:配置維護、名字服務、 分佈式同步、組服務等。ZooKeeper的目標就是封裝好複雜易出錯的關鍵服務,將簡單易用的接口和性能高效、功能穩定的系統提供給用戶。
克隆虛擬機
修改克隆虛擬機的靜態IP
修改主機名
關閉防火牆
建立atguigu用戶
useradd atguigu passwd atguigu
配置atguigu用戶具備root權限(詳見大數據技術之Linux)
vim /etc/sudoers
root ALL=(ALL) ALL
atguigu ALL=(ALL) NOPASSWD: ALL
在/opt目錄下建立文件
sudo mkdir module sudo mkdir soft
sudo chown -R atguigu:atguigu /opt/soft /opt/module
安裝過程(略)
配置JDK環境變量
vim /etc/profile
JAVA_HOME=/opt/module/jdk1.8.0_121 PATH=$PATH:$JAVA_HOME/bin export JAVA_HOME PATH
source /etc/profile
java -version
java version "1.8.0_144"
安裝過程(略)
將Hadoop添加到環境變量
最後文件內容爲:
JAVA_HOME=/opt/module/jdk1.8.0_121 HADOOP_HOME=/opt/module/hadoop-2.7.2 PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export JAVA_HOME PATH HADOOP_HOME
重要目錄
Hadoop運行模式包括:本地模式、僞分佈式模式以及徹底分佈式模式。
Hadoop官方網站:http://hadoop.apache.org/
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir input
[atguigu@hadoop101 hadoop-2.7.2]$ cp etc/hadoop/*.xml input
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'
[atguigu@hadoop101 hadoop-2.7.2]$ cat output/*
[atguigu@hadoop101 hadoop-2.7.2]$ mkdir wcinput
[atguigu@hadoop101 hadoop-2.7.2]$ cd wcinput [atguigu@hadoop101 wcinput]$ touch wc.input
[atguigu@hadoop101 wcinput]$ vi wc.input
hadoop yarn hadoop mapreduce atguigu atguigu
回到Hadoop目錄/opt/module/hadoop-2.7.2
執行程序
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput
查看結果
1.命令查看
[atguigu@hadoop101 hadoop-2.7.2]$ cat wcoutput/part-r-00000 atguigu 2 hadoop 2 mapreduce 1 yarn 1
2.瀏覽器查看
分析
配置集羣
啓動、測試集羣增、刪、查
執行WordCount案例
執行步驟
配置集羣
配置: hadoop-env.sh
Linux系統中獲取JDK的安裝路徑:
[atguigu@ hadoop101 ~]# echo $JAVA_HOME /opt/module/jdk1.8.0_144
修改JAVA_HOME 路徑:
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置: core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://mypc:9000</value> </property> <!-- 指定Hadoop運行時產生文件的存儲目錄 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
配置: hdfs-site.xml
<!-- 指定HDFS副本的數量 --> <property> <name>dfs.replication</name> <value>1</value> </property>
啓動集羣
格式化NameNode(第一次啓動時格式化,之後就不要總格式化)
atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs namenode -format
啓動NameNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
啓動DataNode
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
查看集羣
查看是否啓動成功
[atguigu@hadoop101 hadoop-2.7.2]$ jps 13586 NameNode 13668 DataNode 13786 Jps
注意:jps是JDK中的命令,不是Linux命令。不安裝JDK不能使用jps
web端查看HDFS文件系統
查看產生的Log日誌
說明:在企業中遇到Bug時,常常根據日誌提示信息去分析問題、解決Bug。
當前目錄:/opt/module/hadoop-2.7.2/logs
[atguigu@hadoop101 logs]$ ls hadoop-atguigu-datanode-hadoop.atguigu.com.log hadoop-atguigu-datanode-hadoop.atguigu.com.out hadoop-atguigu-namenode-hadoop.atguigu.com.log hadoop-atguigu-namenode-hadoop.atguigu.com.out SecurityAuth-root.audit [atguigu@hadoop101 logs]# cat hadoop-atguigu-datanode-hadoop101.log
思考:爲何不能一直格式化NameNode,格式化NameNode,要注意什麼?
[atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/name/current/ [atguigu@hadoop101 current]$ cat VERSION clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837 [atguigu@hadoop101 hadoop-2.7.2]$ cd data/tmp/dfs/data/current/ clusterID=CID-f0330a58-36fa-4a2a-a65f-2688269b5837
注意:格式化NameNode,會產生新的集羣id,致使NameNode和DataNode的集羣id不一致,集羣找不到已往數據。因此,格式NameNode時,必定要先刪除data數據和log日誌,而後再格式化NameNode。
操做集羣
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/input
[atguigu@hadoop101 hadoop-2.7.2]$bin/hdfs dfs -put wcinput/wc.input /user/atguigu/input/
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -ls /user/atguigu/input/ [atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/ input/wc.input
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input/ /user/atguigu/output
查看輸出結果
命令行查看:
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
瀏覽器查看:
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -get /user/atguigu/output/part-r-00000 ./wcoutput/
[atguigu@hadoop101 hadoop-2.7.2]$ hdfs dfs -rm -r /user/atguigu/output
分析
執行步驟
配置集羣
配置yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置yarn-site.xml
<!-- reducer獲取數據的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>
配置:mapred-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置: (對mapred-site.xml.template從新命名爲) mapred-site.xml
[atguigu@hadoop101 hadoop]$ mv mapred-site.xml.template mapred-site.xml [atguigu@hadoop101 hadoop]$ vi mapred-site.xml
<!-- 指定MR運行在YARN上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
啓動集羣
啓動前必須保證NameNode和DataNode已經啓動
啓動ResourceManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager
啓動NodeManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager
集羣操做
YARN的瀏覽器頁面查看
刪除文件系統上的output文件
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
執行MapReduce程序
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
查看運行結果
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -cat /user/atguigu/output/*
爲了查看程序的歷史運行狀況,須要配置一下歷史服務器
[atguigu@hadoop101 hadoop]$ vi mapred-site.xml
在該文件裏面增長以下配置
<property> <name>mapreduce.jobhistory.address</name> <value>mypc:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>mypc:19888</value> </property> <!--第三方框架使用yarn計算的日誌彙集功能 --> <property> <name>yarn.log.server.url</name> <value>http://mypc:19888/jobhistory/logs</value> </property>
啓動歷史服務器
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
查看歷史服務器是否啓動
atguigu@hadoop101 hadoop-2.7.2]$ jps
查看JobHistory
日誌彙集概念:應用運行完成之後,將程序運行日誌信息上傳到HDFS系統上。
日誌彙集功能好處:能夠方便的查看到程序運行詳情,方便開發調試。
注意:開啓日誌彙集功能,須要從新啓動NodeManager 、ResourceManager和HistoryManager。
配置yarn-site.xml
[atguigu@hadoop101 hadoop]$ vi yarn-site.xml
在該文件裏面增長以下配置
<!-- 日誌彙集功能使能 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 日誌保留時間設置7天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>604800</value> </property>
關閉NodeManager 、ResourceManager和HistoryManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop resourcemanager [atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh stop nodemanager [atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh stop historyserver
啓動NodeManager 、ResourceManager和HistoryManager
[atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start resourcemanager [atguigu@hadoop101 hadoop-2.7.2]$ sbin/yarn-daemon.sh start nodemanager [atguigu@hadoop101 hadoop-2.7.2]$ sbin/mr-jobhistory-daemon.sh start historyserver
刪除HDFS上已經存在的輸出文件
[atguigu@hadoop101 hadoop-2.7.2]$ bin/hdfs dfs -rm -R /user/atguigu/output
執行WordCount程序
[atguigu@hadoop101 hadoop-2.7.2]$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/atguigu/input /user/atguigu/output
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wc1 /wc3
查看日誌
Hadoop配置文件分兩類:默認配置文件和自定義配置文件,只有用戶想修改某一默認配置值時,才須要修改自定義配置文件,更改相應屬性值。
默認配置文件
要獲取的默認文件 | 文件存放在Hadoop的jar包中的位置 |
---|---|
[core-default.xml] | hadoop-common-2.7.2.jar/ core-default.xml |
[hdfs-default.xml] | hadoop-hdfs-2.7.2.jar/ hdfs-default.xml |
[yarn-default.xml] | hadoop-yarn-common-2.7.2.jar/ yarn-default.xml |
[mapred-default.xml] | hadoop-mapreduce-client-core-2.7.2.jar/ mapred-default.xml |
自定義配置文件
core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四個配置文件存放在$HADOOP_HOME/etc/hadoop這個路徑上,用戶能夠根據項目需求從新進行修改配置。
本次學習使用的虛擬機系統是centOS6.8,和生產環境廣泛使用的centOS7.X的部分命令有差別,請注意識別!
在Hadoop中啓動多種不一樣類型的進程.例如NN,DN,RM,NM,這些進程須要進行通訊!在通訊時,經常使用主機名進行通訊!
在192.168.1.100機器上的DN進程,但願訪問192.168.1.104機器的NN進程!須要在集羣的每臺機器上,配置集羣中全部機器的host映射!
配置:
Linux: /etc/hosts
Windows: C:\Windows\System32\drivers\etc\hosts
不配報錯:DNS映射異常,HOST映射異常
Linux配置完hosts文件後必定要重啓網絡配置!!!
service network restart
注意權限
關閉防火牆,設置開機不自啓動
service iptables stop
chkconfig iptables off
HDFS的運行模式的參數設置
fs.defaultFS在core-default.xml中!
本地模式(在本機上使用HDFS,使用的就是本機的文件系統)
fs.defaultFS=file:///(默認)
分佈式模式
fs.defaultFS=hdfs://
提交任務的命令
hadoop jar jar包 主類名 參數{多個輸入目錄,一個輸出目錄}
輸入目錄中必須所有是文件!
輸出目錄必須不存在!