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

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):集資源管理和任務調用、計算功能綁在一塊兒,擴展性較差,不支持多計算框架html

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 文件
 
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

配置完畢。java

 

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 [root@nn1 ~]# gpasswd -a hadoop wheel
3 #查看wheel組裏是否有hadoop用戶
4 [root@nn1 ~]# 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 文件,文件內須要配置nn一、nn二、s一、s二、s3 全部機器的IP 和 主機名。linux

修改/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系統c++

其中:nn2.hadoop: 從節點算法

           s1.hadoop、s2.hadoop、s3.hadoop:三個工做節點數據庫

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

1) 虛擬機克隆

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

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

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.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目錄下

相關文章
相關標籤/搜索