hadoop环境搭建笔记

浏览: 3235

MARSJ 老师的课程笔记( https://ask.hellobi.com/blog/marsj/4944 )  便于以后查看做了更详细的配置记录以及安装时遇到的问题解决方法

整理的所需要的软件包及镜像 http://pan.baidu.com/s/1mioGFNE

注:使用redhead搭建环境的 建议不要修改主机名 因为会出现奇葩问题

目录

一、安装准备

      1、下载jdk和hadoop包

      2、虚拟机单机环境

二、环境安装&配置

      1、修改linux主机名 

      2、安装jdk

      3、设置免密码登录 SSH

三、hadoop配置

      1、配置hadoop_home环境变量

      2、配置hadoop配置文件

            2.1 配置core-site.xml文件  

            2.2 配置hdfs-site.xml文件

            2.3 配置yarn-site.xml

            2.4 配置mapred-site.xml

            2.5 配置文件 mapred-site.xml

            2.6 配置slaves

            2.7 配置hadoop-env.sh 

      3、格式化分布式文件系统(HDFS)

      4、启动HADOOP集群

      5、验证HADOOP集群

      6、关闭防火墙


一、安装准备

1、下载jdk和hadoop包

     1. Jdk:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

     2. Hadoop包:http://apache.fayea.com/hadoop/common/hadoop-2.7.2/

2、虚拟机单机环境

      32位的linux [www.19cr.com][红帽企业Linux.6.5.服务器版].rhel-server-6.5-i386-dvd.iso

      32位的jdk    jdk-8u111-linux-i586.tar.gz

二、JDK\SSH安装&配置

1、修改linux主机名 

  • 修改这两个文件,修改后reboot命令,重新启动服务器 
vi /etc/sysconfig/network 
vi /etc/hosts  将第一行的localhost改为想要设置的主机名 第二行不要动 #需要去掉
  • 修改linux ip地址

    编辑文件 vi /etc/sysconfig/network-scripts/ifcfg-eth0

 截图2017815141255.png

 重启network服务 :service network restart

2、安装jdk

/*给jdk 文件赋权限,使其可以被当前用户操作 sudo chmod u+x 文件名*/

rpm包自动安装到系统目录/usr/java/,tar包解压后,需指定路径 安装路径在哪里都可以,只要在profile文件中写好即可。

  • 安装jdk
#tar -xzvf jdk-8u111-linux-i586.tar.gz --tar包
#rpm -ivh xxx.rpm --rpm包
  • jdk的安装目录
/usr/java/jdk1.8.0_111/
  • 编辑 profile文件
#vi /etc/profile 

  添加 JAVA_HOME=/usr/java/jdk1.8.0_111/

          PATH=$PATH:$JAVA_HOME/bin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/X11R6/bin

         CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

         export  JAVA_HOME  PATH  CLASSPATH

#source /etc/profile --使修改生效
#echo $JAVA_HOME --打印java路径 
分别执行 java/javac -version --检查jdk是否正确安装 两个显示的版本要一样的

Clipboard Image.png

3、设置免密码登录 SSH

在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。分布式环境中每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动

  • 安装SSH秘钥
#ssh-keygen -t rsa 

     Clipboard Image.png

  • 执行这个命令后 会自动生成一个 .SSH的目录 在这个目录下 就是我们公钥和私钥,id_rsa.pub 是公钥

   Clipboard Image.png

  • 验证
[root@wlh ~]# ssh wlh  --ssh后面跟的是 你要远程的服务器的主机名或地址

Clipboard Image.png

注:如SSH报错,不需要删除文件,修改后直接执行 ssh 主机名即可

三、hadoop配置

1、配置hadoop_home环境变量

  • 解压 tar zxf hadoop-2,7,2.tar.gz
  • 解压后执行 vi /etc/profile 

             添加 HADOOP_HOME=/opt/hadoop-2.7.2

                     PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

Clipboard Image.png

  • 执行 source /etc/profile 使修改生效

2、配置hadoop配置文件

       HADOOP 的配置文件存放在/opt/hadoop-2.7.2/etc/hadoop目录下,需要配置以下六个文件  

          core-site.xml

          hdfs-site.xml

          yarn-site.xml

          mapred-site.xml

          slaves

          hadoop-env.sh 

      /*--在 <configuration> </configuration> 键值对中间写*/

    2.1 配置core-site.xml文件  

  • 配置文件系统,hdfs的端口
<property>
<name>fs.default.name</name>
<value>hdfs://wlh:9000</value> --<value>hdfs://linux主机名:端口</value>
</property>
  • 配置一个目录
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-2.7.2/current/tmp</value> --要手动创建这个目录
</property>
  • 分布式文件系统的垃圾箱(trash)
<property>
<name>fs.trash.interval</name>
<value>4320</value>--4320这个数是按分钟算的,3分钟,3分钟会清理一次
</property>

    2.2 配置hdfs-site.xml文件

  • 配置分布式文件系统
  • 配置namenode位置
<property>
<name>dfs.namenode.dir</name>
<value>/opt/hadoop-2.7.2/current/name</value> --要手动创建这个目录
</property>
  • 配置datanode的信息

        /*这个实际上是要在datanode上配置的不用再namenode上配置,但现在配置的是伪分布式环境namenode和datanode在同一台机器上。*/

<property>
<name>dfs.datanode.dir</name>
<value>/opt/hadoop-2.7.2/current/data</value> --要手动创建这个目录
</property>
  • 配置副本的数量,每个块有几个副本,伪分布式只有一个节点 ,value是1
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
  • 配置hdfs是否启用web
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
  • 配置HDFS的用户组和权限
<property>
<name>dfs.permissions.superusergroup</name>
<value>staff</value> --staff是hdfsd的用户组
</property>
  • 不开启权限
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>

    2.3 配置yarn-site.xml

<property>
<name>yarn.resourcemanager.hostname</name>
<value>wlh</value>--运行resourcemanager的机器的主机名
</property>
<property>
<name>yarn.nodemanager.aux.services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux.services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
  • resourcemanager的端口
<property>
<name>yarn.resourcemanager.address</name>
<value>wlh:18040</value> --主机名+端口号 或者 IP地址+端口号
</property>
  • resourcemanager的调度器端口
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>wlh:18030</value> --所有的端口号都可以任意指定,但是不能重复
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>wlh:18025</value> --主机名+端口号 或者 IP地址+端口号
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>wlh:18141</value> --主机名+端口号 或者 IP地址+端口号
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>wlh:18888</value> --主机名+端口号 或者 IP地址+端口号
</property>
  • yarn中的日志是否启用
<property>
<name>yarn.log.aggregation.retain.seconds</name>
<value>86400</value>
</property>
<property>
<name>yarn.log.aggregation.retain.check.interval.seconds</name>
<value>86400</value>
</property>
  • nodemanager
<property>
<name>yarn.nodemanager.remote.app.log.dir</name>
<value>/tmp/logs</value>
</property>
<property>
<name>yarn.nodemanager.remote.app.log.dir.suffix</name>
<value>logs</value>
</property>

    2.4 配置mapred-site.xml

       目录中没有mapred-site.xml.文件 只有mapred-site.xml.template 所以复制mapred-site.xml.template 文件重命名

cp mapred-site.xml.template mapred-site.xml

    2.5 配置文件 mapred-site.xml

  • mapreduce基于哪个框架
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  • 通信的端口
<property>
<name>mapreduce.jobtracker.http.address</name>
<value>wlh:5030</value>
</property>
  • job history
<property>
<name>mapreduce.jobhistory.address</name>
<value>wlh:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>wlh:19888</value>
</property>
<property>
<name>mapreduce.jobhistory.done.dir</name>--已完成的日志目录
<value>/jobhistroy/done</value>
</property>
<property>
<name>mapreduce.intermediate.done.dir</name>--中间情况日志目录
<value>/jobhistroy/done_intermediate</value>
</property>
<property>
<name>mapreduce.job.ubertask.enable</name>--中间情况日志目录
<value>true</value>
</property>

    2.6 配置slaves

      datanode nodemanager在哪个机器上运行,在文件中写主机名即可

[root@wlh hadoop]# vi slaves 
wlh

    2.7 配置hadoop-env.sh 

     添加 JAVA_HOME=/usr/java/jdk1.8.0_111/

[root@wlh hadoop]# vi hadoop-env.sh

Clipboard Image.png

   2.8 新建以下文件夹

      mkdir -p /opt/hadoop-2.7.2/current/tmp

      mkdir /opt/hadoop-2.7.2/current/name

      mkdir /opt/hadoop-2.7.2/current/data

      mkdir /tmp/logs

      mkdir -p /jobhistroy/done_intermediate

      mkdir /jobhistroy/done

3、格式化分布式文件系统(HDFS)

[root@wlh hadoop]# hdfs namenode -format

执行这个命令后出现的语句中有这一行为成功2016-11-30 00:44:56,889 INFO common.Storage: Storage directory /opt/hadoop-2.7.2/current/tmp/dfs/name has been successfully formatted.

Clipboard Image.png

4、启动HADOOP集群

  • 在 /opt/hadoop-2.7.2/sbin目录下执行star-all.sh文件
[root@wlh sbin]# /opt/hadoop-2.7.2/sbin/start-all.sh


如果报错This script is deprecated. Use start-dfs.sh and start-yarn.sh instead.

分别启动即可

[root@wlh sbin]# /opt/hadoop-2.7.2/sbin/start-dfs.sh
[root@wlh sbin]# /opt/hadoop-2.7.2/sbin/start-yarn.sh

5、验证HADOOP集群

  • 第一种方式执行jps ,显示当前系统中java的进程
[root@wlh sbin]# jps
11602 ResourceManager
11141 NameNode
11861 NodeManager
12038 Jps
11227 DataNode
11406 SecondaryNameNode
  • 第二种方式通过端口来查看
[root@wlh ~]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:F8:B0:41  
          inet addr:192.168.128.129  Bcast:192.168.128.255  Mask:255.255.255.0

端口 50070 查看HDFS的运行情况 --192.168.128.129:50070

端口 18088 查看YARN的运行情况 --192.168.128.129:18088

6、关闭防火墙

[root@wlh ~]# service iptables stop
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]

