1. 程式人生 > >01-Hadoop概述及基礎環境搭建

01-Hadoop概述及基礎環境搭建

行存儲 進行 font rpc con sql數據庫 大量 rip 組合

1 hadoop概述

1.1 為什麽會有大數據處理

傳統模式已經滿足不了大數據的增長 1)存儲問題
  • 傳統數據庫:存儲億級別的數據,需要高性能的服務器;並且解決不了本質問題;只能存結構化數據
  • 大數據存儲:通過分布式存儲,將數據存到一臺機器的同時,還可以備份到其他機器上,這樣當某臺機器掛掉了或磁盤壞掉了,在其他機器上可以拿到該數據,數據不會丟失(可備份)
  • 磁盤不夠掛磁盤,機器不夠加機器(可橫行擴展)
2)分析數據問題
  • 傳統數據庫: 當數據庫存儲億級別的數據後,查詢效率也下降的很快,查詢不能秒級返回
  • 大數據分析:分布式計算。也可以橫行擴展
MapReduce:(批處理)多次與磁盤進行交互,運行比較慢 運算的數據是有範圍的,運算完一次,就代表該批次處理完成 實時計算: (流處理)對時間的要求很高,基本可以快速處理完成                實時計算的數據,沒有範圍的,會根據某個時間的範圍進行計算。spark streaming ,storm, flink 技術分享圖片

1.2 什麽是hadoop?

Hadoop項目是以可靠、可擴展和分布式計算為目的而發展的開源軟件 Hadoop 是Apache的頂級項目 Apache:APACHE軟件基金會,支持Apache的開源軟件社區項目,為公眾提供好的軟件產品 項目主頁:http://hadoop.apache.org 技術分享圖片

大數據的主要特點(4V)
  • 數據容量大(Volume)。從TB級別,躍升到PB級別
  • 數據類型繁多(Variety)。包括網絡日誌、音頻、視頻、圖片、地理位置信息等,這些多類型的數據對數據的處理能力提出了更高要求
  • 商業價值高(Value)。客戶群體細分,提供定制化服務;發掘新的需求同時提高投資的回報率;降低服務成本
  • 處理速度快(Velocity)。這是大數據區分於傳統數據挖掘的最顯著特征。預計到2020年,全球數據使用量將達到35.2ZB。在如此海量的數據面前,處理數據的效率就是企業的生命
hadoop的歷史起源 創始人: Doug Cutting 和 Mike Cafarella 2002開始,兩位創始人開發開源搜索引擎解決方案: Nutch 2004年受Google Lab 開發的 Map/Reduce 和 Google File System(GFS) 的啟發,NDFS( Nutch Distributed File System )引入Nutch 2006年 在Yahoo!工作的Doug Cutting將這套大數據處理軟件命名為Hadoop 技術分享圖片

hadoop核心組件 用於解決兩個核心問題:存儲和計算 核心組件 1)Hadoop Common:一組分布式文件系統和通用I/O的組件與接口(序列化、Java RPC和持久化數據結構) 2)Hadoop Distributed FileSystem(Hadoop分布式文件系統HDFS) 分布式存儲, 有備份, 可擴展 3)Hadoop MapReduce(分布式計算框架) 分布式計算,多臺機器同時計算一部分,得到部分結果,再將部分結果匯總,得到總體的結果(可擴展) 4)Hadoop YARN(分布式資源管理器) MapReduce任務計算的時候,運行在yarn上,yarn提供資源
hadoop的框架演變 技術分享圖片

Hadoop1.0 的 MapReduce(MR1):集資源管理和任務調用、計算功能綁在一起,擴展性較差,不支持多計算框架

Hadoop2.0 的Yarn(MRv2):將資源管理和任務調用兩個功能分開,提高擴展性,並支持多計算框架 hadoop生態圈 技術分享圖片

技術分享圖片

