Hadoop是一個開源的Apache項目,一般用來進行大數據處理。java
Hadoop集羣的架構:
master節點維護分佈式文件系統的全部信息,並負責調度資源分配,在Hadoop集羣中node-master
就是master的角色,其包括兩個服務:node
worker節點負責存放數據,並提供執行任務的能力。在worker節點上包含兩個進程:shell
NameNode
;如下配置都是針對Ubuntu系統的。我準備了3臺機器:apache
hadoop
,並設置密碼:sudo adduser hadoop
hadoop
用戶添加到sudo
用戶組獲取管理員權限:sudo adduser hadoop sudo
我安裝的是JDK8,安裝方式略。bash
爲了節點之間能夠方便的經過名字來通訊,咱們在hosts文件中加入以下內容:架構
192.168.0.113 node-master 192.168.0.114 node1 192.168.0.115 node2 192.168.0.116 node3
配置了ssh證書後,master階段經過ssh免密登陸其餘節點。app
hadoop
用戶登陸到mastr機器,並建立SSH證書:ssh-keygen -b 4096 -C 'hadoop-yarn'
cat /home/hadoop/.ssh/id_rsa.pub
/home/hadoop/.ssh
文件夾下建立名爲master.pub
的文件,並將上面複製的公鑰信息粘貼到裏面;cat ~/.ssh/master.pub >> ~/.ssh/authorized_keys
登陸到node-master
,下載hadoop,並解壓:框架
http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-3.1.3/hadoop-3.1.3.tar.gz tar -xzf hadoop-3.1.3.tar.gz ln -s hadoop-3.1.3 hadoop
/home/hadoop/.profile
,添加以下內容:PATH=/home/hadoop/hadoop/bin:/home/hadoop/hadoop/sbin:$PATH
.bashrc
,添加下面的內容:export HADOOP_HOME=/home/hadoop/hadoop export PATH=${PATH}:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin
這裏我安裝的是ORACLE版本的JDK,目錄/usr/local/jdk
,修改~/hadoop/etc/hadoop-env.sh
,設置JAVA_HOME:ssh
export JAVA_HOME=/usr/local/jdk
修改~/hadoop/etc/hadoop/core-site.xml
文件,設置NameNode的路徑爲node-master的9000端口:分佈式
<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.default.name</name> <value>hdfs://node-master:9000</value> </property> </configuration>
修改hdfs-site.xml
,內容以下:
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/data/nameNode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/data/dataNode</value> </property> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
最後一個屬性dfs.replication
表示該集羣上的數據被冗餘多少倍。注意replication的值不要超過worker節點的實際數量。
修改mapred-site.xml
,設置YARN做爲默認的MapReduce操做的框架:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>yarn.app.mapreduce.am.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.map.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> <property> <name>mapreduce.reduce.env</name> <value>HADOOP_MAPRED_HOME=$HADOOP_HOME</value> </property> </configuration>
修改yarn-site.xml
。yarn.resourcemanager.hostname
的值設置爲node-master的ip地址:
<configuration> <property> <name>yarn.acl.enable</name> <value>0</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>203.0.113.0</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
建立一個名爲workers
的啓動腳本,用來啓動須要的進程。修改~/hadoop/etc/hadoop/workers
,把全部的worker節點都加進去。
默認的內存分配對於內存小於8GB的機器並不合適,全部對低內存的機器須要作一些特殊配置。
一個YARN任務的執行會用用到兩種類型的資源:
爲了集羣可以正常工做,下面4個配置必須合理的配置:
yarn.nodemanager.resource.memory-mb
,配置在yarn-site.xml
中;yarn.scheduler.maximum-allocation-mb
和yarn.scheduler.minimum-allocation-mb
,都在yarn-site.xml
文件中配置;yarn.app.mapreduce.am.resource.mb
,配置在mapred-site.xml
中;mapreduce.map.memory.mb
和mapreduce.reduce.memory.mb
,都配置在mapred-site.xml
。以上四個類型的配置之間的關係以下圖:
以2G內存的節點爲例,可行的配置以下:
屬性 | 值 |
---|---|
yarn.nodemanager.resource.memory-mb | 1536 |
yarn.scheduler.maximum-allocation-mb | 1536 |
yarn.scheduler.minimum-allocation-mb | 128 |
yarn.app.mapreduce.am.resource.mb | 512 |
mapreduce.map.memory.mb | 256 |
mapreduce.reduce.memory.mb | 256 |
home/hadoop/hadoop/etc/hadoop/yarn-site.xml
,添加以下配置:<property> <name>yarn.nodemanager.resource.memory-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>1536</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>128</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
最後一個配置禁用虛擬內存檢查。
/home/hadoop/hadoop/etc/hadoop/mapred-site.xml
, 添加以下內容:<property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>512</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>256</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>256</value> </property>
和正常的單機文件系統同樣,HDFS在使用以前也須要格式化。在node-master上,運行以下命令:
hdfs namenode -format
到這裏,hadoop的安裝完成了,能夠運行了。
接下來看下如何在NameNode和DataNodes上啓動HDFS,以及如何進行監控。
start-dfs.sh
這個命令會在node-master上啓動NameNode
和SecondaryNameNode
進程,同時在數據節點上建立DataNode
進程。數據節點根據workers
文件中的配置。
jps
命令來查看。在node-master上運行jps,能夠看到NameNode和SecondaryNameNode,在worker節點上運行jps課題看到DataNode進程。stop-dfs.sh
hdfs dfsadmin
命令能夠得到一些有用的信息: