Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为外围的Hadoop为用户提供了零碎底层细节通明的分布式基础架构。

对于Hadoop的集群来讲,能够分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,治理文件系统的命名空间和客户端对文件系统的拜访操作;集群中的DataNode治理存储的数据。MapReduce框架是由一个独自运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker独特组成的。主节点负责调度形成一个作业的所有工作,这些工作散布在不同的从节点上。主节点监控它们的执行状况,并且从新执行之前的失败工作;从节点仅负责由主节点指派的工作。当一个Job被提交时,JobTracker接管到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度工作并监控TaskTracker的执行。

从下面的介绍能够看出,HDFS和MapReduce独特组成了Hadoop分布式系统体系结构的外围。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和工作解决。HDFS在MapReduce工作处理过程中提供了文件操作和存储等反对,MapReduce在HDFS的根底上实现了工作的散发、跟踪、执行等工作,并收集后果,二者相互作用,实现了Hadoop分布式集群的次要工作。

具体装置步骤如下:

一、装置Linux Centos6.7操作系统,配置网络信息如下,具体步骤略

配置host主机名

[root@master ~]# vim /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=master #另外两台是slave1和slave2

NTPSERVERARGS=iburst

须要重启后能力失效

长期更改主机名的办法是

[root@master ~]# hostname master

[root@master ~]# bash

配置IP