1)HDFS(Hadoop分布式文件系統) HDFS是一種數據分布式保存機制,數據被保存在計算機集群上。數據寫入一次,讀取多次。HDFS 為hive、HBase等工具提供了基礎 2)MapReduce(分布式計算框架) MapReduce是一種分布式計算模型,用以進行大數據量的計算,是一種離線計算框架 這個 MapReduce 的計算過程簡而言之,就是將大數據集分解為成若幹個小數據集,每個(或若幹個)數據集分別由集群中的一個結點(一般就是一臺主機)進行處理並生成中間結果,然後將每個結點的中間結果進行合並, 形成最終結果 3)HBASE(分布式列存數據庫) HBase是一個建立在HDFS之上,面向列的NoSQL數據庫,用於快速讀/寫大量數據。HBase使用Zookeeper進行管理,確保所有組件都正常運行
4)Sqoop(數據ETL/同步工具) Sqoop是SQL-to-Hadoop的縮寫,主要用於傳統數據庫和Hadoop之間傳輸數據 5)flume(分布式日誌收集系統) Flume是一個分布式、可靠、和高可用的海量日誌聚合的系統,如日誌數據從各種網站服務器上匯集起來存儲到HDFS,HBase等集中存儲器中 6)Storm(流示計算、實時計算) Storm是一個免費開源、分布式、高容錯的實時計算系統。Storm令持續不斷的流計算變得容易,彌補了Hadoop批處理所不能滿足的實時要求。Storm經常用於在實時分析、在線機器學習、持續計算、分布式遠程調用和ETL等領域 7)Zookeeper(分布式協作服務) Hadoop的許多組件依賴於Zookeeper,它運行在計算機集群上面,用於管理Hadoop操作 作用:解決分布式環境下的數據管理問題:統一命名,狀態同步,集群管理,配置同步等 8)Pig(ad-hoc腳本) Pig定義了一種數據流語言—Pig Latin,它是MapReduce編程的復雜性的抽象,Pig平臺包括運行環境和用於分析Hadoop數據集的腳本語言(Pig Latin) 其編譯器將Pig Latin 翻譯成MapReduce 程序序列將腳本轉換為MapReduce任務在Hadoop上執行。通常用於進行離線分析 9)Hive(數據倉庫) Hive定義了一種類似SQL的查詢語言(HQL),將SQL轉化為MapReduce任務在Hadoop上執行。通常用於離線分析 HQL用於運行存儲在Hadoop上的查詢語句,Hive讓不熟悉MapReduce開發人員也能編寫數據查詢語句,然後這些語句被翻譯為Hadoop上面的MapReduce任務 10)Spark(內存計算模型) Spark提供了一個更快、更通用的數據處理平臺。和Hadoop相比,Spark可以讓你的程序在內存中運行時速度提升100倍,或者在磁盤上運行時速度提升10倍。 11)Oozie(工作流調度器) Oozi可以把多個Map/Reduce作業組合到一個邏輯工作單元中,從而完成更大型的任務
12)Mahout(數據挖掘算法庫) Mahout的主要目標是創建一些可擴展的機器學習領域經典算法的實現,旨在幫助開發人員更加方便快捷地創建智能應用程序 13)Hadoop YARN(分布式資源管理器) YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基礎上演變而來的,主要是為了解決原始Hadoop擴展性較差,不支持多計算框架而提出的 其核心思想: 將MR1中JobTracker的資源管理和作業調用兩個功能分開,分別由ResourceManager和ApplicationMaster進程來實現 1)ResourceManager:負責整個集群的資源管理和調度 2)ApplicationMaster:負責應用程序相關事務,比如任務調度、任務監控和容錯等 14)Tez(DAG計算模型) 一個運行在YARN之上支持DAG(有向無環圖)作業的計算框架 Tez的目的就是幫助Hadoop處理這些MapReduce處理不了的用例場景,如機器學習 什麽是集群,集群和服務的關系。 技術分享圖片

集群規劃: 一個主節點:nn1.hadoop, 一個從節點:nn2.hadoop, 三個工作節點:s1.hadoop、s2.hadoop、s3.hadoop 網絡規劃: nn1.hadoop 192.168.174.160 nn2.hadoop 192.168.174.161 s1.hadoop 192.168.174.162 s2.hadoop 192.168.174.163 s3.hadoop 192.168.174.164 在企業裏還應有操作機(跳板機) 技術分享圖片

2 基礎環境搭建