50070端口访问失败 ,已关闭防火墙。(18088端口可以访问)

解决:

    检查50070端口是否启动,启动端口

[root@wlh ~]# netstat  -anp | grep 50070

yarn默认占用的内存就是8G无论你的虚拟机设备是否有这些内存,所以需要在yarn-site中做配置,把这个内存设置成你机器适配的大小

active node 存活的节点


遇到的问题:

1、50070端口访问失败 ,已关闭防火墙。18088端口可以访问

  •  i.查看日志

       $HADOOP_HOME/logs/下面的与NameNode相关的日志,查看日志后没有发现ERROR信息;

  • ii.检查50070端口是否启动
[root@wlh ~]#netstat  -anp | grep 50070
[root@wlh ~]#sh start-dfs.sh

2、datanode没有启动

[root@wlh sbin]# jps

15552 ResourceManager

15812 NodeManager

15365 SecondaryNameNode

15094 NameNode

18345 Jps*/

原因是 执行了多次格式化 ,解决方法:

  • a.删除current目录下的tmp文件夹,重新建立

              [root@wlh current]# rm -rf tmp

              [root@wlh current]# mkdir tmp

              [root@wlh tmp]# mkdir logs

  • b.删除logs文件夹,重新建立

              [root@wlh hadoop-3.0.0-alpha1]# rm -rf logs

              [root@wlh hadoop-3.0.0-alpha1]# mkdir logs

  • c.执行格式化

              [root@wlh hadoop]# hdfs namenode -format

  • d.启动服务

              [root@wlh hadoop]# /opt/hadoop-3.0.0-alpha1/sbin/start-dfs.sh

              [root@wlh hadoop]# /opt/hadoop-3.0.0-alpha1/sbin/start-yarn.sh

  • e.再次执行jps

              [root@wlh hadoop]# jps

              22017 ResourceManager

              22274 NodeManager

              21635 DataNode

              21813 SecondaryNameNode

              22443 Jps

              21550 NameNode