[root@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0

批改IP

IPADDR=192.168.101.230

机器分部信息如下:

192.168.101.230 master

192.168.101.231 slave1

192.168.101.230 slave2

二、增加3台虚拟机hosts文件

slave1和slave2都要增加,hosts文件的作用,它次要用于确定每个结点的IP地址,不便后续master结点能疾速查到并拜访各个结点

[root@master ~]# vim /etc/hosts

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.101.230 master

192.168.101.231 slave1

192.168.101.232 slave2

三、建设hadoop运行账号密码hadoop,三台机器上都须要建设

[root@master ~]# useradd hadoop

[root@master ~]# passwd hadoop

更改用户 hadoop 的明码 。

新的 明码:

有效的明码: 它基于字典单词

有效的明码: 过于简略

从新输出新的 明码:

passwd: 所有的身份验证令牌曾经胜利更新

赋予hadoop用户执行所有命令的权限 ,三台主机上都增加,之后应用sudo + 命令就减少权限了

[root@master ~]# vim /etc/sudoers

root    ALL=(ALL)        ALL

hadoop  ALL=(ALL)ALL

四、 配置ssh免明码登录

Hadoop在运行中须要远程管理Hadoop守护过程,在Hadoop启动之后,NameNode是通过SSH来启动和进行各个DateNode上的守护过程,这就必须在主从节点之间实现无明码登录执行指令,所以这里应用SSH无明码公钥认证形式,这样NameNode应用SSH无明码登录并启动DateNode过程,同样原理DateNode上也能应用SSH无明码登录到NameNode

1SSH无明码登录原理

Master(NameNode | JobTracker)作为客户端,要实现无明码公钥认证,连贯到服务器Salve(DataNode | Tasktracker)上时,须要在Master上生成一个密钥对,包含一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连贯Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就容许Master进行连贯了。这就是一个公钥认证过程,其间不须要用户手工输出明码。重要过程是将客户端Master复制到Slave上。

2、确认三台机器装置好OpenSSHServerClient

[root@master ~]# rpm -qa | grep openssh

openssh-server-5.3p1-112.el6_7.i686

openssh-askpass-5.3p1-112.el6_7.i686

openssh-5.3p1-112.el6_7.i686

openssh-clients-5.3p1-112.el6_7.i686

[root@master ~]# rpm -qa | grep  rsync

rsync-3.0.6-12.el6.i686

如果没有装置,应用如下命令进行装置

yum install -y ssh

yum install -y rsync

service sshd restart

确认三台机器的sshd配置文件容许无明码登录

[hadoop@master root]$ vi /etc/ssh/sshd_config

去掉正文符号“#”:

RSAAuthentication yes

PubkeyAuthentication yes

AuthorizedKeysFile      .ssh/authorized_keys

3hadoop用户Master机器上生成dsa加密形式的明码对,留神:应用hadoop用户登录虚拟机

[hadoop@master root]$ whoami

hadoop

生成密钥对,-t 加密类型dsa -P原明码空,-f指定加密后文件keyfile导入到.ssh/id_dsa

[hadoop@master root]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

把公钥文件退出到验证文件中

[hadoop@master root]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

批改权限

[hadoop@master ~]$ chomod 700 ~/.ssh

[hadoop@master root]$ chmod 600 ~/.ssh/authorized_keys

测试ssh无明码登录

[hadoop@master root]$ ssh localhost #这里不须要输出明码即可间接登录

Last login: Wed Feb 24 11:50:14 2016 from localhost

4、拷贝id_dsa.pubslave并追加到authorized_keys

拷贝id_dsa.pub到slave1上/home/hadoop/目录下

[hadoop@master ~]$ scp ~/.ssh/id_dsa.pub hadoop@slave1:/home/hadoop/

hadoop@192.168.101.231's password:

id_dsa.pub                                    100%  603     0.6KB/s   00:00

雷同办法拷贝到slave2上,略

hadoop用户首先在两台slave上新建/home/hadoop/.ssh文件

[hadoop@slave1 root]$ mkdir ~/.ssh

[hadoop@slave2 root]$ ls -la ~/

drwxrwxr-x   2 hadoop hadoop 4096 2月 24 12:07 .ssh

[hadoop@slave1 ~]$ pwd;ls

/home/hadoop

id_dsa.pub

5、追加公钥id_dsa.pub内容到authorized_keys

[hadoop@slave1 ~]$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

[hadoop@slave2 ~]$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

批改文件权限

[hadoop@slave1 ~]$ chomod 700 ~/.ssh

[hadoop@slave1 ~]$ chmod 600 ~/.ssh/authorized_keys

同样批改slave2机器上.ssh和.ssh/quthorized_key的权限

测试master登录slave机器,能够免明码间接登录了

[hadoop@master ~]$ ssh slave1

Last login: Wed Feb 24 13:02:07 2016 from master

到此,hadoop用户能够在master机器上应用ssh免明码登录slave1和slave2,留神,当初须要在slave1和slave2上执行下面的操作,让用户hadoop应用ssh免明码密钥登录master,具体配置省略,最终三台虚拟机之前全副能够通过密钥免明码登录

五、装置java

六、下载并解压hadoop安装包

1、下载hadoop2.6安装包

[hadoop@master local]# cd /usr/local/src/

[hadoop@master src]# sudo wget

2、解压hadoop2.6,拷贝hadoop2.6/usr/local目录下

[hadoop@master src]#sudo tar -zxvf hadoop-2.6.0.tar.gz

[hadoop@master src]# ls

hadoop-2.6.0

[hadoop@master src]# mv hadoop-2.6.0 /usr/local/

[hadoop@master local]$ cd /usr/local/hadoop-2.6.0/

批改hadoop文件夹的属主和属组

[hadoop@master local]$ sudo chown -R hadoop:hadoop hadoop-2.6.0/

增加环境变量

sudo vim /etc/profile

hadoop variable settings

HADOOP_HOME=/usr/local/hadoop-2.6.0/

export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME

export HADOOP_MAPRED_HOME=$HADOOP_HOME

export HADOOP_YARN_HOME=$HADOOP_HOME

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HADOOP_HOME/lib

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

七、批改hadoop的配置文件

1、配置之前,先在站长博客本地文件系统创立以下文件夹:/hadoop/tmp/dfs/data/dfs/name

[hadoop@master local]$ cd /usr/local/hadoop/

[hadoop@master hadoop-2.6.0]$ mkdir tmp

[hadoop@master hadoop-2.6.0]$ mkdir -p dfs/data

[hadoop@master hadoop-2.6.0]$ mkdir dfs/name

2、进入hadoop配置文件目录,批改配置文件

次要波及的配置文件有7个:都在/hadoop-2.6.0/etc/hadoop文件夹下

hadoop-2.6.0/etc/hadoop/hadoop-env.sh

hadoop-2.6.0/etc/hadoop/yarn-env.sh

hadoop-2.6.0/etc/hadoop/slaves

hadoop-2.6.0/etc/hadoop/core-site.xml

hadoop-2.6.0/etc/hadoop/hdfs-site.xml

hadoop-2.6.0/etc/hadoop/mapred-site.xml

hadoop-2.6.0/etc/hadoop/yarn-site.xml

[hadoop@master hadoop-2.6.0]$ cd etc/hadoop/

[hadoop@master hadoop]$ ls

capacity-scheduler.xml      httpfs-env.sh            mapred-env.sh

configuration.xsl           httpfs-log4j.properties  mapred-queues.xml.template

container-executor.cfg      httpfs-signature.secret  mapred-site.xml.template

core-site.xml               httpfs-site.xml          slaves

hadoop-env.cmd              kms-acls.xml             ssl-client.xml.example

hadoop-env.sh               kms-env.sh               ssl-server.xml.example

hadoop-metrics2.properties  kms-log4j.properties     yarn-env.cmd

hadoop-metrics.properties   kms-site.xml             yarn-env.sh

hadoop-policy.xml           log4j.properties         yarn-site.xml

hdfs-site.xml               mapred-env.cmd

1)配置 hadoop-env.sh文件,批改JAVA_HOME

