hadoop集群环境搭建

 参考文章:html

  • https://www.linuxidc.com/Linux/2016-02/128149.htmjava

  • https://blog.csdn.net/circyo/article/details/46724335node

前言

本教程是使用编译hadoop的方式进行安装,缘由是下载的hadoop是32位,安装完后会有问题。 linux

编译方法:http://www.cnblogs.com/champaign/p/8952533.htmlweb

 1、集群部署介绍

1.1 Hadoop简介

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

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

从上面的介绍能够看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程当中提供了文件操做和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工做,并收集结果,两者相互做用,完成了Hadoop分布式集群的主要任务。架构

1.2 环境说明

准备三台服务器:并发

IP 用途 操做系统 主机名
172.18.29.151 Centos 6.8 master.hadoopo
172.18.29.152 从1 Centos 6.8 slave1.hadoop
172.18.29.153 从2 Centos 6.8 slave2.hadoop

 

 

 

在三台服务器中建立相同帐号:hadoop  密码三台也一要致,最好不要与帐号相同app

1.3 环境配置

修改三台服务器的hosts文件:

vi /etc/hosts
新增如下内容
172.18.29.151 master.hadoop
172.18.29.152 slave1.hadoop
172.18.29.153 slave2.hadoop

可使用 ping 命令测试三台机器的连通性

1.4 所需软件

1)JDK软件

    下载地址:http://www.Oracle.com/technetwork/java/javase/index.html

2)Hadoop软件

    使用前面编译生成的安装包

2SSH无密码验证配置

若是你的Linux没有安装SSH,请首先安装SSH

yum -y install openssh-server

2.1 SSH基本原理和用法

1)SSH基本原理

    SSH之因此可以保证安全,缘由在于它采用了公钥加密。过程以下:

(1)远程主机收到用户的登陆请求,把本身的公钥发给用户。

(2)用户使用这个公钥,将登陆密码加密后,发送回来。

(3)远程主机用本身的私钥,解密登陆密码,若是密码正确,就赞成用户登陆。

2SSH基本用法

    假如用户名为java,登陆远程主机名为linux,以下命令便可:

    $ ssh java@linux

    SSH的默认端口是22,也就是说,你的登陆请求会送进远程主机的22端口。使用p参数,能够修改这个端口,例如修改成88端口,命令以下:

    $ ssh -p 88 java@linux

    注意:若是出现错误提示:ssh: Could not resolve hostname linux: Name or service not known,则是由于linux主机未添加进本主机的Name Service中,故不能识别,须要在/etc/hosts里添加进该主机及对应的IP便可:

    linux    192.168.1.107

2.2配置Master无密码登陆全部Salve

1SSH无密码原理

Master(NameNode | JobTracker)做为客户端,要实现无密码公钥认证,链接到服务器Salve(DataNode | Tasktracker)上时,须要在Master上生成一个密钥对,包括一个公钥和一个私钥,然后将公钥复制到全部的Slave上。当Master经过SSH链接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数以后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误以后就容许Master进行链接了。这就是一个公钥认证过程,其间不须要用户手工输入密码。

2)Master机器上设置无密码登陆

a. Master节点利用ssh-keygen命令生成一个无密码密钥对。

首先切换到hadoop用户,在Master节点上执行如下命令:

[root@SVR-29-151 ~]# su hadoop
[hadoop@SVR-29-151 root]$ ssh-keygen -t rsa

运行后询问其保存路径时直接回车采用默认路径。生成的密钥对:id_rsa(私钥)和id_rsa.pub(公钥),默认存储在"/用户名/.ssh"目录下。

 b. 接着在Master节点上作以下配置,把id_rsa.pub追加到受权的key里面去。
[hadoop@SVR-29-151 root]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

查看下authorized_keys的权限,若是权限不对则利用以下命令设置该文件的权限:

[hadoop@SVR-29-151 root]$ cd ~/.ssh
[hadoop@SVR-29-151 .ssh]$ ll 
[hadoop@SVR-29-151 .ssh]$
chmod 600 authorized_keys
c. 用root用户登陆修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。

