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
1、SSH无明码登录原理
Master(NameNode | JobTracker)作为客户端,要实现无明码公钥认证,连贯到服务器 Salve(DataNode | Tasktracker)上时,须要在 Master 上生成一个密钥对,包含一个公钥和一个私钥,而后将公钥复制到所有的 Slave 上。当 Master 通过 SSH 连贯 Salve 时,Salve 就会生成一个随机数并用 Master 的公钥对随机数进行加密,并发送给 Master。Master 收到加密数之后再用私钥解密,并将解密数回传给 Slave,Slave 确认解密数无误之后就容许 Master 进行连贯了。这就是一个公钥认证过程,其间不须要用户手工输出明码。重要过程是将客户端 Master 复制到 Slave 上。
2、确认三台机器装置好 OpenSSH 的Server和Client
[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
3、hadoop用户 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.pub 到slave并追加到 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文件端口是9000、file:/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 配置信息(namenode、datanode端口和目录地位)
[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 到另外两台 slave1 和slave2机器上
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/