Hadoop完全分布式环境搭建

最近在学习hadoop,经过几番折腾终于把分布式环境搭建成功,这里总结一下搭建过程和过程中遇到的问题与解决方案。
一、准备工作
1.下载vmvare软件,配置NAT网络模式
NAT是网络地址转换,是在宿主机和虚拟机之间增加一个地址转换服务,负责外部和虚拟机之间的通讯转接和IP转换。
这里写图片描述
2.安装centos虚拟机
安装步骤这里不细讲,可以参考https://blog.csdn.net/wu_zeqin/article/details/79833046
安装完后克隆虚拟机,产生三台虚拟机共集群使用
这里写图片描述
三台虚拟机的ip:

192.168.10.106 
192.168.10.129 
192.168.10.130

3.配置虚拟机
修改hostname:
vim /etc/sysconfig/network
按i修改成以下内容

NETWORKING=yes
HOSTNAME=hadoop001

按wq保存修改,需要重启才能生效。
修改host:

vi /etc/hosts

添加以下内容

127.0.0.1       localhost
192.168.10.106  hadoop001
192.168.10.129  hadoop002
192.168.10.130  hadoop003

需要把以上hosts配置到windows的hosts文件中,不然在windows开发时连接不上hdfs

关闭防火墙和selinux(不关闭会造成我们的集群运行不成功)

切换到root用户查看防火墙的状态
service iptables status

关闭防火墙

chkconfig iptables off

关闭selinux

vim /etc/sysconfig/selinux

这里写图片描述
另外两台虚拟机也需要执行上述操作,执行完了建议全部重启一下,让配置文件生效(当然配置文件可以source一下,但是hostname修改必须需要重启)
4.配置共享文件夹
这里写图片描述
配置成功后我们可以把文件放在指定的文件夹,那么在虚拟机可以去如下目录寻找文件,实现本地windows与虚拟机文件夹共享

这里写图片描述
5.ssh设置:
集群之间的机器需要相互通信,我们需要先配置免密码登录。

ssh-keygen -t rsa  #enter键一直敲到底

拷贝生成的公钥到另外两台虚拟机

# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop002
# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop003

另外两台虚拟机(hadoop002,hadoop003)也需要执行上述步骤
测试配置是否成功

[root@hadoop001 hadoop2.6]# ssh hadoop002
Last login: Sat May 26 05:37:00 2018 from hadoop002
[root@hadoop002 ~]# 

6.集群方案
主机名 Ip NameNode DataNode ResourceManager NodeManager SecondaryNameNode
hadoop001 192.168.10.6 √ √ √
hadoop002 192.168.10.129 √ √
hadoop003 192.168.10.130 √ √
二、开始搭建环境
这里写图片描述
1.安装JDK
去共享文件夹拷贝已经下载好的jdk包

cp /mnt/hgfs/centosshare/jdk-8u172-linux-x64.tar.gz /opt/

然后解压jdk安装包

tar -zxvf /opt/jdk-8u172-linux-x64.tar.gz

重命名

mv jdk-8u172-linux-x64 jdk1.8

配置环境变量

vim /etc/profile
#添加如下内容
export JAVA_HOME=/opt/jdk1.8
export JRE_HOME=/opt/jdk1.8/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export PATH=.:${JAVA_HOME}/bin:$PATH

使用source命令生效

source /etc/profile

查看Java环境变量配置是否成功

java -version
java version "1.8.0_172"
Java(TM) SE Runtime Environment (build 1.8.0_172-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.172-b11, mixed mode)

到此jdk已经安装成功
其他两台虚拟机可以按照上述方式安装,也可以使用快捷方式,通过以下命令同步这两台虚拟机

 rsync -av /opt/jdk1.8 hadoop002:/opt/jdk1.8
 rsync -av /opt/jdk1.8 hadoop003:/opt/jdk1.8
 rsync -av /etc/profile hadoop002:/etc/profile
 rsync -av /etc/profile hadoop003:/etc/profile

然后分别在另外两台虚拟机上执行source命令,使配置文件生效
2.hadoop安装

去共享文件夹拷贝已经下载好的jdk包

cp  /mnt/hgfs/centosshare/hadoop-2.6.5.tar.gz  /opt/

然后解压jdk安装包

tar -zxvf /opt/hadoop-2.6.5.tar.gz

重命名

mv hadoop-2.6.5 hadoop2.6

配置环境变量