检查下面几行前面”#”注释是否取消掉:

RSAAuthentication yes # 启用 RSA 认证

PubkeyAuthentication yes # 启用公钥私钥配对认证方式

AuthorizedKeysFile  %h/.ssh/authorized_keys # 公钥文件路径

设置完以后记得重启SSH服务,才能使刚才设置有效。

[root@SVR-29-151 ~]# service  sshd restart
d. 用root用户登陆修改SSH配置文件"/etc/ssh/ssh_config"的下列内容(因为个人系统环境中ssh 默认端口必须使用 62222,如没有修改默认端口此步骤能够略过)。

将port选项的值修改成下图

一样设置完以后记得重启SSH服务,才能使刚才设置有效

[root@SVR-29-151 ~]# service sshd restart
e.切换到hadoop用户下,使用ssh-copy-id命令将公钥传送到远程主机上(这里以Slave1.Hadoop为例)。
[root@SVR-29-151 ~]# su hadoop
[hadoop@SVR-29-151 root]$ ssh-copy-id hadoop@slave1.hadoop

 

而后测试是否无密码登陆其它机器成功

[hadoop@SVR-29-151 root]$ ssh slave1.hadoop

如图所示证实成功。

 到此为止,咱们通过5步已经实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登陆,下面就是重复上面的 步骤eSlave2.Hadoop服务器进行配置。这样,咱们就完成了"配置Master无密码登陆全部的Slave服务器"。

 

3Java环境安装

 全部的机器上都要安装JDK,如今就先在Master服务器安装,而后其余服务器按照步骤重复进行便可。安装JDK以及配置环境变量,须要以"root"的身份进行。

3.1 安装JDK

首先用root身份登陆"Master.Hadoop"后将jdk复制到"/usr/local/src"文件夹中,而后解压便可。查看"/usr/local/src"下面会发现多了一个名为"jdk-7u25-linux-i586"文件夹,说明咱们的JDK安装结束,进入下一个"配置环境变量"环节。

而后将jdk文件夹移动到”/usr/local/“目录下。

3.2 配置环境变量

1)编辑"/etc/profile"文件

 编辑"/etc/profile"文件,在后面添加Java的"JAVA_HOME"、"CLASSPATH"以及"PATH"内容以下:

# set java environment

export JAVA_HOME=/usr/local/jdk1.8.0_171/
export JRE_HOME=/usr/local/jdk1.8.0_171/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

2)使配置生效

保存并退出,执行下面命令使其配置当即生效。

source /etc/profile 或 . /etc/profile

 

3.3 验证安装成功

配置完毕并生效后,用下面命令判断是否成功。

java -version

从上图中得知,咱们肯定JDK已经安装成功

3.4 安装剩余机器

在其它服务器重复以上步骤

4Hadoop集群安装(本例中的版本为:3.0.1)

4.1 安装hadoop

 (1) 安装软件

 首先用root用户登陆"Master.Hadoop"机器,将下载的"hadoop-3.0.1.tar.gz"复制到/usr/local/src目录下。而后进入/usr/local/src目录下,用下面命令把文件解压,并将其重命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop

cd /usr/local/src
tar –zxvf hadoop-3.0.1.tar.gz
mv hadoop-3.0.1 ../hadoop
cd ..
chown –R hadoop:hadoop hadoop 

  (2) 建立tmp文件夹.

 最后在"/usr/local/hadoop"下面建立tmp文件夹.

  (3) 配置环境变量

并把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件,将如下语句添加到末尾,并使其生效(. /etc/profile):

# set hadoop path
export HADOOP_INSTALL=/usr/local/hadoop  
export PATH=${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin:${PATH}  
export HADOOP_MAPRED_HOME=${HADOOP_INSTALL}  
export HADOOP_COMMON_HOME=${HADOOP_INSTALL}  
export HADOOP_HDFS_HOME=${HADOOP_INSTALL}  
export YARN_HOME=${HADOOP_INSTALLL}  
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_INSTALL}/lib/natvie    
export HADOOP_OPTS="-Djava.library.path=${HADOOP_INSTALL}/lib:${HADOOP_INSTALL}/lib/native"

 (4)重启”/etc/profile”

