目錄
數據運維的概念以及hadoop概念
運維需要做的工作:收集數據,搭建平臺,數據分析,反饋結果
大數據能做什麼
企業組織利用相關數據分析幫助他們降低成本,提高效率,開發新產品,做出更明智的業務決策等
把數據集合並後進行分析得出的信息和數據關係性,用來察覺商業趨勢,判定研究質量,
大規模並行出來數據庫,數據挖掘電網,分佈式文件系統或數據庫,雲計算和可擴展的存儲系統等
大數據的特性:數量,速度,種類,真實性,價值
hadoop
一種分析和處理海量數據的軟件平臺,是開源軟件,使用java開發,提供一個分佈式基礎架構,其特點是高效性,高擴展性,高效性,高容錯性,低成本.
hadoop常用組件(紅色是一定需要安裝的)
HDFS:hadoop分佈式文件系統(核心組件)
MapReduce:分佈式計算框架(核心組件)
Yarn:集羣資源管理系統(核心組件)
Zookeeper:分佈式協助服務
Hbase:分佈式列存數據庫
Hive:基於Hadoop的數據倉庫
Sqoop:數據同步工具
Pig:基於Hadoop的數據流系統
Mahout:數據挖掘算法庫
Flume:日誌收集工作
HDFS角色及概念
NameNode:Master節點,管理HDFS的名稱空間和數據映射信息,配置副本策略,處理所有客戶端請求
Secondary NameNode :定期合併fsimage和fsedits,推送給NameNode,緊急情況下,可輔助恢復NameNode.
但是Seconddary NameNode並非NameNode的熱備
DataNode:數據存儲節點,存儲實際數據,彙報存儲信息給NameNode
Client:切分文件,訪問HDFS,於NameNode交互,獲取文件位置信息,與DataNode交互,獲取和寫入數據
Block:每塊缺省128MB大小,每塊可以多個副本
數據在客戶端就會被分片,之後訪問NameNode節點,之後NameNode會通知客戶端,存儲在哪裏,HDFS Client收到了對應的存儲信息,將數據存儲到DataNode節點上,當成功存儲成功之後,寫通知NameNode,並把對應的信息寫入到fsimage,fsimage記錄了對應的存儲的地址.fsedits(文件變更日誌)
MapReduce角色及概念
JobTracker :master節點只有一個,管理所有作業/任務的監控\錯誤處理等,將任務分解成一系列任務,並分派給TaskTracker
TaskTracker:slave節點,一般是多臺,運行Map Task和Reduce Task,並與JobTracker交互,彙報任務狀態.
Map Task:解析每條數據記錄,傳遞給用戶編寫的map()並執行,將輸出結果寫入本次磁盤.如果爲map-only作業,直接寫入HDFS.
Reduce Task:從Map Task的執行結果中,遠程讀取輸入數據,對數據進行排序,將數據按照分組傳遞給用戶編寫的Reduce函數執行
Yarn角色及概念
ResourceManager:處理客戶端請求,啓動/監控ApplicMaster,監控NodeManager,資源[分配與調度
NodeManager:單個節點上的資源管理,處理來自ResourceManager的命令,處理來自ApplicationMaster的命令
Container:對任務運行環境的抽象,封裝了CPU,內存等,多維資源以及環境變量,啓動命令等任務運維相關的信息資源分配與調度
ApplicationMaster:數據切分,爲了應用程序申請資源,並分配給內部任務,任務監控與容錯.
Client:用戶與Yarn交互的客戶端程序,提交應用程序,監控應用程序狀態也,殺死應用程序等.
Hadoop模式:單機,僞分佈式,完全分佈式和搭建
搭建所用到機器
192.168.1.60 nn01
192.168.1.61 node1
192.168.1.62 node2
192.168.1.63 node3
單機安裝:hadoop的單機模式安裝很簡單,只需要配置好環境變量即可運行,這個模式一般用來學習和測試Hadoop的功能
[root@nn01 ~]# ls
Desktop hadoop-2.7.7.tar.gz
[root@nn01 ~]# tar -xaf hadoop-2.7.7.tar.gz
[root@nn01 ~]# mv hadoop-2.7.7 /usr/local/hadoop
[root@nn01 ~]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ls
bin include libexec NOTICE.txt sbin
etc lib LICENSE.txt README.txt share
[root@nn01 local]# chown -R root.root hadoop
[root@nn01 local]# jps
1169 Jps
[root@nn01 hadoop]# yum -y install java-1.6.0-openjdk
[root@nn01 hadoop]# rpm -ql java-1.6.0-openjdk
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/
[root@nn01 hadoop]# vim hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
[root@nn01 hadoop]# ./bin/hadoop
Usage: hadoop [--config confdir] [COMMAND | CLASSNAME]
CLASSNAME run the class named CLASSNAME
小案例分析:統計文件中哪個單詞出現的最多--統計詞頻
[root@nn01 hadoop]# pwd
/usr/local/hadoop
[root@nn01 hadoop]# mkdir zhy
[root@nn01 hadoop]# cp *.txt zhy/
[root@nn01 hadoop]# cd zhy/
[root@nn01 zhy]# ls
LICENSE.txt NOTICE.txt README.txt
[root@nn01 hadoop]#./bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount ./zhy ./zhy1
./zhy爲要分析的目錄信息./zhy1爲分析之後的結果存放路徑
[root@nn01 hadoop]# cd zhy1
[root@nn01 zhy1]# ls
part-r-00000 _SUCCESS
[root@nn01 zhy1]# cat part-r-00000
""AS 2
"AS 17
"COPYRIGHTS 1
"Contribution" 2
"Contributor" 2
hadoop常使用的一些分析jar包,因爲hadoop是使用java開發的,在開發中是開發一些算法打包成jar包,我們在使用的時候可以直接使用打包使用的算法進行數據分析.
組建分佈式集羣:僞分佈式是講所有的機子配置在一臺上.
搭建思路:需要在nno1節點上配置/etc/hosts,之後傳送到每臺節點上,在配置免祕鑰登錄,使得nno1可以免祕鑰登錄到其他的集羣上.
[root@nn01 zhy]# cat /etc/hosts
# ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
192.168.1.60 nn01
192.168.1.61 node1
192.168.1.62 node2
192.168.1.63 node3
[root@nn01 zhy]# for i in 192.168.1.{61..63}; do
> scp /etc/hosts root@$i:/etc/hosts
> done
node1 node2 node3都要安裝
[root@node1 ~]# yum -y install java-1.8.0-openjdk-devel
[root@nn01 zhy]# vim /etc/ssh/ssh_config
58 Host *
59 GSSAPIAuthentication yes
60 StrictHostKeyChecking no
[root@nn01 zhy]# ssh-keygen
[root@nn01 zhy]# for i in 192.168.1.{60..63}
> do
> ssh-copy-id $i;
> done
[root@nn01 zhy]# cd /usr/local/hadoop/etc/hadoop/
[root@nn01 hadoop]# ls
capacity-scheduler.xml hadoop-metrics2.properties httpfs-signature.secret log4j.properties ssl-client.xml.example
configuration.xsl hadoop-metrics.properties httpfs-site.xml mapred-env.cmd ssl-server.xml.example
container-executor.cfg hadoop-policy.xml kms-acls.xml mapred-env.sh yarn-env.cmd
core-site.xml hdfs-site.xml kms-env.sh mapred-queues.xml.template yarn-env.sh
hadoop-env.cmd httpfs-env.sh kms-log4j.properties mapred-site.xml.template yarn-site.xml
hadoop-env.sh httpfs-log4j.properties kms-site.xml slaves
[root@nn01 hadoop]# vim slaves
node1
node2
node3
HDFS完全分佈式系統配置
環境配置文件:hadoop-env.sh
核心配置文件:core-site.xml (擴展標記性語音)
HDFS配置文件:hdfs-site.xml (擴展標記性語音)
節點配置文件:slaves
[root@nn01 ~]# cd /usr/local/hadoop/etc/hadoop/
[root@nn01 hadoop]# vim core-site.xml ---在配置文件中添加該選項
19 <configuration>
20 <property>
21 <name>fs.defaultFS</name> ---指定使用什麼存儲方式
22 <value>hdfs://nn01:9000</value> ---分佈式的地址
23 </property>
24 <property>
25 <name>hadoop.tmp.dir</name> ---hadoop所有數據的根目錄,這個是對應節點的數據,不是集羣中的所有數據,
26 <value>/var/hadoop</value> ----需要對此目錄文件進行保護
27 </property>
28 </configuration>
[root@nn01 hadoop]# vim hdfs-site.xml
21 <property>
22 <name>dfs.namenode.http-address</name> ----集羣中誰是namenode節點.其他的節點會主動彙報數據給該臺
23 <value>nn01:50070</value> --
24 </property>
25 <property>
26 <name>dfs.namenode.secondary.http-address</name> ---集羣中誰是namenode.secondary節點.其他的節點會主動彙報數據給該臺
27 <value>nn01:50090</value>
28 </property>
29 <property>
30 <name>dfs.replication</name> ---數據存儲幾份
31 <value>2</value>
32 </property>
33 </configuration>
[root@nn01 hadoop]# vim slaves
node1
node2
node3
[root@nn01 hadoop]# vim hadoop-env.sh
25 export JAVA_HOME="/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.161-2.b14.el7.x86_64/jre/"
33 export HADOOP_CONF_DIR="/usr/local/hadoop/etc/hadoop"
要求所有的階段的配置和目錄要求一模一樣的,所有需要將nno1的配置文件傳輸到其他的節點上,並檢查是否同步
[root@nn01 ~]# for i in node{1..3}; do scp -r /usr/local/hadoop ${i}:/usr/local; done
[root@nn01 ~]# ssh node1 ls /usr/local/hadoop/ |wc -l
12
[root@nn01 ~]# ssh node2 ls /usr/local/hadoop/ |wc -l
12
[root@nn01 ~]# ssh node3 ls /usr/local/hadoop/ |wc -l
12
集羣的初始化
格式化文件系統
[root@nn01 ~]# mkdir /var/hadoop ---創建一個空目錄,該目錄是空白的
[root@nn01 ~]# cd /var/hadoop/
[root@nn01 hadoop]# ls
[root@nn01 hadoop]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ./bin/hdfs namenode -format
20/06/19 10:35:25 INFO common.Storage: Storage directory /var/hadoop/dfs/name has been successfully formatted.
20/06/19 10:35:25 INFO namenode.FSImageFormatProtobuf: Saving image file /var/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
20/06/19 10:35:25 INFO namenode.FSImageFormatProtobuf: Image file /var/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 321 bytes saved in 0 seconds.
20/06/19 10:35:25 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
20/06/19 10:35:25 INFO util.ExitUtil: Exiting with status 0
20/06/19 10:35:25 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at nn01/192.168.1.60
[root@nn01 hadoop]# cd /var/hadoop/
[root@nn01 hadoop]# ls
dfs
[root@nn01 hadoop]# tree .
.
└── dfs
└── name
└── current
├── fsimage_0000000000000000000
├── fsimage_0000000000000000000.md5
├── seen_txid
└── VERSION
3 directories, 4 files
[root@nn01 hadoop]# cd /usr/local/hadoop/
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt NOTICE.txt README.txt sbin share zhy zhy1
一般執行文件都存放在bin下,sbin是管理服務,etc是防配置文件的,log是啓動的時候動態生成的,
[root@nn01 hadoop]# ./sbin/start-dfs.sh ---啓動集羣
Starting namenodes on [nn01]
nn01: Warning: Permanently added 'nn01' (ECDSA) to the list of known hosts.
nn01: starting namenode, logging to /usr/local/hadoop/logs/hadoop-root-namenode-nn01.out
node1: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-node1.out
node3: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-node3.out
node2: starting datanode, logging to /usr/local/hadoop/logs/hadoop-root-datanode-node2.out
Starting secondary namenodes [nn01]
nn01: starting secondarynamenode, logging to /usr/local/hadoop/logs/hadoop-root-secondarynamenode-nn01.out
驗證集羣構建成功
[root@nn01 hadoop]# jps
1256 NameNode
1548 Jps
1439 SecondaryNameNode
[root@nn01 hadoop]# ssh node1 jps
1092 Jps
1018 DataNode
[root@nn01 hadoop]# ssh node2 jps
1058 Jps
983 DataNode
[root@nn01 hadoop]# ssh node3 jps
1058 Jps
984 DataNode
[root@nn01 hadoop]# ./bin/hdfs dfsadmin -report
Live datanodes (3): 有三個角色則證明成功
如果出現問題,需要多這個目錄下去找log的日誌文件
[root@nn01 hadoop]# pwd
/usr/local/hadoop
[root@nn01 hadoop]# ls
bin etc include lib libexec LICENSE.txt logs NOTICE.txt README.txt sbin share zhy zhy1