阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

CentOS 6.7安装Hadoop 2.7.2

231次阅读
没有评论

共计 10628 个字符,预计需要花费 27 分钟才能阅读完成。

用 VMware 虚拟机创建两个虚拟机,分别作为此次实验的 master 节点(主机)、slave 节点(从机)。

  • 先新建一个内存为 2G、硬盘占用为 30G、CetnOS 6.7 64 位的虚拟机(master),选择 NAT 网络模式(之前尝试过 Bridged、Host-Only 模式,感觉还是 NAT 模式方便快捷,这也是虚拟机默认的网络模式)。测试网络没问题后,克隆 master 机器,并将其命名为 slave。
主机名 IP 地址
master 192.168.229.130
slave 192.168.229.131

设置 hosts、hostname

master

[root@localhost ~]# vi /etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

内容修改为

127.0.0.1  localhost
192.168.229.130 master
192.168.229.131 slave

保存退出

[root@localhost ~]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=localhost.localdomain

内容修改为

NETWORKING=yes
HOSTNAME=master

保存退出

slave

[root@localhost ~]# vi /etc/hosts

127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1        localhost localhost.localdomain localhost6 localhost6.localdomain6

内容修改为

127.0.0.1  localhost
192.168.229.130 master
192.168.229.131 slave

保存退出

[root@localhost ~]# vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=localhost.localdomain

内容修改为

NETWORKING=yes
HOSTNAME=slave

保存退出

可用 hostname your-hostname 命令作临时修改,但它只是临时地修改主机名,系统重启后会恢复原样的。但修改上面的文件是永久的,重启系统会得到新的主机名。因此,修改后需要重启虚拟机。

关闭 selinux

master

[root@master ~]# vim /etc/selinux/config

修改

SELINUX=enforcing

SELINUX=disabled

保存退出,重启


关闭 firewall

CentOS 上默认是设有 iptables 规则的

master

[root@master ~]# iptables -F; /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[OK  ]

重启系统后,通过 iptables -nvL 命令可查看规则已清除

slave

[root@slave ~]# iptables -F; /etc/init.d/iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[OK  ]

-nvL 就是查看规则。-F 是把当前规则清除,但这个只是临时的,重启系统或者重启 iptalbes 服务后还会加载已经保存的规则,所以需要使用 /etc/init.d/iptables save 保存一下规则,通过上边的命令输出我们也可以看到,防火墙规则保存在了/etc/sysconfig/iptables

免密钥登录配置

master

[root@master ~]# ssh-keygen

一直回车

  • 运行结束后,/root/.ssh目录下,会新生成两个文件:id_rsaid_rsa.pub。前者是私钥,后者是公钥。
[root@master ~]# cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@master ~]# scp ~/.ssh/authorized_keys slave:~/.ssh/

slave

[root@slave ~]# ls .ssh/
authorized_keys

master

[root@master ~]# ssh slave
[root@slave ~]# exit
[root@master ~]#
  • 测试从 master 免密钥登录到 slave,第一次会需要输入 yes 继续连接

安装 JDK

检查是否已安装正确版本的 JDK

# Java -version

如果没有安装正确版本的 JDK,先卸载自带的 JDK,再安装

master

  • 下载前,需要在官网点击接受许可证,之后获取链接
[root@master ~]# wget http://download.Oracle.com/otn-pub/java/jdk/7u79-b15/jdk-7u79-linux-x64.tar.gz?AuthParam=1480051498_4f2fdb0325a457f4c7d33a69355b3560

 

[root@master ~]# mv jdk-7u79-linux-x64.tar.gz\?AuthParam\=1480051498_4f2fdb0325a457f4c7d33a69355b3560  jdk-7u79-linux-x64.tar.gz
[root@master ~]# tar zxvf jdk-7u79-linux-x64.tar.gz
[root@master ~]# mv jdk1.7.0_79 /usr/local/

JDK 环境变量

[root@master ~]# vi /etc/profile.d/java.sh

添加

export JAVA_HOME=/usr/local/jdk1.7.0_79
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
[root@master ~]# source /etc/profile.d/java.sh
[root@master ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

[root@master ~]# scp jdk-7u79-linux-x64.tar.gz slave:/root/
[root@master ~]# scp /etc/profile.d/java.sh slave:/etc/profile.d/

slave

[root@slave ~]# tar zxvf jdk-7u79-linux-x64.tar.gz
[root@slave ~]# mv jdk1.7.0_79 /usr/local/

JDK 环境变量

[root@slave ~]# source /etc/profile.d/java.sh
[root@slave ~]# java -version
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)

