乐趣区

关于hadoop:Hadoop集群搭建

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/

退出移动版