问题3、4 都是帮助其他朋友安装时遇到的问题,他用的jdk版本是jdk-8u121-linux-i586.rpm

3、jdk安装报错:Error occurred during initalization of VM java/lang/NoClssDefFoun

    出现此问题先检查环境变量配置是否正确,如果没问题就看一下lib和jre/lib中的rt.pack、tools.pack如果发现这两个文 的话,就是因为他们没有解压我们只需要把他们解压成rt.jar和tools.jar就一切OK了 

如: 

    Java 代码

    unpack200 rt.pack rt.jar

4、格式化hadoop报错java.lang.InternalError: internal error: SHA-1 not available.

Clipboard Image.png

  • 原因,找不到类,把java里面的jar全部加到classPath中,既 在profile文件中添加
 CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar 
 export PATH JAVA_HOME CLASSPATH

如果还不能解决问题,就换个jdk吧~

5、另一个小朋友的问题 执行hdfs namenode -format报错

Clipboard Image.png

解决方法:

  • 查看hosts和network两个文件中hostname配置

  Clipboard Image.png

    Clipboard Image.png

      Clipboard Image.png

  • 修改host文件中的主机名,reboot

       Clipboard Image.png

       Clipboard Image.png

  • 重新执行hdfs namenode -format
推荐 4
本文由 liliwu 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

4 个评论

看到有推荐 我就猜到了 是勇哥~~~
2.2<property>
<name>dfs.permissions.senabled</name>
<value>false</value>
</property>
这个地方好像写错了?
谢谢你,已修改
太棒了 讲的实用 谢谢老师

要回复文章请先登录注册