hadoop的搭建虚拟机分布式

本文详细介绍了如何在虚拟机中搭建Hadoop分布式环境,包括克隆虚拟机、配置IP地址、主机名、SSH免密登录,以及Hadoop相关配置文件的修改和启动流程。遇到的常见错误及解决方案也在文中进行了说明。
摘要由CSDN通过智能技术生成

安装vmware,务必以管理员身份运行

操作系统(CentOS 6.5)的配置

准备工作:虚拟机安装三台linux  本次测试是 centos 6.5,(三台虚拟机的系统时间保持一致)

*安装jdk(在另外一个文档中)

*克隆虚拟机

*在vmware设置-克隆(虚拟机要关机,jdk要配置好)

*选择克隆当前状态的虚拟机

**克隆完之后关机,点击重新生成mac地址

克隆2台虚拟机完成后:新的2台虚拟机,请务必依次修改3台虚拟机的ip地址主机名称【建议三台主机名称依次叫做:masternode1node2

 

 

 

 

 

 

1修改ip地址:

其他克隆的虚拟机实际上只需要改address地址就可以,后面两项不变

 

 

*修改主机名命令: vi /etc/sysconfig/network   (三台都要修改)

 

 

上述修改完成后,请依次重启三台虚拟机:重启命令:reboot

 

重启完成后依次在虚拟机上执行下面命令:

1.设置ip(上述步骤)(三台都要操作

  使用命令 重启网卡:service network restart

2.关闭防火墙(三台都要操作),使用命令:service iptables stop

 

3.关闭防火墙的自动启动(三台都要操作),使用命令:chkconfig iptables off

 设置主机名与ip的映射,修改配置文件命令(三台都要操作):vi /etc/hosts 

将hosts文件拷贝到node1和node2节点

命令:

scp /etc/hosts node1:/etc/hosts

scp /etc/hosts node2:/etc/hosts

 

 

4.设置ssh免密码登录(只在Master 这台主机操作

  4.1主节点执行命令ssh-keygen -t rsa 产生密钥 一直回车

  执行命令

将密钥拷贝到其他两个子节点,命令如下:

ssh-copy-id -i node1

ssh-copy-id -i node2

实现免密码登录到子节点。

4.2 实现主节点master本地免密码登录

首先进入到/root 命令:cd  /root

再进入进入到 ./.ssh目录下

命令:cd ./.ssh/

 

然后将公钥写入本地执行命令:

cat ./id_rsa.pub >> ./authorized_keys

如图

 

--------------------------------------(以下操作都在master 这台主机操作)-------------------

 

6将hadoop的jar包先上传到虚拟机/usr/local/soft目录下,主节点。可以使用xshell拖拽

7,解压。tar -zxvf hadoop-2.6.0.tar.gz 解压完后会出现 hadoop-2.6.0的目录

  1. 修改master中hadoop的一个配置文件/usr/local/soft/etc/hadoop/slaves

 删除原来的所有内容,修改为如下

node1

node2

 

9,修改hadoop的几个组件的配置文件 进入/usr/local/soft/hadoop-2.6.0/etc/hadoop 目录下(请一定要注意配置文件内容的格式,可以直接复制过去黏贴。不要随意改)

* 修改hadoop-env.sh文件

加上一句

export JAVA_HOME=/usr/local/soft/jdk1.8.0_171

 

 

 

 

 

 

 

 

 

 

 

***修改 core-site.xml

将下面的配置参数加入进去修改成对应自己的

 

<configuration>

<!-- 这个属性用来指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口,也可以指定为一个namenode服务(这个服务内部可以有多台namenode实现ha的namenode服务) -->

        <property>

                <name>fs.defaultFS</name>

                <value>hdfs://master:9000</value>

        </property>

 

        <property>

<!-- 指定hadoop临时目录,前面用file:表示是本地目录。hadoop在运行过程中肯定会有临时文件或缓冲之类的,必然需要一个临时目录来存放,这里就是指定这个的。-->

                <name>hadoop.tmp.dir</name>

                <value>/usr/local/soft/hadoop-2.6.0/tmp</value>

        </property>

<!--fs.trash.interval是在指在这个回收周期之内,文件实际上是被移动到trash的这个目录下面,而不是马上把数据删除掉。-->

<!--等到回收周期真正到了以后,hdfs才会将数据真正删除。默认的单位是分钟,1440分钟=60*24,刚好是一天。-->
<!--fs.trash.checkpoint.interval则是指垃圾回收的检查间隔,应该是小于或者等于fs.trash.interval。-->

             <property>

                 <name>fs.trash.interval</name>

                 <value>1440</value>

        </property>

</configuration>

 

***

修改 hdfs-site.xml 将dfs.replication设置为1

<configuration>

<!-- hdfs的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数-->

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

 <!-- namenode数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/usr/local/hadoop-2.6.0/data/name</value>
        </property>
 
        <!-- datanode数据的存放地点。也就是block块存放的目录了-->
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/usr/local/hadoop-2.6.0/data/data</value>
        </property>
 

    <property>

<!--是否在HDFS中开启权限检查。-->

        <name>dfs.permissions</name>

        <value>false</value>

    </property>

</configuration>

 

**
文件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>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>

</configuration>

 

 

**修改 mapred-site.xml(将mapred-site.xml.template 复制一份为 mapred-site.xml

命令:cp mapred-site.xml.template mapred-site.xml)

 

<configuration>

   <property>

<!---- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->

                  <name>mapreduce.framework.name</name>

                  <value>yarn</value>

         </property>

         <property> 

<!---- 指定mr框架jobhistory的内部通讯地址。目前还不知道是做什么的 -->

                  <name>mapreduce.jobhistory.address</name> 

                  <value>master:10020</value> 

         </property> 

 

         <property> 

<!---- 指定mr框架web查看的地址 -->

                  <name>mapreduce.jobhistory.webapp.address</name> 

                  <value>master:19888</value> 

         </property>

</configuration>

 

12,将hadoop的安装目录分别拷贝到其他子节点

 scp -r /usr/local/soft/hadoop-2.6.0  node1:/usr/local/soft/

 scp -r /usr/local/soft/hadoop-2.6.0  node2:/usr/local/soft/

 

13 启动hadoop

首先看下hadoop-2.6.0目录下有没有tmp文件夹。

如果没有 执行一次格式化命令:

cd  /usr/local/soft/hadoop-2.6.0目录下

执行命令:

./bin/hdfs namenode -format

会生成tmp文件。

然后

/usr/local/soft/hadoop-2.6.0目录下

  启动执行:./sbin/start-all.sh

  启动完成后验证进程

主节点进程:namenode/ secondarnamenode/resourcemanager

子节点进程 datanode /nodenodemanager

 

 

验证hdfs:

可以登录浏览器地址:192.168.1.80:50070 (ip地址是master的地址)

看到下面页面证明 hdfs装好了

下图是我已经创建了一个hdfs上的目录,刚装好的hadoop应该是空的什么都没有

 

 

******* 如果第一次启动失败了,请重新检查配置文件或者哪里步骤少了。

再次重启的时候

需要手动将每个节点的tmp目录删除:

rm -rf /usr/local/soft/hadoop-2.6.0/tmp

然后执行将namenode格式化

在主节点执行命令:

./bin/hdfs namenode -format

 

常见错误及解决方案

1)防火墙没关闭、或者没有启动yarnx

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

2)主机名称配置错误

