一.hadoop是什麼
Hadoop被公認是一套行業大數據標準開源軟件,在分佈式環境下提供了海量數據的處理能力。幾乎所有主流廠商都圍繞Hadoop開發工具、開源軟件、商業化工具和技術服務。今年大型IT公司,如EMC、Microsoft、Intel、Teradata、Cisco都明顯增加了Hadoop方面的投入。
二 .hadoop能幹什麼
hadoop擅長日誌分析,facebook就用Hive來進行日誌分析,2009年時facebook就有非編程人員的30%的人使用HiveQL進行數據分析;淘寶搜索中的自定義篩選也使用的Hive;利用Pig還可以做高級的數據處理,包括Twitter、LinkedIn 上用於發現您可能認識的人,可以實現類似Amazon.com的協同過濾的推薦效果。淘寶的商品推薦也是!在Yahoo!的40%的Hadoop作業是用pig運行的,包括垃圾郵件的識別和過濾,還有用戶特徵建模。(2012年8月25新更新,天貓的推薦系統是hive,少量嘗試mahout!)
三.hadoop生態系統及其核心模塊構成
hadoop1.x版本核心模塊
1、HDFS:Hadoop Distributed File System 分佈式文件系統
2、MapReduce:分佈式運算框架
hadoop2.x版本的核心某塊
3、YARN:Yet Another Resource Negotiator 資源管理調度系統
四、瞭解知名企業的Hadoop應用案例,瞭解Hadoop的三種部署方式
1、單機版搭建
2、僞分佈式搭建
3、完全分佈式搭建
五.搭建Hadoop
1.準備好三臺虛擬機,沒有搭建的請看我的博文Hadoop集羣搭建1
2.在Hadoop1上安裝jdk1.8,因爲之前用到的外網訪問和操作Hadoop的HDFS的時候,jdk1.7好像不太好使,經過試驗還是安裝linux版1.8的jdk
鏈接:https://pan.baidu.com/s/1yc0NWwibeUfmg2VsUFGiRg
提取碼:my7w
我的百度網盤大家可以下載一下
安裝一個訪問虛擬機的SSH工具,都可以像什麼Xshell都可以只是我習慣了SSH
安裝也很簡單一直下一步就ok,我給大家上傳到我的百度雲裏,大家可以自行下載,
鏈接:https://pan.baidu.com/s/1yc0NWwibeUfmg2VsUFGiRg
提取碼:my7w
進入虛擬機裏邊輸出命令ifconfig
,看一下自己虛擬機的ip
進行SSH連接,對了那個SSH是放到window安裝的啊,別搞到虛擬機裏邊安裝
YES
輸入密碼
進入SSH連接頁面
root權限操作
把下載好的JDK1.8放到虛擬機裏邊
編輯命令: cd /usr/
進入usr目錄創建一個文件夾 mkdir jdk
創建一個jdk的文件夾
cd /jdk
進入jdk文件夾 然後把拖拉來的jdk給放置到這個目錄下
然後對jdk進行解壓縮
tar -zxvf jdk-8u131-linux-x64.tar.gz
然後進行配置jdk
vim /etc/profile
export JAVA_HOME=/usr/jdk/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
然後執行一下腳本
[root@hadoop1 jdk1.8.0_131]# source /etc/profile
檢測一下是否安裝成功,看一下jdk的版本信息 java -version
2.同步虛擬機時間
同步三臺虛擬機的時間(時間同步)每臺機器都要做同樣的 操作
開啓你的三臺虛擬機
輸入命令
yum -y install ntp
執行命令
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
在輸入命令
ntpdate pool.ntp.org
注意:如果電腦可以上網,但是虛擬機不可以上網,可以如下操作
編輯
vim /etc/resolv.conf
添加如下兩行指令
nameserver 202.106.0.20
nameserver 8.8.8.8
如果沒法保證每臺虛擬機都聯網,只能用小手該時間
date命令將日期設置爲當前時間
---- date -s 06/18/14
將時間設置爲14點20分50秒
---- date -s 14:20:50
將時間設置爲當前時間(MMDDhhmmYYYY.ss)
----date 0618141614.30
3.設置主機名
根據自己的ip來定義
192.168.94.128 設置這臺機器的主機名爲master
192.168.94.129 設置這臺機器的主機名爲slaver1
192.168.94.130 設置這臺機器的主機名爲slaver2
在192.168.94.128這臺機器執行操作
新增用戶
adduser master
修改密碼:
passwd master
提示輸入密碼和再次確定
修改主機名 vim /etc/sysconfig/network
4、給master用戶root權限
chmod +w /etc/sudoers
vim /etc/sudoers
添加如下操作
master ALL=(ALL) ALL
重啓虛擬機,選擇master用戶登錄
注意:另外兩臺機器也做同上的操作(名字分別爲slaver1和slaver2)
5、修改主機映射(三臺機器都是一樣的操作)
vim /etc/hosts
把hosts中的內容都刪除,然後添加如下
根據自己的ip地址來填寫
192.168.94.128 master
192.168.94.129 slaver1
192.168.94.130 slaver2
重啓網卡
service network restart
剩下的兩臺機器,做同上操作(ip和mac地址是不一樣)
6、配置三臺機器之間的免密登錄(必須在主機master上操作)
ssh-keygen -t rsa
然後四個回車
接着輸入腳本
輸入你的要的密碼三臺機器都要開機啓動,在master主機器上執行
ssh-copy-id master
ssh-copy-id slaver1
ssh-copy-id slaver2
測試: ssh slaver1 就不需要輸入密碼 然後在exit到當前用戶,可以執行下一次測試,如下圖直接進入了slaver1機器上
7、下載hadoop壓縮包,解壓(以下的所有操作都在主機上 進行) 溫馨提示:最好在官網下載,src的源碼,然後在自己的機器上編譯,這樣就不會出現找不到jar包的異常
鏈接:https://pan.baidu.com/s/1jCwg2aMs0OzOHnd1qXp3Kw
提取碼:1kxs
也可以用我的Hadoop包,我這個是2018年的tar之前一直沒有更新,不過這個Hadoop版本還是挺穩定的
把hadoop解壓到/usr/local/目錄下
tar -zxvf hadoop-2.8.4.tar.gz -C /usr/local
把hadoop-2.8.4改名爲hadoop
進入到/usr/local/下執行
mv hadoop-2.8.4 hadoop
8、配置hadoop環境變量(也在主機下執行)
vim /etc/profile
修改配置文件,如下圖
一定要動手操作,不然複製過去還是一臉懵逼,要體驗Hadoop配置的精髓😂
export JAVA_HOME=/usr/jdk/jdk1.8.0_131
export JRE_HOME=$JAVA_HOME/jre
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
立即讓配置文件生效,執行命令
source /etc/profile
此時,可以直接使用hadoop指令了,查看hadoop版本信息命令
hadoop version
9、關閉防火牆(三臺機器都要關閉)
service iptables status (查看防火牆狀態)
service iptables stop(臨時關閉,不需要重啓虛擬機)
chkconfig iptables off(永久關閉,需要重啓機器生效)
10、修改主機的配置文件
進入到/uer/local/hadoop
文件夾
然後創建三個文件夾,
NameNode也記錄着每個文件中各個塊所在的數據節點信息,但它並不永久保存塊的位置信息,因爲這些信息在系統啓動時由數據節點重建
datanode是數據塊在DataNode進程所在的節點上以文件的形式存儲在本地磁盤上
一個是數據本身一個是元數據(數據塊的長度,塊數據的校驗和,以及時間戳)
mkdir namenode
mkdir datanode
mkdir tmp
進入到 /usr/loacal/hadoop/etc/hadoop
文件
然後進行編輯配置文件
vim hadoop-env.sh
原文件
改後文件
編輯第二個文件 core-site.xml
vim core-site.xml
在configuretion中添加
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
改後效果
編輯第三個文件
vim hdfs-site.xml
添加如下配置
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/usr/local/hadoop/namenode</value>
</property>
<property>
<name>dfs.data.dir</name> <value>/usr/local/hadoop/datanode</value>
</property>
效果如下
然後準備編輯第四個文件,vim mapred-site.xml
(沒有mapred-site.xml
但是有一個 mapred-site.xml.template
5、,我們可以把名字改一下就可以了)
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
然後添加
添加配置
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
效果如下
新增配置最後一個文件,編輯第五個文件yarn-site.xml
,堅持就是勝利🤞
vim yarn-site.xml
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2000</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2000</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>500</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2000</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2000</value>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
配置環節就到此結束了,現在開始最後一個編輯,配置一下機器的名稱
vim slavers
然後記得編輯的那些東西保存啊,我沒有寫保存,你們一定要保存啊,不然就白費了,編輯好的文件 esc一下 然後輸入:wd
保存
11、下發配置文件到分機上
下發hadoop到分機
兩個都要執行哦
scp -r /usr/local/hadoop root@slaver1:/usr/local/
scp -r /usr/local/hadoop root@slaver2:/usr/local/
只是下發jdk的安裝包,我的分機都沒有安裝,所以需要下發一下我的jdk文件
scp -r /usr/jdk root@slaver1:/usr/jdk/
scp -r /usr/jdk root@slaver2:/usr/jdk/
執行成功後記得去改下配置文件
主機配置了jdk和hadoop,但是分機沒有配置,所以需要手動的去配置一下,如果懶得小夥伴可以這樣
直接下發配置腳本
scp -r /etc/profile root@slaver1:/etc/
scp -r /etc/profile root@slaver2:/etc/
ok,大功告成,現在到啓動了一步了,成不成功再次一舉啊!!!
12、第一次執行的時候在主機下格式化namenode
hadoop namenode -format
13、啓動hadoop集羣
start-all.sh
啓動成功後,可以檢查一下啓動狀態
jps
這個就是成功的集羣狀態,一定要有nameNode和dataNode沒有的小夥伴就檢查一下配置
14.訪問:50070
端口
外網訪問一下http://192.168.94.128(主機ip):50070/
出現這個代表你的nameNode是啓動成功的
15.訪問8088
端口,
成功如下圖
看到了那個大象了嗎?那個就是Hadoop的logo,開心嗎?哈哈
16、測試mapreduce來實現對pi的計算
進入到/usr/local/hoaddop/shared/hadoop/mapreduce
執行 (這個就是測試集羣,用Hadoop進行π運算)
hadoop jar hadoop-mapreduce-examples-2.8.4.jar pi 20 50
可能時間會長一點,但是一定要耐心等待啊,這可是大數據計算
恭喜你成功了!!!
17、關閉集羣
stop-all.sh
感謝大家的觀看,有什麼建議或者我寫的那點不對,大家可以評論或者私信,感謝大家的點評,配置和啓動集羣問題,可以私信給我,我會盡我的最大努力去解決問題!🤞