Hadoop集群配置

                                          Hadoop集群搭建                                              

搭建Hadoop集群是进行大数据技术基础学习的第一步,因此,把本身搭建Hadoop集群的过程记录下来。java

使用CentOS 7  64位,Hadoop2.7.7node

使用的系统是Linux的CentOS7的系统版本,是在阿里镜像站(连接:https://opsx.alibaba.com/mirror)下载的。须要注意的是,用阿里的镜像,在安装好虚拟机系统后,要在root用户里执行如下三步操做。web

一、mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup


二、wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
或者

curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo



三、运行yum makecache生成缓存

能够在阿里镜像站, 点击centos那栏右边的帮助来获取这三步操做。shell

具体的虚拟机安装,在这里就不介绍了。apache

建立Hadoop用户,通常在第一次启动虚拟机的时候,就建立了Hadoop用户了。vim

登录Hadoop用户后,经过su - 命令切换到root用户中。centos

执行   visudo缓存

找到 root ALL=(ALL) ALL 这行,而后在这行下面增长一行内容:hadoop ALL=(ALL) ALL (当中的间隔为tab),以下图所示:bash

 保存并退出,vi的插入保存退出,就不用说了吧?!网络

切换到Hadoop用户中去,接下来要配置ssh的免密了。

首先检验系统上有没有ssh,执行 

rpm -qa | grep ssh

若是已经安装好ssh了,会有如下出现

 

若没有以上的信息出现,则须要安装ssh服务,执行如下两行代码(若是已经安装过ssh服务的能够跳过这一步)

sudo yum install openssh-clients
sudo yum install openssh-server

 接着登录ssh查看是否安装成功。

ssh localhost

 此时会有以下提示(SSH首次登录提示),输入 yes 。而后按提示输入密码 hadoop,这样就登录到本机了。

测试SSH是否可用

接着执行

exit                           # 退出刚才的 ssh localhost
cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa              # 会有提示,都按回车就能够
cat id_rsa.pub >> authorized_keys  # 加入受权
chmod 600 ./authorized_keys    # 修改文件权限

 这样ssh的免密登录就设置成功了。能够重复试一次ssh localhost,记得exit退出。

接下来,安装Java环境jdk。

sudo yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel

 接着须要配置一下 JAVA_HOME 环境变量,为方便,咱们在 ~/.bashrc 中进行设置

vim ~/.bashrc

 在文件最后面添加以下单独一行(指向 JDK 的安装位置),并保存:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk

 接着还须要让该环境变量生效,执行以下代码:

source ~/.bashrc

设置好后咱们来检验一下是否设置正确:

echo $JAVA_HOME     # 检验变量值
java -version
$JAVA_HOME/bin/java -version  # 与直接执行 java -version 同样

 

 好了,接下来安装Hadoop。我选用的是Hadoop2.7.7是一个比较稳定的版本。

首先经过Xshell把hadoop-2.7.7.tar.gz,压缩包传到虚拟机里。经过Xshell链接虚拟机后,直接输入rz,选择文件,就能够完成上传了。链接的是Hadoop用户的话,文件直接被传送到/home/hadoop/目录下了。ls显示目录列表。

解压压缩包。执行

sudo tar -zxf ~/hadoop-2.7.7.tar.gz -C /usr/local    # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop            # 将文件夹名改成hadoop
sudo chown -R hadoop:hadoop ./hadoop        # 修改文件权限

 Hadoop 解压后便可使用。输入以下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

cd /usr/local/hadoop
./bin/hadoop version

 

明天再写关于集群配置的具体操做步骤吧!安装Hadoop集群的时候参考的是厦门大学大数据实验室的信息(连接:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/)。 

 

设置IP映射

配置好一台的Hadoop后,在虚拟机选择克隆,将虚拟机克隆两份。要配置一个具备两个节点的Hadoop集群。

克隆完成后,首先我们改变三台的主机名,便于辨识。执行

sudo vim /etc/hostname

 

把原来的主机名删除,第一台改名为Master,第2、三台命名为Slave一、Slave2。重启后,就能够看到更改的主机名了。

接下来,咱们设置三台机子的IP映射。在每一台执行

ifconfig                           #查看此虚拟机的ip

 

查看IP,或者在虚拟机桌面的右上角,点击 应用程序——系统工具——设置——网络设置 ,点击“优先链接”右下边那个齿轮状的图标,也能够查看IP。

 

而后执行

sudo vim /etc/hosts

 

在最下边,输入三台的IP还有主机名,IP与主机名之间的Tab键。在Slave一、2上边也要执行。

 配置好后须要在各个节点上执行以下命令,测试是否相互 ping 得通,若是 ping 不通,后面就没法顺利配置成功:

ping Master -c 3   # 只ping 3次,不然要按 Ctrl+c 中断
ping Slave1 -c 3
ping Slave2 -c 3

例如,我链接Master,若是能成功,就是下边的样子

 

继续下一步配置前,请先完成全部节点的网络配置,修改过主机名的话需重启才能生效

 SSH无密码登录节点

 这个操做是要让 Master 节点能够无密码 SSH 登录到各个 Slave 节点上。首先生成 Master 节点的公匙,在 Master 节点的终端中执行(由于改过主机名,因此还须要删掉原有的再从新生成一次):

cd ~/.ssh               # 若是没有该目录,先执行一次ssh localhost
rm ./id_rsa*            # 删除以前生成的公匙(若是有)
ssh-keygen -t rsa       # 一直按回车就能够

让 Master 节点需能无密码 SSH 本机,在 Master 节点上执行:

cat ./id_rsa.pub >> ./authorized_keys

完成后可执行 ssh Master 验证一下(可能须要输入 yes,成功后执行 exit 返回原来的终端)。接着在 Master 节点将上公匙传输到 Slave1 节点(有多的节点,也须要上传的别的节点上):

scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop/

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,相似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入 Slave1 上 hadoop 用户的密码(hadoop),输入完成后会提示传输完毕,出现100%。

 

 接着在 Slave1 节点上,将 ssh 公匙加入受权:

mkdir ~/.ssh       # 若是不存在该文件夹需先建立,若已存在则忽略
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
rm ~/id_rsa.pub    # 用完就能够删掉了

在Slave2节点上,也进行相同的操做。

这样,在 Master 节点上就能够无密码 SSH 到各个 Slave 节点了,可在 Master 节点上执行以下命令进行检验,以下图所示: 

 

配置PATH变量 

将 Hadoop 安装目录加入 PATH 变量中,这样就能够在任意目录中直接使用 hadoo、hdfs 等命令了,须要在 Master 节点上进行配置。首先执行

vim ~/.bashrc

加入一行: 

export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin

以下图所示:

 

 保存后执行 source ~/.bashrc 使配置生效。在后边的相关程序的安装过程当中,要屡次配置环境变量,因此能记住vim ~/.bashrc和source ~/.bashrc仍是比较方便的。

配置集群/分布式环境

集群/分布式模式须要修改 /usr/local/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xmlhdfs-site.xmlmapred-site.xmlyarn-site.xml 。

1, 文件 slaves,将做为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,因此在伪分布式配置时,节点即做为 NameNode 也做为 DataNode。分布式配置能够保留 localhost,也能够删掉,让 Master 节点仅做为 NameNode 使用。

本教程让 Master 节点仅做为 NameNode 使用,所以将文件中原来的 localhost 删除,只添加两行内容:Slave一、Slaver2。

2, 文件 core-site.xml 改成下面的配置:

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://Master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>file:/usr/local/hadoop/tmp</value>
                <description>Abase for other temporary directories.</description>
        </property>
</configuration>

3, 文件 hdfs-site.xml,dfs.replication 通常设为 3,但咱们有两个 Slave 节点,因此 dfs.replication 的值仍是设为 2:

<configuration>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>Master:50090</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>file:/usr/local/hadoop/tmp/dfs/data</value>
        </property>
</configuration>

4, 文件 mapred-site.xml (可能须要先重命名,默认文件名为 mapred-site.xml.template),而后配置修改以下:

修改文件名执行

mv mapred-site.xml.template 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>

5, 文件 yarn-site.xml

<configuration>
        <property>
                <name>yarn.resourcemanager.hostname</name>
                <value>Master</value>
        </property>
        <property>
                <name>yarn.nodemanager.aux-services</name>
                <value>mapreduce_shuffle</value>
        </property>
</configuration>

配置好后,将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。由于以前有跑过伪分布式模式,建议在切换到集群模式前先删除以前的临时文件。在 Master 节点上执行:

cd /usr/local
sudo rm -r ./hadoop/tmp     # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/*   # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop   # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
scp ./hadoop.master.tar.gz Slave2:/home/hadoop

在 Slave1 、Slave2节点上分别执行下边的几条命令:

sudo rm -r /usr/local/hadoop    # 删掉旧的(若是存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop

首次启动须要先在 Master 节点执行 NameNode 的格式化:

hdfs namenode -format       # 首次运行须要执行初始化,以后不须要

关闭CentOS防火墙:

 CentOS系统默认开启了防火墙,在开启 Hadoop 集群以前,须要关闭集群中每一个节点的防火墙有防火墙会致使 ping 得通但 telnet 端口不通,从而致使 DataNode 启动了,但 Live datanodes 为 0 的状况。

由于,我们使用的是CentOS7系统,须要执行:

systemctl stop firewalld.service    # 关闭firewall
systemctl disable firewalld.service # 禁止firewall开机启动

这时会出现,须要认证的提示,须要输入用户的密码就好了。

 

接着能够启动 hadoop 了,启动须要在 Master 节点上进行:

start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver

或者执行

start-all.sh
mr-jobhistory-daemon.sh start historyserver

都是能够开启Hadoop集群的,须要注意的是,开启Hadoop集群的时候,全部的节点都要处于开机状态。

经过命令 jps 能够查看各个节点所启动的进程。正确的话,在 Master 节点上能够看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,以下图所示:

 

缺乏任一进程都表示出错。这里,会出现IP变动,致使Hadoop集群启动不成功的问题,这就须要查看IP与/etc/hosts 里的IP映射是否一致,若不一致,更改成一致就能够了。

也能够经过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://master:50070/。若是不成功,能够经过启动日志排查缘由。

 至此,Hadoop集群的搭建,就是所有完成了!

执行分布式实例

请参考厦门大学大数据实验室博客,连接:http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/,在这一页的后半部分,是关于“执行分布式实例”的演示,按照作,都能作出来。关于Hadoop集群的搭建,我第一次也是参考的这里(http://dblab.xmu.edu.cn/blog/install-hadoop-cluster/)。