3)ip地址配置错误

4)ssh没有配置好

5)root用户和其他两个用户启动集群不统一

6)配置文件修改不细心

7)未编译源码

Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

8)datanode不被namenode识别问题

Namenode在format初始化的时候会形成两个标识,blockPoolId和clusterId。新的datanode加入时,会获取这两个标识作为自己工作目录中的标识。

一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然持有原来的id,就不会被namenode识别。

解决办法,删除datanode节点中的数据后,再次重新格式化namenode。

9)不识别主机名称

java.net.UnknownHostException: hadoop102: hadoop102

        at java.net.InetAddress.getLocalHost(InetAddress.java:1475)

        at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)

        at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)

        at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

解决办法:

(1)在/etc/hosts文件中添加192.168.1.102 hadoop102

       (2)主机名称不要起hadoop  hadoop000等特殊名称

10)datanode和namenode进程同时只能工作一个。

 

11)执行命令 不生效,粘贴word中命令时,遇到-和长–没区分开。导致命令失效

解决办法:尽量不要粘贴word中代码。

12)jps发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在linux的根目录下/tmp目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

13)jps不生效。

原因:全局变量hadoop   java没有生效,需要source /etc/profile文件。

14)8088端口连接不上

[root@hadoop102 桌面]$ cat /etc/hosts

注释掉如下代码

#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

#::1         hadoop102

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值