配置網絡
 1 // 查看網卡配置文件是否一致
 2 vim /etc/sysconfig/network-scripts/ifcfg-ens33
 3 ?
 4 // 文件配置如下:
 5 TYPE="Ethernet"
 6 BOOTPROTO=static
 7 DEFROUTE="yes"
 8 IPV4_FAILURE_FATAL="no"
 9 IPV6INIT="yes"
10 IPV6_AUTOCONF="yes"
11 IPV6_DEFROUTE="yes"
12 IPV6_FAILURE_FATAL="no"
13 NAME="eno16777736"
14 UUID="cb7a79a9-8114-482b-93f0-fce73bcef88b"
15 DEVICE="eno16777736"
16 ONBOOT="yes"
17 IPADDR=192.168.142.200
18 PREFIX=24
19 GATEWAY=192.168.142.2
20 DNS1=192.168.142.2
21 DNS2=8.8.8.8
22     
23 // 重啟網絡
24 systemctl restart network.service  或   service network restart
25 // ping 百度,測試網絡是否正常
26 ping www.baidu.com 

2.1 配置阿裏雲 yum 源

1)安裝sz rz工具,用於以後用rz sz上傳下載文件
yum install -y lrzsz

2)下載 repo 文件 文件下載地址: http://mirrors.aliyun.com/repo/Centos-7.repo 3)用 rz 將下載的 Centos-7.repo 文件上傳到Linux系統的某個目錄下 4)備份並替換系統的repo文件
1 mv Centos-7.repo /etc/yum.repos.d/ 
2 cd /etc/yum.repos.d/ 
3 mv CentOS-Base.repo CentOS-Base.repo.bak
4 mv Centos-7.repo CentOS-Base.repo

5)執行yum源更新命令
yum clean all 
# 服務器的包信息下載到本地電腦緩存起來
yum makecache 
yum update -y

配置完畢。

2.2 安裝常用軟件

1 yum install -y openssh-server vim gcc gcc-c++ glibc-headers bzip2-devel lzo-devel curl wget openssh-clients zlib-devel autoconf automake cmake libtool openssl-devel fuse-devel snappy-devel telnet unzip zip net-tools.x86_64 firewalld systemd

2.3 關閉防火墻

查看防火墻狀態:firewall-cmd --state 關閉防火墻:systemctl stop firewalld.service 禁止防火墻開機啟動: systemctl disable firewalld.service 查看服務是否開機啟動: systemctl is-enabled firewalld.service

2.4 關閉SELinux

查看關閉狀態 /usr/sbin/sestatus -v 關閉方法 vim /etc/selinux/config 把文件裏的SELINUX=disabled 技術分享圖片 重啟服務器 reboot 啟動之後用 /usr/sbin/sestatus -v 查看selinux的修改狀態

2.5 安裝JDK

1)JDK 下載地址 地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html 技術分享圖片

2)安裝JDK 用 rz 命令將安裝文件上傳Linux 系統 rpm -ivh jdk-8u144-linux-x64.rpm 3)配置JDK 環境變量 修改系統環境變量文件 /etc/profile,在文件尾部追加以下內容
1 export JAVA_HOME=/usr/java/jdk1.8.0_144
2 export JRE_HOME=$JAVA_HOME/jre
3 export PATH=$PATH:$JAVA_HOME/bin
4 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export 設置或顯示環境變量 用export修飾一個變量,A腳本中調用B腳本,B腳本也能拿到這個變量 技術分享圖片

技術分享圖片

4)使修改生效,並配置JDK
1 #使修改生效
2 source /etc/profile
3 #查看系統變量值
4 env | grep PATH
5 #檢查JDK 配置情況
6 env | grep JAVA_HOME

2.6 修改主安裝常用軟件主機名

1 hostnamectl set-hostname nn1.hadoop
2 #修改完後用hostname可查看當前主機名
3 hostname

2.7 創建hadoop 用戶並設置 hadoop 用戶密碼

1 #創建hadoop用戶
2 useradd hadoop
3 ?
4 #給hadoop用戶設置密碼
5 hadoop000

2.8 給hadoop用戶,配置SSH密鑰