[hadoop@master hadoop]$ sudo vim hadoop-env.sh

JAVA_HOME=/usr/local/jdk1.8.0_20/

2)配置 yarn-env.sh 文件,批改JAVA_HOME

[hadoop@master hadoop]$ sudo vim yarn-env.sh

some Java parameters

export JAVA_HOME=/usr/local/jdk1.8.0_20/

3)配置slaves文件,减少slave节点

[hadoop@master hadoop]$ sudo vim slaves

slave1

slave2

4)配置 core-site.xml文件,减少hadoop外围配置(hdfs文件端口是9000file:/usr/local/hadoop-2.6.0/tmp

[hadoop@master hadoop]# vim core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://master:9000</value>

</property>

<property>

<name>io.file.buffer.size</name>

<value>131072</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/usr/local/hadoop-2.6.0/tmp</value>

<description>Abasefor other temporary directories.</description>

</property>

<property>

<name>hadoop.proxyuser.hadoop.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.hadoop.groups</name>

<value>*</value>

</property>

</configuration>

5)配置 hdfs-site.xml 文件,减少hdfs配置信息(namenodedatanode端口和目录地位)

[hadoop@master hadoop]# vim hdfs-site.xml

<configuration>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>master:9001</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/usr/local/hadoop-2.6.0/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/usr/local/hadoop-2.6.0/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

</configuration>

6)配置 mapred-site.xml 文件,减少mapreduce配置(应用yarn框架、jobhistory应用地址以及web地址)

[hadoop@master hadoop]# vim mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>master:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>master:19888</value>

</property>

</configuration>

7)配置 yarn-site.xml 文件,减少yarn性能

[hadoop@master hadoop]# vim yarn-site.xml

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

<value>org.apache.hadoop.mapred.ShuffleHandler</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:8035</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>master:8033</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>master:8088</value>

</property>

</configuration>

3、应用上面的命令将配置好的hadoop文件copy到另外两台slave1slave2机器上

scp -r /usr/local/hadoop-2.6.0/ hadoop@slave1:/usr/local/

确认slave1和slave2机器上的/hadoop-2.6.0文件夹和子文件夹属主和属组都是hadoop,否则应用上面的命令批改

[hadoop@slave1 local]$ sudo chown -R hadoop:hadoop /usr/local/hadoop-2.6.0/

八、验证hadoop

1、格式化namenode:

[hadoop@master hadoop-2.6.0]$ cd /usr/local/hadoop-2.6.0/

[hadoop@master hadoop-2.6.0]$ ./bin/hdfs namenode -format

[hadoop@master hadoop-2.6.0]$ ssh slave1

Last login: Wed Feb 24 20:53:43 2016 from master

[hadoop@slave1 ~]$ cd /usr/local/hadoop-2.6.0/

[hadoop@slave1 hadoop-2.6.0]$ ./bin/hdfs namenode -format

[hadoop@master hadoop-2.6.0]$ ssh slave2

Last login: Wed Feb 24 21:05:35 2016 from master

[hadoop@slave2 ~]$ cd /usr/local/hadoop-2.6.0/

[hadoop@slave2 hadoop-2.6.0]$ ./bin/hdfs namenode -format

2、启动hadoop:

[hadoop@master hadoop-2.6.0]$ ./sbin/start-all.sh

[hadoop@master hadoop-2.6.0]$ jps

5552 SecondaryNameNode

6281 Jps

5690 ResourceManager

5373 NameNod

3 jps测验各后盾过程是否胜利启动

[hadoop@master hadoop-2.6.0]$ jps

7170 ResourceManager

6853 NameNode

7512 Jps

7033 SecondaryNameNode

4、其余相干命令

启动hdfs

[hadoop@master hadoop-2.6.0]$ ./sbin/start-dfs.sh

进行hdfs:

[hadoop@master hadoop-2.6.0]$ ./sbin/stop-dfs.sh

启动yarn:

[hadoop@master hadoop-2.6.0]$ ./sbin/start-yarn.sh

进行yarn:

[hadoop@master hadoop-2.6.0]$ ./sbin/stop-yarn.sh

查看集群状态:

[hadoop@master hadoop-2.6.0]$ ./bin/hdfs dfsadmin -report http://192.168.101.230:50070/