大資料(Hadoop2.7.3偽分佈搭建)
安裝準備:
vmware10
Centos6.5 64位版本
JDK1.8linux32位版
Hadoop2.7.3版本
安裝過程講解:
字元介面安裝centos6.5,網路設定為主機模式或者橋連線
配置靜態ip 並測試能不能從主機ping的通虛擬機器
使用secureCRT進行遠端ssh登陸
配置etc/hosts 新增ip對應的主機名,比如192.168.17.2 master
安裝ssh 客戶端,通過修改本地yum源來進行,成功後重啟服務
關閉防火牆 chkconfig
建立普通使用者 hadoop(名字可自定義)
設定免金鑰ssh登入(偽分散式其實可以省略
上傳jdk和hadoop2.7.3
使用普通使用者登陸,在home目錄下建立bd資料夾(非必需)
分別解壓jdk和hadoop2.7.3,並測試
配置普通使用者的環境變數,.bashrc(也可以直接在etc/profile進行配置)
測試echo $JAVA_HOME
修改配置5個配置檔案
hadoop-env.sh
core-site.xml
hdfs-site.xml
mapred-sit.xml(將mapred-sit.xml.template重命令)
yarn-site.xml
使用jdk下面的bin目錄中的jps來檢視下程序
或者檢視日誌,在hadoop解壓目錄中logs裡面
在主機windows裡面的system32/drivers/etc/hosts裡面新增linux主機名對應的linux裡面的ip
通過瀏覽器進行訪問8088埠和50070埠進行測試
具體操作:
1.新增hadoop使用者
2.切換到hadoop使用者
配置無密碼ssh認證連線
...(自查)
獲取hadoop安裝包
從hadoop的官網獲取你需要的版本,本教程採用2.8.X版本的安裝包。
官網地址:http://hadoop.apache.org/releases.html
jdk
hadoop自身是用java編寫的,所以需要java環境來執行它。需要下載一個和你選擇的hadoop版本匹配的JDK安裝包。Hadoop版本與java版本的對應關係如下:
hadoop3.0 java8
hadoop2.7及後續版本 java7
hadoop2.6及以前的版本 java6
為方便安裝,我們到java的oracle官網下載一個64位的jdk8的rpm包。
安裝jdk
...(省略)
安裝hadoop
上傳安裝包
Hadoop使用者操作:
檢視上傳的檔案
配置hadoop環境變數
為hadoop配置JAVA_HOME
配置hadoop叢集
叢集配置檔案下載地址:
連結:https://pan.baidu.com/s/1R5081Nd82B5u8DLMysnY7A 密碼 :ldsq
Hadoop基礎配置
core-site.xml 核心配置檔案
它會被所有的hadoop程序使用。需在該配置檔案中配置hadoop叢集預設檔案系統的訪問uri(必需配置),可以指定IO緩衝區的大小等。
這個小叢集的的配置如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.0.11:9000</value>
</property>
</configuration>
HDFS叢集配置
hdfs-site.xml hdfs叢集引數配置檔案
在該檔案配置hdfs叢集的引數,常用的配置引數如下,如果都是使用的預設值,則不需進行配置。
- NameNode相關的引數:
- DataNode相關的引數:
小叢集的配置如下:
hdfs-site.xml
<configuration>
<property>
<description>檔案的備份數量</description>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<description>NameNode檔案系統名稱空間存放目錄</description>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/namespace</value>
</property>
<property>
<description>DataNode上檔案資料塊的存放目錄</description>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/data</value>
</property>
</configuration>
從節點(DataNode)列表配置:
在NameNode的etc/hadoop/slaves 檔案列出所有的DataNode的ip,一個一行。
如
10.0.2.20
10.0.2.21
10.0.2.22
YARN叢集配置
etc/hadoop/mapred-site.xml 配置
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
etc/hadoop/yarn-site.xml 配置
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<description>resourceManager節點的主機地址</description>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.0.13</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
複製機器
1、複製
2、修改複製機器:
修改主機名:
hostnamectl set-hostname xxx
修改ip地址:
vi /etc/sysconfig/network-scripts/ifcfg-enp0s3
修改 IPADDR=指定ip
重啟網路服務
systemctl restart network
啟動叢集
啟動hdfs叢集
1、格式化檔案系統
$ hdfs namenode -format
2、在NameNode上啟動hdfs叢集
$ start-dfs.sh
hadoop程序的日誌將輸出在目錄 $HADOOP_HOME/logs下
3、通過瀏覽器瀏覽NameNode的web介面,預設的瀏覽地址為:
http://namenode-ip:50070
如 http://192.168.0.111:50070
可用jps命令檢視各個節點上執行的java程序
4、在NameNode上關閉hdfs叢集
$ stop-dfs.sh
啟動yarn叢集
1、啟動:在ResourceManager上啟動yarn叢集
$ start-yarn.sh
2、通過瀏覽器瀏覽ResourceManager的web介面,預設的瀏覽地址為:
http:// ResourceManager-ip:8088
如 http://192.168.0.111:8088
3、關閉:在ResourceManager上關閉yarn叢集
$ stop-yarn.sh
啟動jobHistoryServer
mr-jobhistory-daemon.sh start historyserver
測試
1、在HDFS上建立執行MapReduce作業所需的目錄
$ hdfs dfs -mkdir /user
$ hdfs dfs -mkdir /user/<username>
2、將輸入檔案拷貝到分散式檔案系統上:
$ hdfs dfs -mkdir input
$ hdfs dfs -put etc/hadoop/*.xml input
3、執行MapReduce示例作業:
$ hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep input output 'dfs[a-z.]+'
4、檢視輸出結果檔案:
方式一:將分散式檔案系統的輸出檔案拷貝到本地檔案系統上,再檢視:
$ hdfs dfs -get output output
$ cat output/*
方式二:直接在分散式檔案系統上檢視輸出檔案:
$ hdfs dfs -cat output/*
我們會發現,系統被卡死了,為什麼呢?因為機器的記憶體只有512M,記憶體被耗盡了。用 ctrl+c強制結束(會等待好長一段時間),再來看一下記憶體使用情況:
其實我們在啟動HDFS、yarn後,記憶體就用完了。重啟系統後,我們啟動hdfs、yarn,馬上看一下記憶體的使用情況:
再要執行mapreduce任務又需要很多記憶體(不夠用),根本就執行不了。
解決辦法:
1、調高機器的記憶體到1G
2、執行作業時加入jvm重用引數,如下所示:
hadoop jar /usr/hadoop/latest/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.8.3.jar grep -Dmapreduce.job.ubertask.enable=true input output5 'hdf[a-z.]+'