配置SSH密鑰的目的:使得多臺機器間可以免密登錄。 實現原理: 使用ssh-keygen在linux01 上生成private和public密鑰,將生成的public密鑰拷貝到遠程機器linux02 上後,就可以使用ssh命令無需密碼登錄到另外一臺機器linux02上。如果想互相登錄,則要把公鑰私鑰都拷貝到遠程機器linux02 上。 技術分享圖片 實現步驟:
 1 #切換到hadoop用戶
 2 su – hadoop                      
 3 #創建.ssh目錄
 4 mkdir ~/.ssh   
 5 #生成ssh公私鑰                         
 6 ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ‘‘    
 7 #輸出公鑰文件內容並且重新輸入到~/.ssh/authorized_keys文件中        
 8 cat ~/.ssh/id_rsa.pub > ~/.ssh/authorized_keys 
 9 #給~/.ssh文件加上700權限
10 chmod 700 ~/.ssh       
11 #給~/.ssh/authorized_keys加上600權限       
12 chmod 600 ~/.ssh/authorized_keys 

2.9 禁止非 whell 組用戶切換到root,配置免密切換root

通常情況下,一般用戶通過執行“su -”命令、輸入正確的root密碼,可以登錄為root用戶來對系統進行管理員級別的配置。 但是,為了更進一步加強系統的安全性,有必要建立一個管理員的組,只允許這個組的用戶來執行 “su -” 命令登錄為 root 用戶,而讓其他組的用戶即使執行 “su -” 、輸入了正確的 root 密碼,也無法登錄為 root 用戶。在UNIX和Linux下,這個組的名稱通常為 “wheel” 。 回到root用戶 1)修改/etc/pam.d/su配置 su 時要求用戶加入到wheel組 修改/etc/pam.d/su文件,將“#auth required pam_wheel.so”替換成“auth required pam_wheel.so” 修改/etc/pam.d/su文件,將“#auth sufficient pam_wheel.so”替換成“auth sufficient pam_wheel.so” 技術分享圖片

2)修改/etc/login.defs文件 只有wheel組可以su 到root cp /etc/login.defs /etc/login.defs_back 先做個備份 tail /etc/login.defs 從文件底部查看 技術分享圖片

3) 添加用戶到管理員,禁止普通用戶su 到 root
1 #把hadoop用戶加到wheel組裏
2 [[email protected] ~]# gpasswd -a hadoop wheel
3 #查看wheel組裏是否有hadoop用戶
4 [[email protected] ~]# cat /etc/group | grep wheel

4)用 hadoop 用戶驗證一下,由於 hadoop 沒有在wheel 組裏,所以沒有 su - root 權限。 技術分享圖片

5)修改/etc/pam.d/su文件(上面已經配好) 將字符串“#auth sufficient pam_wheel.so”替換成“auth sufficient pam_wheel.so” 技術分享圖片

2.10 配置hosts 文件

在克隆機器前,配置nn1 機器的 /etc/hosts 文件,文件內需要配置nn1、nn2、s1、s2、s3 所有機器的IP 和 主機名。

修改/etc/hosts文件,追加以下內容。vim /etc/hosts
1 192.168.174.160 nn1.hadoop
2 192.168.174.161 nn2.hadoop
3 192.168.174.162 s1.hadoop
4 192.168.174.163 s2.hadoop
5 192.168.174.164 s3.hadoop

2.11 克隆4臺機器

執行完上面的命令,一個基礎的linux系統就配置好了。然後再根據這個虛擬機克隆出 4個linux系統

其中:nn2.hadoop: 從節點

s1.hadoop、s2.hadoop、s3.hadoop:三個工作節點

並用hadoop用戶,測試彼此之間是否能進行ssh通信

1) 虛擬機克隆

右鍵 nn1 機器→ 管理 → 克隆。

克隆完成後,需要給克隆的虛擬機配置靜態IP。

2)配置靜態IP

1)查看網卡硬件名稱和基本信息 ip add

技術分享圖片

虛擬機會給每個克隆的虛擬機創建新網卡,如上面的 ens33 。 如果網卡設備信息中沒有顯示IP,則需要配置配置文件 cd /etc/sysconfig/network-scripts/
技術分享圖片 vim ifcfg-ens33 service network restart ifcfg-xxx 中的xxx 與網卡名相同後,配置ifcfg-xxx 文件
 1 TYPE="Ethernet"
 2 BOOTPROTO="static"
 3 DEFROUTE="yes"
 4 PEERDNS="yes"
 5 PEERROUTES="yes"
 6 IPV4_FAILURE_FATAL="no"
 7 IPV6INIT="yes"
 8 IPV6_AUTOCONF="yes"
 9 IPV6_DEFROUTE="yes"