vim /etc/profile
#添加如下内容
export HADOOP_HOME=/opt/hadoop2.6
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"
export PATH=.:${JAVA_HOME}/bin:${HADOOP_HOME}/bin:$PATH

使用source命令生效

[root@hadoop001 ~]# hadoop version
Hadoop 2.6.5
Subversion https://github.com/apache/hadoop.git -r e8c9fe0b4c252caf2ebf1464220599650f119997
Compiled by sjlee on 2016-10-02T23:43Z
Compiled with protoc 2.5.0
From source with checksum f05c9fa095a395faa9db9f7ba5d754
This command was run using /opt/hadoop2.6/share/hadoop/common/hadoop-common-2.6.5.jar

进入hadoop文件夹查看目录:

oot@hadoop001 ~]# cd /opt/hadoop2.6/
[root@hadoop001 hadoop2.6]# ls
bin  include  libexec      logs        README.txt  share
etc  lib      LICENSE.txt  NOTICE.txt  sbin
  • etc目录存放配置文件
  • sbin目录下存放服务的启动命令
  • share目录下存放jar包与文档
    配置mapred-env.sh
#添加
export JAVA_HOME=/opt/jdk1.8

配置yarn-env.sh

export JAVA_HOME=/opt/jdk1.8

配置core-site.xml

vi etc/hadoop/core-site.xml 
<configuration>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
   </property>
   <property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop001:9000</value>
   </property>
</configuration>

配置hdfs-site.xml

 vi etc/hadoop/hdfs-site.xml
<configuration>
       <property>
                <name>dfs.namenode.secondary.http-address</name>
               <value>hadoop001:9001</value>
       </property>
     <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/opt/hadoop/dfs/name</value>
       </property>
      <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/opt/hadoop/dfs/data</value>
       </property>
       <property>
               <name>dfs.replication</name>
               <value>3</value>
        </property>
        <property>
                 <name>dfs.webhdfs.enabled</name>
                  <value>true</value>
         </property>

</configuration>

配置yarn-site.xml

vi 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.resourcemanager.hostname</name>
        <value>hadoop001</value>
    </property>
<property>
         <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
         <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

配置mapred-site.xml,如果没有就拷贝mapred-site.xml.template然后重命名为mapred-site.xml

cp 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>  

配置从节点的主机名,前面配置host的时候已经ip和hostname做了映射就可以使用hostname,如果没有就需要写对应的ip

vi etc/hadoop/slaves
hadoop002
hadoop003

同理我们也可以通过命令去同步另外两台虚拟机,减少安装hadoop时间

rsync -av /opt/hadoop2.6/ hadoop002:/opt/
rsync -av /opt/hadoop2.6/ hadoop003:/opt/
rsync -av /etc/profile hadoop002:/etc/profile
rsync -av /etc/profile hadoop003:/etc/profile

然后分别在两台虚拟机上执行source命令

分别在三台虚拟机创建以下目录文件(前面的配置文件中使用)

[root@hadoop001 ~]# mkdir -p /opt/hadoop/dfs/name
[root@hadoop001 ~]# mkdir -p /opt/hadoop/dfs/data
[root@hadoop001 ~]# mkdir -p /opt/hadoop/tmp  
[root@hadoop001 ~]# mkdir -p /opt/hadoop/var
rsync -av /opt/hadoop hadoop002:/opt/hadoop
rsync -av /opt/hadoop hadoop003:/opt/hadoop

在三台虚拟机上分别对目录更改权限

chmod 777 /opt/hadoop/dfs/name
chmod 777 /opt/hadoop/dfs/data
chmod 777 /opt/hadoop/var
chmod 777 /opt/hadoop/tmp

启动hdfs,首次启动需格式化hdfs,后面可以选择性格式化

[root@hadoop000 ~]# hdfs namenode -format

格式化完毕后可以使用以下命令开启集群(我们可以单独启动hdfs,yarn等,命令在sbin目录下)
[root@hadoop000 ~]# start-all.sh
启动完后,执行jps查看执行情况
主节点(hadoop001):

[root@hadoop001 ~]# jps
9814 Jps
4374 SecondaryNameNode
3176 NameNode
3545 ResourceManager
3645 NodeManager

从节点(hadoop002):

[root@hadoop002 var]# jps
2933 NodeManager
5062 DataNode
7784 Jps

从节点(hadoop003):

[root@hadoop003 dfs]# jps
5020 DataNode
7629 Jps
2926 NodeManager

