基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)

首先准备好虚拟机环境,安装好系统,最好是能上外网,具体安装方法这里不详述。具体上网设置看我的另外一篇博客。

搭建前文件准备:

 1.jdk1.8.0_111.tar.gz

 2.hadoop-2.9.2.tar.gz

设置三台虚拟机IP和HOSTNAME(三台设置都是一样的)

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第1张图片

192.168.135.128 hadoop01     //master这个要设置你自己的虚拟机IP

192.168.135.128 hadoop02     //slaves 这个要设置你自己的虚拟机IP  

192.168.135.128 hadoop03     //slaves 这个要设置你自己的虚拟机IP

还有一个地方要修改,不然会出ssh登录还是提示需要密码:

 

执行一下 :hosname hadoop01  

                hostname 听说可以避免重启虚拟机 ,我是重启了的~~~~~~

在设置hostname后,再来设置三台电脑的ssh免密登录(需要安装sshd服务,怎么设置搜索网上有很多基本都是一样,问题不大),不然会遇到奇怪问题。防火墙什么的最好是关闭,也可以不关,下面有说设置,准备工作完成。

这些准备好后,安装jdk解压jdk1.8.0_111.tar.gz到/usr/local/目录下(当然根据自己系统情况,喜好设置这个目录,但是要记得目录)再解压hadoop-2.9.2.tar.gz到/opt/hadoop2.9.2(这个目录随自己定义但是一定要记得)然后就是配置centOS系统环境变量在/etc/profile(环境变量有多种方法,可选择其它系统文件配置)变量如下图:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第2张图片

文本如下:

export JAVA_HOME=/usr/local/java/jdk1.8.0_111
export JRE_HOME=/usr/local/java/jdk1.8.0_111/jre
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
export MAVEN_HOME=/usr/local/apache-maven-3.5.0
export HADOOP_HOME=/opt/hadoop-2.9.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"
export PATH=$PATH:$JAVA_HOME/bin:/usr/local/mongodb-linux-x86_64-3.4.3/bin:/usr/local/nginx/sbin:$MAVEN_HOME/bin:$HADOOP_HOME/bin:/usr/bin/python 

这里也把hadoop环境配置有多的部分看下面遇到的问题会有解释。注意:不要忘记最后一句PATH,设置完要 source /etc/profile

环境变量设置完就要验证下java -version 和 hadoop version验证有运行结果就说明安装是对的。

下面就是配置hadoop的几个配置文件:

1.hadoop-env.sh,

2.core-site.xml,

3.hdfs-site.xml,

4.mapred-site.xml,

5.yarn-site.xml

6.slaves

1.设置hadoop-env.sh配置hadoop的java运行环境,不然会提示:  not JAVA_HOME  set.

如下图:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第3张图片

就是设置的解压java文件的家目录。

2.core-site.xml文件配置:


   
            fs.defaultFS
            hdfs://hadoop01:9000//这个配置在scp  hadoop2.9.2到另外两台虚拟机的时候不用修改
   

   
            hadoop.tmp.dir
            file:/usr/local/hadoop-2.9.2/tmp
   

当然还有别的配置项,个人学习已经够用。还有要创建的hadoop.tmp.dir目录,当前用户要有权限读写。

3.hdfs-site.xml文件配置

 
     dfs.namenode.name.dir
            file:/usr/local/hadoop-2.9.2/hdfs/name//这个目录要创建
   

   
            dfs.datanode.data.dir
            file:/usr/local/hadoop-2.9.2/hdfs/data//这个目录要创建
   

   
            dfs.replication
            3//几台虚拟机就设置几
   

当然还有别的配置项,个人学习已经够用。还有要根据自己的配置创建的所在目录,当前用户要有权限读写。

4.mapred-site.xml文件配置


      mapreduce.framework.name
      yarn
   

   
      mapreduce.jobhistory.address
      hdfs://192.168.135.128:10020//这里可以设置hostname不过试过
   

   
      mapreduce.jobhistory.webapp.address
      hdfs://192.168.135.128:19888////这里可以设置hostname
   

注意:这个文件要修改成自己的hostname或者ip,我是在hadoop01配置,在使用scp  -rp hadoop2.9.2 hadoop02:/opt/local/ ,scp  -rp hadoop2.9.2 hadoop03:/opt/local/ copy到另外两台slave要记得修改。

 5.yarn-site.xml文件配置


      yarn.resourcemanager.hostname
      hadoop01//scp到另外两台虚拟机的时候记得修改
   

   
      hadoop.http.staticuser.user
      wsb
   

   
      yarn.nodemanager.aux-services
      mapreduce_shuffle
   

