hdfs伪分布式集群搭建和部署详解
大家好,这是我的第一篇技术博客,也是第一篇博客,请大家多多支持。我写博客的初衷无非是对所学知识的回顾和总结,同时能与广大的读者一起探讨,共同进步,这是一件非常令人开心的事。
博客的内容大都是大数据技术相关,今天要说的是hadoop,以后会可能还会更新,hive,Hbase,flume,spark,storm等。希望大家多多批评和指正,我一定虚心接受。
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/1o9Eu6nC
安装步骤:
① 安装jdk,解压即可,安装之后配置环境变量,修改/etc/profile文件,为什么要修改这个文件?是因为hadoop可以通过配置找到jdk,根本因为hadoop是java语言编写,也需要在jvm中运行。完成以后,配置ip/主机名映射,修改/etc/hosts文件。
[[email protected] ~]# rpm -i jdk-8u151-linux-x64.rpm
[[email protected] ~]# vi /etc/profile
在profile文件底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
[[email protected] ~]# vi /etc/hosts
在hosts文件底部添加(主机名安装操作系统时可自定义,但不能出现像"."、“_”、“/”这样的字符,后面格式化的时候会出错)
192.168.201.77 xiaoku
② 设置免密码登录
设置免密码登录的目的是为了实现hadoop的自动化操作,搭建好集群后,各个节点之间通过ssh的方式进行通信,只需要各节点持有的公钥相同即可完成认证,也保障了通信的安全性。
[[email protected] ~]# ssh-****** -t dsa -P '' -f ~/.ssh/id_dsa
[[email protected] ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
③ 安装hadoop2.6.5
[[email protected] ~]# tar xf hadoop-2.6.5.tar.gz
解压成功后会出现hadoop-2.6.5文件,将其复制到新的文件夹下
创建新目录/opt/source(可自定义),用来存放安装包
[[email protected] ~]# mkdir /opt/source
[[email protected] ~]# 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
此时环境变量配置完了,加载到内存
[[email protected] ~]# . /etc/profile
加载完成后,hadoop的命令就会生效了。
④ 修改脚本文件和配置文件
[[email protected] source]# cd hadoop-2.6.5/etc/hadoop/
[[email protected] source]# cat $JAVA_HOME
会得到一个目录/usr/java/jdk1.8.0_151,即当前jdk所在目录,复制
修改hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh
[[email protected] source]# vi hadoop-env.sh
[[email protected] source]# vi mapred-env.sh
[[email protected] source]# vi yarn-env.sh
打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可,
然后将${JAVA_HOME}替换为复制的jdk目录。
为什么要这么做呢?是为搭建真分布式集群做准备,如果通过本地节点,可以获取到${JAVA_HOME}的值为当前jdk所在目录,如果通过ssh远程调用的时候,就获取不到值,程序就会报错。
下面修改配置文件core-site.xml、hdfs-site.xml和slaves
[[email protected] 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的数据将被清空。
<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>
[[email protected] source]# vi slaves
将localhost修改成当前节点主机名即可。slaves存放的是datanode各个节点的主机名或ip,目前主机名为当前节点,真分布式则有多个
⑤ 格式化文件系统,进行hdfs集群的部署,启动集群
[[email protected] 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来寻找对应的主机。
[[email protected] source]# start-dfs.sh
此时会逐渐启动namenode、datanode和secondaryNamenode
[[email protected] source]# jps
在浏览器输入ip:50070或namenode主机名:50070
如果出现下面的界面就说明成功了:
博客的内容大都是大数据技术相关,今天要说的是hadoop,以后会可能还会更新,hive,Hbase,flume,spark,storm等。希望大家多多批评和指正,我一定虚心接受。
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/1o9Eu6nC
安装步骤:
① 安装jdk,解压即可,安装之后配置环境变量,修改/etc/profile文件,为什么要修改这个文件?是因为hadoop可以通过配置找到jdk,根本因为hadoop是java语言编写,也需要在jvm中运行。完成以后,配置ip/主机名映射,修改/etc/hosts文件。
[[email protected] ~]# rpm -i jdk-8u151-linux-x64.rpm
[[email protected] ~]# vi /etc/profile
在profile文件底部添加:
export JAVA_HOME=/usr/java/jdk1.8.0_151
export PATH=$PATH:$JAVA_HOME/bin
[[email protected] ~]# vi /etc/hosts
在hosts文件底部添加(主机名安装操作系统时可自定义,但不能出现像"."、“_”、“/”这样的字符,后面格式化的时候会出错)
192.168.201.77 xiaoku
② 设置免密码登录
设置免密码登录的目的是为了实现hadoop的自动化操作,搭建好集群后,各个节点之间通过ssh的方式进行通信,只需要各节点持有的公钥相同即可完成认证,也保障了通信的安全性。
[[email protected] ~]# ssh-****** -t dsa -P '' -f ~/.ssh/id_dsa
[[email protected] ~]# cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
③ 安装hadoop2.6.5
[[email protected] ~]# tar xf hadoop-2.6.5.tar.gz
解压成功后会出现hadoop-2.6.5文件,将其复制到新的文件夹下
创建新目录/opt/source(可自定义),用来存放安装包
[[email protected] ~]# mkdir /opt/source
[[email protected] ~]# 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
此时环境变量配置完了,加载到内存
[[email protected] ~]# . /etc/profile
加载完成后,hadoop的命令就会生效了。
④ 修改脚本文件和配置文件
[[email protected] source]# cd hadoop-2.6.5/etc/hadoop/
[[email protected] source]# cat $JAVA_HOME
会得到一个目录/usr/java/jdk1.8.0_151,即当前jdk所在目录,复制
修改hadoop目录下的hadoop-env.sh、mapred-env.sh、yarn-env.sh
[[email protected] source]# vi hadoop-env.sh
[[email protected] source]# vi mapred-env.sh
[[email protected] source]# vi yarn-env.sh
打开文件找到export JAVA_HOME=${JAVA_HOME},如果前面有#的说明被注释了,将其打开即可,
然后将${JAVA_HOME}替换为复制的jdk目录。
为什么要这么做呢?是为搭建真分布式集群做准备,如果通过本地节点,可以获取到${JAVA_HOME}的值为当前jdk所在目录,如果通过ssh远程调用的时候,就获取不到值,程序就会报错。
下面修改配置文件core-site.xml、hdfs-site.xml和slaves
[[email protected] 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
<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>
[[email protected] source]# vi slaves
将localhost修改成当前节点主机名即可。slaves存放的是datanode各个节点的主机名或ip,目前主机名为当前节点,真分布式则有多个
⑤ 格式化文件系统,进行hdfs集群的部署,启动集群
[[email protected] 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来寻找对应的主机。
[[email protected] source]# start-dfs.sh
此时会逐渐启动namenode、datanode和secondaryNamenode
[[email protected] source]# jps
打印java进程,查看个节点是否启动成功
如果进程中有上面四个,就说明启动成功
在浏览器输入ip:50070或namenode主机名:50070
如果出现下面的界面就说明成功了:
下拉可以查看Live nodes,即slaves的有效节点数。
到此,为分布式集群搭建结束。