到此集群已成功,接着继续看一下控制台的一些情况
输入http://192.168.10.106:50070,查看hdfs运行情况:
这里写图片描述
点击datanodes
这里写图片描述
输入http://192.168.10.106:8088查看YARN运行情况
这里写图片描述
点击activenode查看存活节点
这里写图片描述

运行自带的案例hadoop-mapreduce-examples查看yarn的工作情况

hadoop jar ./hadoop-mapreduce-examples-2.6.5.jar pi 3 4
.Number of Maps  = 3
Samples per Map = 4
18/05/26 04:24:47 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Starting Job
18/05/26 04:24:49 INFO client.RMProxy: Connecting to ResourceManager at hadoop001/192.168.10.106:8032
18/05/26 04:24:50 INFO input.FileInputFormat: Total input paths to process : 3
18/05/26 04:24:50 INFO mapreduce.JobSubmitter: number of splits:3
18/05/26 04:24:51 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1527328936632_0001
18/05/26 04:24:51 INFO impl.YarnClientImpl: Submitted application application_1527328936632_0001
18/05/26 04:24:51 INFO mapreduce.Job: The url to track the job: http://hadoop001:8088/proxy/application_1527328936632_0001/
18/05/26 04:24:51 INFO mapreduce.Job: Running job: job_1527328936632_0001
18/05/26 04:25:00 INFO mapreduce.Job: Job job_1527328936632_0001 running in uber mode : false
18/05/26 04:25:00 INFO mapreduce.Job:  map 0% reduce 0%
18/05/26 04:25:18 INFO mapreduce.Job:  map 100% reduce 0%
18/05/26 04:25:25 INFO mapreduce.Job:  map 100% reduce 100%
18/05/26 04:25:25 INFO mapreduce.Job: Job job_1527328936632_0001 completed successfully
18/05/26 04:25:25 INFO mapreduce.Job: Counters: 49
	File System Counters
		FILE: Number of bytes read=72
		FILE: Number of bytes written=431285
		FILE: Number of read operations=0
		FILE: Number of large read operations=0
		FILE: Number of write operations=0
		HDFS: Number of bytes read=792
		HDFS: Number of bytes written=215
		HDFS: Number of read operations=15
		HDFS: Number of large read operations=0
		HDFS: Number of write operations=3
	Job Counters 
		Launched map tasks=3
		Launched reduce tasks=1
		Data-local map tasks=3
		Total time spent by all maps in occupied slots (ms)=44824
		Total time spent by all reduces in occupied slots (ms)=4294
		Total time spent by all map tasks (ms)=44824
		Total time spent by all reduce tasks (ms)=4294
		Total vcore-milliseconds taken by all map tasks=44824
		Total vcore-milliseconds taken by all reduce tasks=4294
		Total megabyte-milliseconds taken by all map tasks=45899776
		Total megabyte-milliseconds taken by all reduce tasks=4397056
	Map-Reduce Framework
		Map input records=3
		Map output records=6
		Map output bytes=54
		Map output materialized bytes=84
		Input split bytes=438
		Combine input records=0
		Combine output records=0
		Reduce input groups=2
		Reduce shuffle bytes=84
		Reduce input records=6
		Reduce output records=0
		Spilled Records=12
		Shuffled Maps =3
		Failed Shuffles=0
		Merged Map outputs=3
		GC time elapsed (ms)=646
		CPU time spent (ms)=2570
		Physical memory (bytes) snapshot=638435328
		Virtual memory (bytes) snapshot=8227479552
		Total committed heap usage (bytes)=385794048
	Shuffle Errors
		BAD_ID=0
		CONNECTION=0
		IO_ERROR=0
		WRONG_LENGTH=0
		WRONG_MAP=0
		WRONG_REDUCE=0
	File Input Format Counters 
		Bytes Read=354
	File Output Format Counters 
		Bytes Written=97
Job Finished in 35.612 seconds
Estimated value of Pi is 3.66666666666666666667

这里写图片描述

三、遇到的问题和解决方案
第一次按照上述配置步骤,配置完启动后发现hadoop002与hadoop003中datanode没有启动,没有启动的原因是我在集群中多次执行了hdfs namenode -format操作,解决办法就是把我们创建的dfs中的data目录删除重新创建再重启就ok了

rm -rf /opt/hadoop/dfs/data
mkdir /opt/hadoop/dfs/data
chmod 777 /opt/hadoop/dfs/data
start-all.sh
  • 28
    点赞
  • 201
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值