source /etc/profile

 (5)配置salve服务器

首先在slave1.hadoop和slave2.hadoop的/usr/local中建立目录hadoop,而后将它的用户和组改成hadoop

[root@SVR-29-152 local]# mkdir hadoop
[root@SVR-29-152 local]# chown hadoop:hadoop hadoop

而后重复前面的(3)、(4)步骤

4.2 配置hadoop

咱们先在master.hadoop中进行配置,配置完成后再将hadoop复制到slave1和slave2中。

 (1)设置hadoop-env.sh和yarn-env.sh中的java环境变量

cd /usr/local/hadoop/etc/hadoop/
vi hadoop-env.sh

// 修改JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.8.0_171

(2)配置core-site.xml文件

vi core-site.xml

// 修改文件内容为如下
<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/usr/local/hadoop/tmp</value>
        <description>A base for other temporary directories.</description>
    </property>
    <property>
        <name>fs.default.name</name>
        <value>hdfs://master.hadoop:9000</value>
    </property>
</configuration>

 

备注:如没有配置hadoop.tmp.dir参数,此时系统默认的临时目录为:/tmp/hadoo-hadoop。而这个目录在每次重启后都会被删掉,必须从新执行format才行,不然会出错。

(3)配置hdfs-site.xml文件

vi hdfs-site.xml

// 修改文件内容为如下

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///usr/local/hadoop/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///usr/local/hadoop/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <property>
        <name>dfs.nameservices</name>
        <value>hadoop-cluster1</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master.hadoop:50090</value>
    </property>
    <property>
        <name>dfs.webhdfs.enabled</name>
        <value>true</value>
    </property>
</configuration>

 

 

4)配置mapred-site.xml文件

修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

 vi mapred-site.xml 

// 修改文件为如下内容
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
        <final>true</final>
    </property>

    <property>
        <name>mapreduce.jobtracker.http.address</name>
        <value>master.hadoop:50030</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>master.hadoop:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>master.hadoop:19888</value>
    </property>
    <property>
        <name>mapred.job.tracker</name>
        <value>http://master.hadoop:9001</value>
    </property>
</configuration>   

 5)配置yarn-site.xml文件

vi yarn-site.xml

// 修改文件内容为如下
<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master.hadoop</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address</name>
        <value>master.hadoop:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>master.hadoop:8030</value>
    </property>
    <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>master.hadoop:8031</value>
    </property>
    <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>master.hadoop:8033</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>master.hadoop:8088</value>
    </property>
</configuration>

 4.3 配置Hadoop的集群

(1) 将Master中配置好的hadoop传入两个Slave中

注意:使用hadoop帐号
scp -r /usr/local/hadoop  hadoop@slave1.hadoop:/usr/local/
scp -r /usr/local/hadoop  hadoop@slave2.hadoop:/usr/local/

 

(2) 修改Master主机上的workers文件

[hadoop@SVR-29-151 hadoop]$cd /usr/local/hadoop/etc/hadoop
[hadoop@SVR-29-151 hadoop]$ vi workers

// 将如下内容写入
slave1.hadoop
slave2.hadoop

 

(3) 格式化HDFS文件系统

// 在Master主机上输入如下指令(使用hadoop用户)

[hadoop@SVR-29-151 hadoop]$ hdfs namenode -format

 

 

(4)启动hadoop

[hadoop@SVR-29-151 hadoop]$ start-dfs.sh

  结果以下图:

[hadoop@SVR-29-151 hadoop]$ start-yarn.sh

 

(5) 验证hadoop启动是否成功

[hadoop@SVR-29-151 hadoop]$ jps

 master中的结果:

 

slave中的结果:

 web管理页面:http://172.18.29.151:8088/cluster

相关文章
相关标签/搜索