10 IPV6_PEERDNS="yes"
11 IPV6_PEERROUTES="yes"
12 IPV6_FAILURE_FATAL="no"
13 NAME="ens33"
14 UUID="d15377eb-6ffa-44c9-a06d-f7eb00f49f44"
15 DEVICE="ens33"
16 ONBOOT="yes"
17 IPADDR=192.168.142.133
18 PREFIX=24
19 GATEWAY=192.168.142.2
20 DNS1=192.168.142.2
21 DNS2=8.8.8.8

需要修改的內容,配置完的網卡文件 技術分享圖片

配置完後,用systemctl restart network.service重啟網絡服務,當前的ssh就連接不上了,是因為網絡IP被改變成你自己設置的靜態IP。 用 ip add 查看網卡信息 用 ping www.baidu.com 看是否能連接外網。
1 hostnamectl set-hostname nn1.hadoop
2 #修改完後用hostname可查看當前主機名
3 hostname

如果上不了網執行以下操作 3)配置 /etc/resolv.conf 的 nameserver cat /etc/resolv.conf 查看nameserver是否被設置正確 技術分享圖片 vim /etc/resolv.conf 修改文件,如果不存在nameserver就在文件下面添加,如果存在就修改,把nameserver 設置成自己對應的DNS。 4)停止掉NetworkManager服務 五臺一起執行
1 // 停止NetworkManager服務
2 systemctl stop NetworkManager.service
3 // 並設置成開機不啟動
4 systemctl disable NetworkManager.service
5 // 之後重啟網絡服務
6 systemctl restart network.service

5)修改每個機器的主機名
1 hostnamectl set-hostname nn2.hadoop
2 hostnamectl set-hostname s1.hadoop
3 hostnamectl set-hostname s2.hadoop
4 hostnamectl set-hostname s3.hadoop

3 批量腳本說明及使用

3.1 批量腳本說明

執行腳本要給腳本加上可執行權限
1 chmod -R +x ~/hadoop_op

exe.sh : 執行su 命令,與ssh_root.sh 配套使用 ips :用於存放要操作的主機列表,用回車或空格隔開 scp_all.sh :用hadoop用戶拷貝當前機器的文件到其他操作機 ssh_all.sh :用hadoop 用戶可登陸其他操作機執行相應操作 ssh_root.sh : 用hadoop 用戶登錄其他操作機,並su 到 root 用戶,以root 用戶執行相應操作,與exe.sh 配套使用 1)ips 技術分享圖片

2)ssh_all.sh 技術分享圖片

3)ssh_root.sh 技術分享圖片

4)exe.sh 技術分享圖片

5)scp_all.sh 技術分享圖片

3.2 批量腳本的使用

1)將批量腳本上傳到機器上 把hadoop_op.zip文件用 rz 命令上傳到 nn1.hadoop 機器上 2)解壓批量腳本,並修改批量腳本權限 一般先切換到當前使用用戶的home目錄下 解壓: unzip hadoop_op.zip 修改權限:chmod -R 775 ./hadoop_op 3)測試批量SSH命令 ./ssh_all.sh hostname 4)測試批量傳文件 技術分享圖片 如果想將nn1.hadoop 機器上/root下的s1 文件,分發到其他機器的/root/dir/ 目錄下,該如何操作? 1)nn1.hadoop:將/root/s1 文件拷貝到hadoop家目錄下 技術分享圖片

2)多機分發腳本,將s1文件分發到其他機器的hadoop家目錄 技術分享圖片

技術分享圖片

這步一般的是分發到/tmp 臨時目錄下,這個目錄linux會定期刪除 3)執行ssh_root.sh 在root家目錄下創建dir目錄 技術分享圖片

技術分享圖片

4)執行ssh_root.sh 將每臺機器的hadoop用戶家目錄下的s1文件拷貝到/root/dir目錄下 技術分享圖片

技術分享圖片

01-Hadoop概述及基礎環境搭建