hadoop 用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力進行高速運算和存儲。雲計算大數據到現在是越來越火,而hadoop成為大數據不可或缺的分布式大數據計算平台。
Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(high throughput)來訪問應用程序的數據,適合那些有着超大數據集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求,可以以流的形式訪問(streaming access)文件系統中的數據。
今天就先教大家如何搭建偽分布式系統。
首先我們准備一台雲服務器 內存 1G 操作系統 centos 7 IP地址是211.159.153.214:22
軟件有hadoop-2.7.1.tar.gz和jdk-7u67-linux-x64.tar.gz
下載地址
https://share.weiyun.com/51a2b349ba1587d69664ad50b7cded3c
首先我們用XSell鏈接(當然大家也可以用別的軟件來連接)
登錄后我們就開始搭建我們的hadoop偽分布式系統
修改主機名與IP地址的對應關系[root@VM_11_203_centos ~]# hostname
查看主機名[root@VM_11_203_centos ~]# vim /etc/hosts
修改文件為一下內容
然后輸入reboot重啟機器
配置ssh免密碼登錄
[root@VM_11_203_centos ~]# ssh 211.159.153.214 The authenticity of host '211.159.153.214 (211.159.153.214)' can't be established. ECDSA key fingerprint is 22:49:b2:5c:7c:8f:73:56:89:29:8a:bd:56:49:74:66. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '211.159.153.214' (ECDSA) to the list of known hosts. root@211.159.153.214's password:
這里我們要輸入密碼特別的不方便,所以要取消。
輸入ssh-keygen -t rsa然后四個回車
[root@VM_11_203_centos ~]# ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: e4:7d:24:39:20:e1:27:07:3b:4c:8d:b0:3d:f6:4f:13 root@VM_11_203_centos The key's randomart image is: +--[ RSA 2048]----+ | ..=+. | | *.+.. . | | . X + E . | | . X . = | | S + . | | o o | | . | | | | | +-----------------+
然后復制密鑰到本機
[root@VM_11_203_centos ~]# ssh-copy-id 211.159.153.214 /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys root@211.159.153.214's password:
[root@VM_11_203_centos ~]# ssh 211.159.153.214 Last login: Thu Mar 16 17:26:00 2017 from 218.21.34.74
因為hadoop是java寫的,所以在這里要 配置JAVA的環境變量,
先創建幾個目錄,用來存放后面的文件
[root@VM_11_203_centos ~]# cd /home [root@VM_11_203_centos home]# ls [root@VM_11_203_centos home]# mkdir softwares [root@VM_11_203_centos home]# mkdir tools [root@VM_11_203_centos home]# mkdir datas [root@VM_11_203_centos home]# cd tools/
看一下系統是否安裝了java
[root@VM_11_203_centos tools]# rpm -qa|grep jdk [root@VM_11_203_centos tools]# rpm -qa|grep java
輸入這兩句啥都沒有說明系統沒有安裝jdk,
開始安裝jdk,通過yum來安裝一個文件上傳插件。[root@VM_11_203_centos tools]# yum install lrzsz –y
最后出現Complete!,說明安裝成功。
然后上傳JDK[root@VM_11_203_centos tools]#rz
如果上傳過慢,也可以用Xsell自帶的文件上傳功能上傳文件,將我們的hadoop-2.7.1.tar.gz和jdk-7u67-linux-x64.tar.gz一起上傳上去到我們新建的tools目錄。
開始用tar命令解壓我們的文件[root@VM_11_203_centos tools]# tar -zxf jdk-7u67-linux-x64.tar.gz -C ../softwares/
解壓完畢后,開始配置環境變量
這里不知道jdk的目錄層級,可以使用pwd進行查看。[root@VM_11_203_centos jdk1.7.0_67]# pwd
/home/softwares/jdk1.7.0_67
開始修改配置文件[root@VM_11_203_centos jdk1.7.0_67]# vim /etc/profile
在profile文件后面追加
export JAVA_HOME=/home/softwares/jdk1.7.0_67 export PATH=$PATH:$JAVA_HOME/bin
使配置生效[root@VM_11_203_centos jdk1.7.0_67]# source /etc/profile
測試環境變量,輸入[root@VM_11_203_centos jdk1.7.0_67]# java –version
出現
java version "1.7.0_67" Java(TM) SE Runtime Environment (build 1.7.0_67-b01) Java HotSpot(TM) 64-Bit Server VM (build 24.65-b04, mixed mode)
說明我們的配置生效了,環境變量沒有配錯。
然后開始安裝hadoop
解壓我們一開始上傳的hadoop文件[root@VM_11_203_centos tools]# tar -zxf hadoop-2.7.1.tar.gz -C ../softwares/
解壓完成后,進入我們的hadoop目錄,來對其進行配置
[root@VM_11_203_centos tools]# cd ../softwares/hadoop-2.7.1/ [root@VM_11_203_centos hadoop-2.7.1]# cd etc/hadoop/
配置hadoop-env.sh ,主要是配置java的環境變量 [root@VM_11_203_centos hadoop-2.7.1]# vim hadoop-env.sh
修改export JAVA_HOME=${JAVA_HOME}為export JAVA_HOME=/home/softwares/jdk1.7.0_67
開始配置core-site.xml
回到hadoop主目錄然后創建data目錄,來存放我們hadoop的緩存目錄。[root@VM_11_203_centos hadoop-2.7.1]# mkdir data [root@VM_11_203_centos hadoop-2.7.1]# cd data [root@VM_11_203_centos data]# mkdir tmp [root@VM_11_203_centos data]# cd tmp [root@VM_11_203_centos hadoop-2.7.1]# cd etc/hadoop/ [root@VM_11_203_centos hadoop]# vim core-site.xml
在configuration標簽下加入(一下文件配置都是在次標簽下加入的)
<name>fs.defaultFs</name> <value>hdfs://211.159.153.214:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/softwares/hadoop-2.7.1/data/tmp</value> </property>
開始配置hdfs-site.xml(設置備份數,hadoop默認是三份,由於我們是偽分布式,所以一份就夠了)
<name>dfs.replication</name> <value>1</value>
然后開始格式化文件系統
[root@VM_11_203_centos hadoop-2.7.1]# bin/hdfs namenode –format
看到successfully formatted說明格式化成功
然后啟動我們的進程[root@VM_11_203_centos hadoop-2.7.1]# sbin/start-dfs.sh
遇到選項就輸入yes
查看進程
[root@VM_11_203_centos hadoop-2.7.1]# jps 14262 NameNode 14385 DataNode 14601 SecondaryNameNode 14724 Jps
出現上面的說明啟動成功
若啟動報錯改變如下配置[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/core-site.xml
在core-site.xml加入
<name>fs.default.name</name> <value>hdfs://127.0.0.1:9000</value> </property>
然后重新啟動就發現啟動成功了。
在瀏覽器輸入http://211.159.153.214:50070/
說明打開成功了。
安裝yarn,hadoop中的資源調度。
然后修改hadoop目錄下的mapred-site.xml.template(主要是讓咋們的mapreduce服從yarn的調度)
[root@VM_11_203_centos hadoop-2.7.1]# mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml [root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/mapred-site.xml
加入一下配置
<name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置yarn-site.xml(配置mapreduce去數據的方式)
[root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/mapred-site.xml [root@VM_11_203_centos hadoop-2.7.1]# vim etc/hadoop/yarn-site.xml
增加如下配置
<name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <!-- Site specific YARN configuration properties --> </property>
啟動[root@VM_11_203_centos hadoop-2.7.1]# sbin/start-yarn.sh
jps看一下
14262 NameNode
15976 NodeManager
14385 DataNode
15884 ResourceManager
14601 SecondaryNameNode
16120 Jps
五個進程都啟動成功,說明咋們的配置正確,啟動中有什么錯誤請查看日志文件。
在瀏覽器輸入
http://211.159.153.214:8088/
說明我們整個hadoop配置成功。
開始測試(用hadoop做一下詞頻統計)
進入 data目錄下
[root@VM_11_203_centos hadoop-2.7.1]# cd /home/data [root@VM_11_203_centos data]# touch words [root@VM_11_203_centos data]# vim words
Hello a
Hello b
統計單詞出現的個數。
開始上傳文件
[root@VM_11_203_centos data]# cd /home/softwares/hadoop-2.7.1/
開始上傳文件[root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -put /home/data/words /words
上傳成功后輸入命令開始統計[root@VM_11_203_centos hadoop-2.7.1]#bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar wordcount /words /out
然后查看結果
[root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -ls / Found 3 items drwxr-xr-x - root supergroup 0 2017-3-16 21:05 /out drwx------ - root supergroup 0 2017-3-16 21:02 /tmp -rw-r--r-- 1 root supergroup 16 2017-3-16 20:51 /words [root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -ls /out Found 2 items -rw-r--r-- 1 root supergroup 0 2017-3-16 21:05 /out/_SUCCESS -rw-r--r-- 1 root supergroup 16 2017-3-16 21:04 /out/part-r-00000
開始查看結果
root@VM_11_203_centos hadoop-2.7.1]# bin/hadoop fs -cat /out/part-r-00000
結果如下
Hello 2
a 1
b 1
查詢完成;
工作過程
hdfs原始數據:hello a
hello b
map階段:
輸入數據:<0,"hello a">
<8,"hello b">
輸出數據:
map(key,value,context) { String line = value; //hello a String[] words = value.split("\t"); for(String word : words) { //hello // a // hello // b context.write(word,1); } }
< hello,1>
< a,1>
< hello,1>
< b,1>
reduce階段(分組排序):
輸入數據:
< a,1>
< b,1>
< hello,{1,1}>
輸出數據:
reduce(key,value,context) { int sum = 0; String word = key; for(int i : value) { sum += i; } context.write(word,sum); }
b
本文轉載自騰雲閣,已獲得作者授權。