安装 Hadoop

master

[root@master ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
[root@master ~]# tar zxvf hadoop-2.7.2.tar.gz
[root@master ~]# mv hadoop-2.7.2 /usr/local/
[root@master ~]# ls /usr/local/
bin  games         include      lib    libexec  share  etc  hadoop-2.7.2  jdk1.7.0_79  lib64  sbin     src
[root@master ~]# ls /usr/local/hadoop-2.7.2/
bin  include  libexec      NOTICE.txt  sbin  etc  lib      LICENSE.txt  README.txt  share
[root@master ~]# mkdir /usr/local/hadoop-2.7.2/tmp /usr/local/hadoop-2.7.2/dfs /usr/local/hadoop-2.7.2/dfs/data /usr/local/hadoop-2.7.2/dfs/name
  • 目录/usr/local/hadoop-2.7.2/tmp,用来存储临时生成的文件
  • 目录/usr/local/hadoop-2.7.2/dfs,用来存储集群数据
  • 目录/usr/local/hadoop-2.7.2/dfs/data,用来存储真正的数据
  • 目录/usr/local/hadoop-2.7.2/dfs/name,用来存储文件系统元数据
[root@master ~]# ls /usr/local/hadoop-2.7.2/
bin  etc      lib      LICENSE.txt  README.txt  share  dfs  include  libexec  NOTICE.txt   sbin        tmp
[root@master ~]# rsync -av /usr/local/hadoop-2.7.2 slave:/usr/local

slave

[root@slave ~]# ls /usr/local/hadoop-2.7.2
bin  etc      lib      LICENSE.txt  README.txt  share  dfs  include  libexec  NOTICE.txt   sbin        tmp

配置 Hadoop

master

[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/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-2.7.2/tmp</value>
    </property>
    <property>
        <name>io.file.buffer.size</name>
        <value>131072</value>
    </property>
</configuration>

保存退出

  • 变量 fs.defaultFS 保存了 NameNode 的位置,HDFS 和 MapReduce 组件都需要它。这就是它出现在 core-site.xml 文件中而不是 hdfs-site.xml 文件中的原因。

[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/hdfs-site.xml

添加

<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:/usr/local/hadoop-2.7.2/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:/usr/local/hadoop-2.7.2/dfs/data</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>master:9001</value>
    </property>
    <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    </property>
</configuration>

保存退出

  • 注意:变量 dfs.replication 指定了每个 HDFS 数据块的复制次数,即 HDFS 存储文件的副本个数,默认为 3,如果不修改,DataNode 少于 3 台就会报错。我的实验环境只有一台主机和一台从机(DataNode),所以值为 1。

[root@master ~]# mv /usr/local/hadoop-2.7.2/etc/hadoop/mapred-site.xml.template /usr/local/hadoop-2.7.2/etc/hadoop/mapred-site.xml
[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/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>

保存退出


[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/yarn-site.xml

添加

<configuration>

<!-- Site specific YARN configuration properties -->
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.auxservices.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:8031</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>

保存退出


[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/hadoop-env.sh

修改

export JAVA_HOME=${JAVA_HOME}

export JAVA_HOME=/usr/local/jdk1.7.0_79

保存退出


[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/yarn-env.sh

修改

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/

export JAVA_HOME=/usr/local/jdk1.7.0_79

保存退出


[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/mapred-env.sh

修改

# export JAVA_HOME=/home/y/libexec/jdk1.6.0/

export JAVA_HOME=/usr/local/jdk1.7.0_79

保存退出


[root@master ~]# vi /usr/local/hadoop-2.7.2/etc/hadoop/slaves

里面的内容

localhost

修改为

slave
  • 这个文件保存所有 slave 节点

[root@master ~]# rsync -av /usr/local/hadoop-2.7.2/etc/ slave:/usr/local/hadoop-2.7.2/etc/

Hadoop 环境变量

[root@master ~]# vi /etc/profile.d/hadoop.sh

添加

export HADOOP_HOME=/usr/local/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

保存退出

[root@master ~]# source /etc/profile.d/hadoop.sh
[root@master ~]# hadoop version
Hadoop 2.7.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41
Compiled by jenkins on 2016-01-26T00:08Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /usr/local/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar

[root@master ~]# scp /etc/profile.d/hadoop.sh slave:/etc/profile.d/

slave

hadoop 环境变量

[root@slave ~]# source /etc/profile.d/hadoop.sh
[root@slave ~]# hadoop version
Hadoop 2.7.2
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r b165c4fe8a74265c792ce23f546c64604acf0e41
Compiled by jenkins on 2016-01-26T00:08Z
Compiled with protoc 2.5.0
From source with checksum d0fda26633fa762bff87ec759ebe689c
This command was run using /usr/local/hadoop-2.7.2/share/hadoop/common/hadoop-common-2.7.2.jar

运行 Hadoop

master

[root@master ~]# /usr/local/hadoop-2.7.2/bin/hdfs namenode -format
[root@master ~]# echo $?
0
  • 在执行格式化 -format 命令时,要避免 NameNode 的 namespace ID 与 DataNode 的 namespace ID 的不一致。这是因为每格式化一次就会产生 Name、Data、temp 等临时文件记录信息,多次格式化会产生很多的 Name、Data、temp,这样容易导致 ID 的不同,使 Hadoop 不能正常运行。每次执行格式化 -format 命令时,就需要将 DataNode 和 NameNode 上原来的 data、temp 文件删除。
  • 建议只执行一次格式化。格式化 NameNode 的命令可以执行多次,但是这样会使所有的现有文件系统数据受损。只有在 Hadoop 集群关闭和你想进行格式化的情况下,才能执行格式化。但是在其他大多数情况下,格式化操作会快速、不可恢复地删除 HDFS 上的所有数据。它在大型集群上的执行时间更长。

[root@master ~]# /usr/local/hadoop-2.7.2/sbin/start-all.sh
[root@master ~]# jps
5560 ResourceManager
5239 NameNode
5631 Jps
5415 SecondaryNameNode

slave

[root@slave ~]# jps
5231 DataNode
5444 Jps
5320 NodeManager

master

Web UI 查看集群是否成功启动:

  • 在浏览器地址栏中输入 master:50070,检查 namenode 和 datanode 是否正常。
  • 在浏览器地址栏中输入 master:8088,检查 Yarn 是否正常。

运行 PI 实例检查集群是否成功

[root@master ~]# cd /usr/local/hadoop-2.7.2/
[root@master hadoop-2.7.2]# bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar pi 10 10

最后输出运算的结果。

如果以上步骤都没有问题,说明集群正常启动。


停止服务(关机前,要停止 Hadoop 集群)

[root@master ~]# /usr/local/hadoop-2.7.2/sbin/stop-all.sh

Active Nodes 显示为 0

解决方案:

每台机器上(master、slave)的 /etc/hosts 文件都修改为:

127.0.0.1   localhost 
192.168.229.130 master
192.168.229.131 slave

之前文件里有其他内容,删除之后,先停止服务再启动,Active Nodes 显示为 1。

copyFromLocal: Cannot create directory /123/. Name node is in safe mode

如果提示 copyFromLocal: Cannot create directory /123/. Name node is in safe mode.,这是因为开启了安全模式

解决方法:

[root@master ~]# /usr/local/hadoop-2.7.2/bin/hdfs dfsadmin -safemode leave

  • 安全模式(safe mode)

作为一种附加的保护措施,NameNode 进程会将 HDFS 文件系统保持在只读模式下,直到它确认 DataNode 上报的数据块数量达到了副本阈值。通常情况下,只需所有 DatNode 上报其数据块状态即可。但是,如果某些 DataNode 发生故障,NameNode 需要安排重新复制部分数据块,然后集群才会达到离开安全模式的条件。

Hadoop2.3-HA 高可用集群环境搭建  http://www.linuxidc.com/Linux/2017-03/142155.htm

Hadoop 项目之基于 CentOS7 的 Cloudera 5.10.1(CDH)的安装部署  http://www.linuxidc.com/Linux/2017-04/143095.htm

Hadoop2.7.2 集群搭建详解(高可用)http://www.linuxidc.com/Linux/2017-03/142052.htm

使用 Ambari 来部署 Hadoop 集群(搭建内网 HDP 源)http://www.linuxidc.com/Linux/2017-03/142136.htm

Ubuntu 14.04 下 Hadoop 集群安装  http://www.linuxidc.com/Linux/2017-02/140783.htm

Ubuntu 16.04 上构建分布式 Hadoop-2.7.3 集群  http://www.linuxidc.com/Linux/2017-07/145503.htm

CentOS 7 下 Hadoop 2.6.4 分布式集群环境搭建  http://www.linuxidc.com/Linux/2017-06/144932.htm

Hadoop2.7.3+Spark2.1.0 完全分布式集群搭建过程  http://www.linuxidc.com/Linux/2017-06/144926.htm

更多 Hadoop 相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146232.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计10628字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中