这里当然也有别的配置项,学习已经够用。可以官网去查看其它的配项。

6.slaves文件配置

hadoop02
hadoop03

slaves配置很简单,哪两台虚拟机时slaves就设置哪两台hostname。这个是scp到另外两台虚拟机的时候不用修改。

hadoop配置文件配置完成后,scp到另外两台虚拟机中上面注释已经有说明要修改的地方。

下面就是格式化hadoop namenode  命令长这样 hadoop namenode -format  (hdfs namenod -format这两上好像都是可以的)看网上说要到hadoop2.9.2/bin/目录下执行,感觉有点扯,环境变量设置了还要到这个目录下执行。

下面就启动hadoop2.9.2:

   hadoop2.9.2/sbin目录下执行,./start-all.sh但是好像要作废了,不过还可以用,会提示这个This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh说明使用这个两个script两次启动。都能成功。

验证是否启动成功 jps 有这些进程:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第4张图片

另外两台虚拟机执行jps效果如图:

也可以在网页查看地址:http://192.168.135.128:50070/dfshealth.html#tab-overview效果如下:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第5张图片

live Nodes一定要有数据结点的个数,不然就不是成功的。

也可以执行经典hadoop示例程序的wordcount程序来验证,命令如下:

1. hadoop fs -mkdir /input  //创建一个hdfs文件系统目录/不是代表linux系统根目录

2.hadoop fs -put /opt/hadoop-2.9.2/README.txt  /input//把README.txt文件上传到hdfs目录/input目录下

3.hadoop jar /opt/hadoop-2.9.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.9.2.jar wordcount   /input/  /output

效果如下:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第6张图片

 没有报错是说明hadoop配置启动成功的,环境搭建好了,可以接着玩spark, storm , ES等。

下面说下搭建过程中碰到坑:

坑1:WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

遇到启动时候报这个问题配置centos环境变量:

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

还有在hadoop-env.sh里面也添加了如上的配置,需要说明是:cp /opt/hadoop-2.9.2/lib/native   /opt/hadoop-2.9.2/lib/

才有上面的环境变量配置,但是感觉是多余的,问题还是有;有搜到说是改hadoop的日志级到error感觉没有必要。好像还是有这个警告,但是不是错。就没管了。也不影响启动,坑2解决后,问题没有出现。

坑2:DEBUG ipc.Client: IPC Client (1470543563) connection to hadoop01/192.168.135.128:9000   connect refused .

把hadoop02,hadoop03的配置改成这样

hadoop02  core-site.xml:


            fs.defaultFS
            hdfs://hadoop02:9000//这个配置在scp  hadoop2.9.2到另外两台虚拟机的时候不用修改
   

hadoop03 core-site.xml:


            fs.defaultFS
            hdfs://hadoop03:9000//这个配置在scp  hadoop2.9.2到另外两台虚拟机的时候不用修改
   

这个问题纠结了一天,翻看了不少的网上配置方式,还有官网的配置说明,还是英文的看的我头大,也走了不少弯路。

感觉使用telnet hadoop01 9000也不通,提示访问拒绝。

想着端口号9000没有开通的问题又修改了iptables文件规则如下:

基于java 1.8 ,三台centOS虚拟机下搭建hadoop-2.9.2环境(超详细)_第7张图片

开放端口要加的位置一定要放在红框的上面一句和下面一句之间,还有就是把iptables服务关闭,问题依然在,那就是不是这个原因。到了晚上11点多才有点着急。该洗洗睡了,怎么就解决不了呢,不然觉都睡不好。这个坑给了我深刻的教训,后来注意到了在hadoop02,hadoop03 两台slave上面 core-site.xml配置修改成:


            fs.defaultFS
            hdfs://hadoop01:9000//这个配置在scp  hadoop2.9.2到另外两台虚拟机的时候不用修改

后来想明白为什么这样了。既然是slave,就是dataNode,要跟连接nameNode节点进行通信,当然要配置成master的主机hostname或者ip了,真是日了。。。。。

打完收功。

有什么不正确的地方不望多指教,欢迎交流学习,也希望同行少走弯路。

你可能感兴趣的:(hadoop,VMware,linux)