首先准备好虚拟机环境,安装好系统,最好是能上外网,具体安装方法这里不详述。具体上网设置看我的另外一篇博客。
搭建前文件准备:
1.jdk1.8.0_111.tar.gz
2.hadoop-2.9.2.tar.gz
设置三台虚拟机IP和HOSTNAME(三台设置都是一样的)
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(环境变量有多种方法,可选择其它系统文件配置)变量如下图:
文本如下:
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文件的家目录。
2.core-site.xml文件配置:
当然还有别的配置项,个人学习已经够用。还有要创建的hadoop.tmp.dir目录,当前用户要有权限读写。
3.hdfs-site.xml文件配置
当然还有别的配置项,个人学习已经够用。还有要根据自己的配置创建的所在目录,当前用户要有权限读写。
4.mapred-site.xml文件配置
注意:这个文件要修改成自己的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文件配置
这里当然也有别的配置项,学习已经够用。可以官网去查看其它的配项。
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 有这些进程:
另外两台虚拟机执行jps效果如图:
也可以在网页查看地址:http://192.168.135.128:50070/dfshealth.html#tab-overview效果如下:
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
效果如下:
没有报错是说明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:
hadoop03 core-site.xml:
这个问题纠结了一天,翻看了不少的网上配置方式,还有官网的配置说明,还是英文的看的我头大,也走了不少弯路。
感觉使用telnet hadoop01 9000也不通,提示访问拒绝。
想着端口号9000没有开通的问题又修改了iptables文件规则如下:
开放端口要加的位置一定要放在红框的上面一句和下面一句之间,还有就是把iptables服务关闭,问题依然在,那就是不是这个原因。到了晚上11点多才有点着急。该洗洗睡了,怎么就解决不了呢,不然觉都睡不好。这个坑给了我深刻的教训,后来注意到了在hadoop02,hadoop03 两台slave上面 core-site.xml配置修改成:
后来想明白为什么这样了。既然是slave,就是dataNode,要跟连接nameNode节点进行通信,当然要配置成master的主机hostname或者ip了,真是日了。。。。。
打完收功。
有什么不正确的地方不望多指教,欢迎交流学习,也希望同行少走弯路。