hadoop大致可分为三个部分:
1、分布式存储,HDFS(Hadoop Distributed File System);
2、分布式计算,MapReduce;
3、资源管理系统,Yarn。
下面直接进入正题:伪分布式集群的搭建。
环境:
① Vmvare workStation、
② Linux(CentOS,Ubuntu等,我用的是CentOS_6.5版本下载)
③ Jdk(7或7以上均可)
④ Hdaoop2.6.5安装包
以上文件下载地址:https://pan.baidu.com/s/1ek7QjQSaWBJD2uikY3DTng 安装步骤:
① 安装jdk,解压即可,安装之后配置环境变量,修改/etc/profile文件,为什么要修改这个文件?是因为hadoop可以通过配置找到jdk,根本因为hadoop是java语言编写,也需要在jvm中运行。完成以后,配置ip/主机名映射,修改/etc/hosts文件。
[root@xiaoku ~]# rpm -i jdk-8u151-linux-x64.rpm
[root@xiaoku ~]# vi /etc/profile
在profile文件底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
[root@xiaoku ~]# vi /etc/hosts
在hosts文件底部添加(主机名安装操作系统时可自定义,但不能出现像"."、“_”、“/”这样的字符,后面格式化的时候会出错)
192.168.201.77 xiaoku
② 设置免密码登录
设置免密码登录的目的是为了实现hadoop的自动化操作,搭建好集群后,各个节点之间通过ssh的方式进行通信,只需要各节点持有的公钥相同即可完成认证,也保障了通信的安全性。
[root@xiaoku ~]# ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
[root@xiaoku ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
③ 安装hadoop2.6.5
[root@xiaoku ~]# tar xf hadoop-2.6.5.tar.gz
解压成功后会出现hadoop-2.6.5文件,将其复制到新的文件夹下
创建新目录/opt/source(可自定义),用来存放安装包
[root@xiaoku ~]# mkdir /opt/source
[root@xiaoku ~]# mv hadoop-2.6.5 /opt/source
添加环境变量:修改/etc/profile文件底部添加:
export HADOOP_PREFIX=/opt/source/hadoop-2.6.5
同时PATH后添加:
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_PREFIX/bin:$HADOOP_PREFIX/sbin
此时环境变量配置完了,加载到内存
[root@xiaoku ~]# . /etc/profile
加载完成后,hadoop的命令就会生效了。
④ 修改脚本文件和配置文件
[root@xiaoku source]# cd hadoop-2.6.5/etc/hadoop/
[root@xiaoku source]# cat $JAVA_HOME
会得到一个目录/usr/java/jdk1.8.0_151,即当前jdk所在目录,复制
修改hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh
[root@xiaoku source]# vi hadoop-env.sh
[root@xiaoku source]# vi mapred-env.sh
[root@xiaoku source]# vi yarn-env.sh
打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可,
然后将${JAVA_HOME}替换为复制的jdk目录。
为什么要这么做呢?是为搭建真分布式集群做准备,如果通过本地节点,可以获取到${JAVA_HOME}的值为当前jdk所在目录,如果通过ssh远程调用的时候,就获取不到值,程序就会报错。
下面修改配置文件core-site.xml、hdfs-site.xml和slaves
[root@xiaoku source]# vi core-site.xml
添加如下配置,是为了启动namenode的时候,能够找到默认的namenode主机节点
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://xiaoku:9000</value>
</property>
</configuration>
同时必须添加一个如下配置:
<property>
<name>hadoop.tmp.dir</name>
<value>/var/xiaoku/hadoop/local</value>(可自定义,在/var目录下建立均可)
</property>
在hadoop默认配置中,hadoop.tmp.dir指向的是linux的/tmp/hadoop-${user.name},此目录在节点宕机等情况发生时会被清空,此时hadoop的数据将被清空。
默认配置参考官方文档:http://hadoop.apache.org/docs/r2.6.5/做菜单栏下的Configuration
[root@xiaoku source]# vi hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>//添加块的副本数,伪分布式集群只有一个节点,为1;分布式节点为多个
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>xiaoku:50090</value>//配置secondaryNamenode的ip和端口(默认50090),参考官档
</property>
</configuration>
[root@xiaoku source]# vi slaves
将localhost修改成当前节点主机名即可。slaves存放的是datanode各个节点的主机名或ip,目前主机名为当前节点,真分布式则有多个
⑤ 格式化文件系统,进行hdfs集群的部署,启动集群
[root@xiaoku source]# hdfs namenode -format
格式化成功的标志是没有报错,并在日志中出现successfully formatted字样,格式化之后会在/var生成/xiaoku/hadoop/local...的目录。
格式化之后会在/var/xiaoku/hadoop/local/dfs/name/current/下的VERSION中存放一个clusterId,集群启动后也会在/var/xiaoku/hadoop/local/dfs/data/current/下的VERSION中存放一个clusterId
只有当两个clusterId相同时,节点才会正常,否则datanode在启动一段时间之后会自动消失,原因就是datanode会通过clusterId来寻找对应的主机。
[root@xiaoku source]# start-dfs.sh
此时会逐渐启动namenode、datanode和secondaryNamenode
[root@xiaoku source]# jps
打印java进程,查看个节点是否启动成功
如果进程中有上面四个,就说明启动成功
⑥ hdfs webUI界面
在浏览器输入ip:50070或namenode主机名:50070
如果出现下面的界面就说明成功了:
下拉可以查看Live nodes,即slaves的有效节点数。
到此,为分布式集群搭建结束。