Hadoop的搭建
目錄
一.大數據與Hadoop
1.大數據的概述
2.Hadoop的概述
3.Hadoop組件介紹
4.安裝部署概述
二.簡單數據分析
1.單機安裝
三.分布式文件系統(集群部署)
1.HDFS組件
2.mapreduce組件
3.Yarn資源管理組件
一.大數據與Hadoop
1.大數據的概述
-
隨著計算機技術的發展,互聯網的普及,信息的積累已經到了一個非常龐大的地步,信息的增長也在不斷的加快,隨著互聯網、物聯網建設的加快,信息更是爆炸是增長,收集、檢索、統計這些信息越發困難,必須使用新的技術來解決這些問題
什么大數據
-
大數據指無法在-定時間范圍內用常規軟件工具進行捕捉、管理和處理的數據集合,需要新處理模式才能具有更強的決策力、洞察發現力和流程優化能力的海量、高增長率和多樣化的信息資產是指從各種各樣類型的數據中,快速獲得有價值的信息
大數據能做什么
-
企業組織利用相關數據分析幫助他們降低成本、提高效率、開發新產品、做出更明智的業務決策等
-
把數據集合并后進行分析得出的信息和數據關系性,用來察覺商業趨勢、判定研究質量、避免疾病擴散、打擊犯罪或測定即時交通路況等
-
大規模并行處理數據庫,數據挖掘電網,分布式文件系統或數據庫,云計算平和可擴展的存儲系統等
-
大數據的五大價值
暫時搞不定的數據
-
股票
-
雙色球
2.Hadoop的概述
Hadoop是什么
- Hadoop是一種分析和處理海量數據的軟件平臺
- Hadoop是一款開源軟件,使用JAVA開發
- Hadoop可以提供一個分布式基礎架構
Hadoop特點
-高可靠性、高擴展性、高效性、高容錯性、低成本
Hadoop的起源
起源于2003年的Google陸續發表了3篇論文
-
GFS,MapReduce, BigTable
GFS(谷歌的GFS,[紅帽也有但不是真的])
-
GFS是一個可擴展的分布式文件系統,用于大型的、分布式的、對大量數據進行訪問的應用
-
可以運行于廉價的普通硬件上,提供容錯功能
MapReduce
-
MapReduce是針對分布式并行計算的一套編程模型,由Map和Reduce組成,Map是映射, 把指令分發到多個worker.上,Reduce是規約,把worker計算 出的結果合
BigTable
-
BigTable是存儲結構化數據的數據庫
-
BigTable 建立在GFS, Scheduler, Lock Service 和MapReduce之上
-
-
GFS、MapReduce 和BigTable 三大技術被稱為Google的三駕馬車,雖然沒有公布源碼,但發布了這三個產品的詳細設計論
-
Yahoo資助的一個組織按照這三篇論文使用Java 做了開源的hadoop, 但在性能上Hadoop 比Google 要差很多
-
-
GFS ---> HDFS
-
MapReduce - - -> MapReduce
-
BigTable - - -> Hbase
-
-
3.Hadoop組件介紹
黃色的是必須安裝的組件,其他的按需安裝
●HDFS: 分布式文件系統(核心組件)
●MapReduce: 分布式計算框架(核心組件)
●Yarn: 集群資源管理系統(核心組件)
●Zookeeper: 分布式協作服務
●kafka: 分布式消息隊列
●Hive: 基于Hadoop的數據倉庫
●Hbase: 分布式列存數據庫
4.安裝部署概述
單機
-
在一臺機器安裝部署
偽分布式
-
在一臺機器上安裝部署,但分角色
完全分布式
-
多機部署,不同角色服務安裝在不同的機器上
二.簡單數據分析
1.單機安裝
準備主機
| hadoop1 | 192.168.1.50 | 最低配置2核2G |
注:主機名經量不要用hadoop因為內部有關鍵字,可能會起沖突
hadoop安裝
# 下載軟件 https://archive.apache.org/dist/hadoop/common # 這里以2.7.7為示例 ~]# wget https://archive.apache.org/dist/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel ~]# tar -zxf hadoop-2.7.7.tar.gz ~]# mv hadoop-2.7.7 /usr/local/hadoop # 設置成root權限 ~]# chown -R 0.0 /usr/local/hadoop ? ## 注:此時啟動會報錯因為hadoop不知道java環境安裝的位置,這邊需要配置 ~]# cd /usr/local/hadoop/ ~]# ./bin/hadoop version Error: JAVA_HOME is not set and could not be found.配置JAVA運行環境
~]# vim /etc/hosts 192.168.1.50 hadoop1 # 先查看路徑 ~]# rpm -ql java-1.8.0-openjdk /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/bin/policytool /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/amd64/libawt_xawt.so /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/amd64/libjawt.so /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/amd64/libjsoundalsa.so /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre/lib/amd64/libsplashscreen.so /usr/share/applications/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64-policytool.desktop /usr/share/icons/hicolor/16x16/apps/java-1.8.0-openjdk.png /usr/share/icons/hicolor/24x24/apps/java-1.8.0-openjdk.png /usr/share/icons/hicolor/32x32/apps/java-1.8.0-openjdk.png /usr/share/icons/hicolor/48x48/apps/java-1.8.0-openjdk.png # 此時可以看到java的子目錄之前都是/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.322.b06-1.el7_9.x86_64/jre,這里就可以配置這個 ? # 手動配置或配置文件設置 ~]# export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.262.b10-0.el7_8.x86_64/jre/ ~]# cd /usr/local/hadoop ~]#./bin/hadoop version # 或 ~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 25: ?export JAVA_HOME="java-1.8.0-openjdk安裝路徑" 33: ?export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" # 指定hadoop的配置文件在哪個路徑(目錄) ~]# /usr/local/hadoop/bin/hadoop version Hadoop 2.7.7 Subversion Unknown -r c1aad84bd27cd79c3d1a7dd58202a8c3ee1ed3ac Compiled by stevel on 2018-07-18T22:47Z Compiled with protoc 2.5.0 From source with checksum 792e15d20b12c74bd6f19a1fb886490 This command was run using /usr/local/hadoop/share/hadoop/common/hadoop-common-2.7.7.jar # 手動于配置文件的區別可以命令執行負責分類圖
熱點詞匯分析
# 1.收集數據 ~]# cd /usr/local/hadoop #實驗就用系統默認給的 ~]# LICENSE.txt NOTICE.txt README.txt # 創建一個目錄用來存文件 ~]# mkdir input ~]# cp *.txt input/ ? # 2.分析 ~]# ./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount ./input ./output # 運行 jar文件運用 wordcount算法分析數據存在哪(算法一般問開發寫的是啥),這里默認用hadoop給的算法和jar文件,./input文件在哪,輸出到哪./output目錄中,目標目錄可以不存在(自動創建) ..... 22/03/12 00:44:04 INFO mapred.LocalJobRunner: Finishing task: attempt_local1704932563_0001_r_000000_0 22/03/12 00:44:04 INFO mapred.LocalJobRunner: reduce task executor complete. 22/03/12 00:44:04 INFO mapreduce.Job: Job job_local1704932563_0001 running in uber mode : false 22/03/12 00:44:04 INFO mapreduce.Job: map 100% reduce 100% 22/03/12 00:44:04 INFO mapreduce.Job: Job job_local1704932563_0001 completed successfully ..... ? # 3.查看分析結果 ~]# cat ./output/* ~]# cat ./output/* | sort -nr -k2 # 排序,-k2 第二列去重,-nr 大的在前三.分布式文件系統(集群部署)
1.HDFS組件
1)HDFS概述
分布式文件系統架構圖
客戶端發起請求(HDFS Client)--->角色名(namenode)根據請求發送到各個節點-->secondary NameNode
注:當有一個數據進來時,第一步客戶端角色切塊,每一塊的規則是128M每個,第二部客戶端訪問Namenode獲取數據存儲的位置,Namenode(master節點)負責保存分配的記錄(fsimage),Namenode還可以設置副本策略,客戶端再到指定的文件寫入信息(Datanode)
HDFS角色介紹
HDFS是Hadoop體系中數據存儲管理的基礎,是一個高度容錯的系統,用于在低成本的通用硬件上運行
●HDFS角色和概念
-CIient
- Namenode
-Secondar ynode
- Datanode
1)Client角色的概述:
-
CI i ent
-
-
切分文件,訪問HDFS
-
與NameNode交互,獲取文件位置信息
-
與DataNode交互,讀取和寫入數據
-
-
Block
-
-
每塊缺省1 28MB大小
-
每塊可以多個副本
-
2)namenode與datanode
-
NameNode
-
-
Master節點
-
管理HDFS的名稱空間和數據塊映射信息(fsimage)
-
配置副本策略,處理所有客戶端請求
-
-
DataNode
-
-
數據存儲節點,存儲實際的數據
-
匯報存儲信息給NameNode
-
3)Secondary NameNode
-
定期合并fsimage 和fsedits, 推送給NameNode
-
-
fsimage:名稱空間和數據庫的映射信息
-
fsedits:數據變更日志
-
-
緊急情況下,可輔助恢復NameNode
但Secondary NameNode并非NameNode的熱備
2)環境準備
準備服務器
| hadoop1 | 192.168.1.50 | 最低配置2核2G |
| node-0001 | 192.168.1.51 | 最低配置2核2G |
| node-0002 | 192.168.1.52 | 最低配置2核2G |
| node-0003 | 192.168.1.53 | 最低配置2核2G |
禁用防火墻與修改selinux
# 禁用selinux,修改配置文件重啟生效,或手動在設置一個臨時的 ~]# vim /etc/selinux/config SELINUX=disabled ~]# setenforce 0 # 禁用firewalld ~]# systemctl stop firewalld && systemctl mask firewalld主機名配置
-hadoop非常依賴主機名的解析,如果配置dns解析主機名,不光需要正向解析,還需要添加反向解析,這里我們使用/etc/hosts文件來解析主機名
注:所有主機都要修改
# 以下操作在所有服務器上執行 ~]# yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel ~]# vim /etc/hosts 192.168.1.50 ? hadoop1 192.168.1.51 ? node-0001 192.168.1.52 ? node-0002 192.168.1.53 ? node-0003系統配置
ssh密鑰
-
hadoop是遠程在其他節點上啟動角色的
-
每臺機器都要能免密登錄,包括本機!!!
集群所有主機
-
第一次使用ssh登陸遠程主機的時候需要輸入yes,造成主機不能繼續執行,禁用sshkey檢測
-
/etc/ssh/sshconfig(NameNode主機增加配置) StrictHostKeyCheckingno
3)HDFS配置文件
-
環境配置文件:hadoop-env.sh
-
核心配置文件:core-site.xml
-
HDFS配置文件: hdfs-site.xml
-
節點配置文件:slaves
配置 hadoop-env.sh
# 在hadoop1上配置 ~]# vim /etc/hosts 192.168.1.50 hadoop1 ~]# vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh 25: export JAVA_HOME="java-1.8.0-openjdk安裝路徑" 33: export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop" ~]# /usr/local/hadoop/bin/hadoop version配置slaves (localhost 必須刪除)
# 在hadoop1上操作 ~]# vim /usr/local/hadoop/etc/hadoop/slaves node-0001 node-0002 node-0003 # 注意要把localhost刪掉,并注意指定節點配置core-site.xml
配置文件語法格式 -- 官方手冊
官網拉到最底下
?
?xml:擴展標記語言
<property><name>關鍵字</name><value>變量值</value><description>描述</description> </property> # 在hadoop1上操作 ~]# vim /usr/local/hadoop/etc/hadoop/core-site.xml <configuration><property><name>fs.defaultFS</name><value>hdfs://hadoop1:9000</value></property><property><name>hadoop.tmp.dir</name><value>/var/hadoop</value></property> </configuration>配置hdfs-site.xml
~]# vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml <configuration><property><name>dfs.namenode.http-address</name><value>hadoop1:50070</value></property><property><name>dfs.namenode.secondary.http-address</name><value>hadoop1:50090</value></property><property><name>dfs.replication</name><value>2</value></property> </configuration>啟動集群 [以下操作僅在 hadoop1 上執行]
同步文件,所有節點配置文件是相同(hadoop的特性,文件一致)
~]# for i in node-{1..3}; do rsync -aXSH --delete /usr/local/hadoop ${i}:/usr/local/; done# 創建剛剛設置的數據目錄 ~]# mkdir /var/hadoop # 對文件系統格式化 ~]# /usr/local/hadoop/bin/hdfs namenode -format # 啟動 ~]# /usr/local/hadoop/sbin/start-dfs.sh查看到successfully就是格式化成功了
此時發現格式不對,沒有縮進,修改之后就要刪除剛剛創建的數據目錄,再初始化,然后啟動就沒有問題了
?
驗證集群配置
~]# /usr/local/hadoop/bin/hdfs dfsadmin -reportjps:驗證角色
文件概述
?驗證集群
web頁面驗證
注:如果要用域名連接注意配置hosts
http://hadoop1:50070(namenode)
http://hadoop1:50090(secondarynamenode
http://node-000x:50075(datanode)
~]# for i in hadoop1 node-{0001..0003};do echo ${i}; ssh ${i} jps; echo -e "\n"; done ~]# /usr/local/hadoop/bin/hdfs dfsadmin -report ... ... ------------------------------------------------- Live datanodes (3):日志與排錯
日志文件夾在系統啟動時會被自動創建
/usr/local/hadoop/logs日志名稱
?
-服務名-用戶名-角色名-主機名.out 標準輸出 -服務名-用戶名-角色名-主機名.log 日志信息啟動日志
~]# cat hadoop-root-namenode-VM-0-51-centos.log2.mapreduce組件
mapreduce分布式計算框架組件,開發人員弄的與運維關系不大(只需要聲明一下計算框架)
1)架構圖
2)Mapreduce角色和概述
Jobtracker
TaskTracker
Map Task
ReducerTask
JobTracker
- Master節點只有一個
-管理所有作業/任務的監控、錯誤處理等
-將任務分解成一系列任務,并分派給TaskTr acker
TaskTracker
- SIave節點,一般是多臺
-運行Map Task和Reduce Task
-并與JobTracker交互,匯報任務狀態
Map Task:
-解析每條數據記錄,傳遞給用戶編寫的map()并執行,
-將輸出結果寫入本地磁盤,如果為map-only作業,直接寫入HDFS
Reducer Task:
-從Map Task的執行結果中,遠程讀取輸入數據,對數據進行排序,將數據按照分組傳遞給用戶編寫的reduce函數執行
配置計算框架
計算框架有多種,例如Mapreduce、 storm、 spark, 一般由開發人員根據企業需求編寫
我們使用官方提供的模板案例
3)mapreduce部署
# 在hadoop1上操作 ~]# cd /usr/local/hadoop/etc/hadoop/ # 使用官方提供的模板案例 ~]# cp mapred-site.xml.template mapred-site.xml~]# vim mapred-site.xml <configuration><property> <name>mapreduce.framework.name</name><value>yarn</value></property> </configuration>3.Yarn資源管理組件
1)Yarn架構圖
2)Yarn角色
Resour cemanager
-ApplicationMaster
-Container
Nodemanager
Resour ceManager
-處理客戶端請求,資源分配與調度
-啟動/監控 ApplicationMaster
-監控 NodeManager
NodeManager
-單個節點上的1資源管理
-處理來自Resour ceManager的命令
-處理來自ApplicationMaster的命令
資源調配
-Container
對任務運行環境的抽象,封裝CPU,內存等
啟動命令等任務運行相關的信息資源分配與調度
-ApplicationMaster
數據切分
為應用程序申請資源,并分配給內部任務
任務監控與容錯
YARN的架構圖
# 在hadoop1配置 ~]# vim /usr/local/hadoop/etc/hadoop/yarn-site.xml <configuration><property><name>yarn.resourcemanager.hostname</name> # 指定yarn在哪個節點上<value>hadoop1</value></property> <!-- Site specific YARN configuration properties --><property><name>yarn.nodemanager.aux-services</name> # 計算框架,默認官方<value>mapreduce_shuffle</value></property> </configuration>啟動集群 [以下操作僅在 hadoop1 上執行]
# 注:只要有一臺正確都可以直接拷貝 ~]# for i in node-{1..3}; do rsync -aXSH --delete /usr/local/hadoop ${i}:/usr/local/; done ~]# /usr/local/hadoop/sbin/start-yarn.sh驗證集群
~]# for i in hadoop1 node-{0001..0003};do echo ${i}; ssh ${i} jps; echo -e "\n"; done ~]# /usr/local/hadoop/bin/yarn node -list Total Nodes:3 Node-Id Node-State Node-Http-Address Number-of-Running-Containers node-0003:33212 RUNNING node-0003:8042 0 node-0001:40201 RUNNING node-0001:8042 0 node-0002:38830 RUNNING node-0002:8042 0在master綁定公網ip訪問
這里測試訪問resourcemanager: http://hadoop1:8088/cluster
web頁面訪問
namenode: http://hadoop1:50070
secondarynamenode: http://hadoop1:50090
resourcemanager: http://hadoop1:8088/cluster
datanode: http://node-0001:50075
nodemanager: http://node-0001:8042/node
總結
- 上一篇: SQL基本语句及用法
- 下一篇: Mysql基础运用(视图,变量,存储,流