大数据求索(1):HDFS安装指南
背景
HDFS是分布式文件系统,是Hadoop的基础,本章主要介绍如何安装HDFS。
环境参数
- centos 6.5
- hadoop2.6.0-cdh5.7.0
- jdk8
伪分布式安装
一、JDK安装
-
-
解压并输出到app目录下 tar -zxvf xxx.tar.gz -C ~/app
-
添加到系统环境变量
vim ~/.bash_profile export JAVA_HOME=/home/wds/jdk8 export PATH=$JAVA_HOME:$PATH
-
使得环境变量生效 source ~/.bash_profile
-
验证java是否配置成功 java -v
二、安装SSH并配置免密登录
因为实在centos下,所以安装命令如下:
sudo yum install ssh
sudo yum install rsync
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
然后使用ssh localhost检查能否免密登录。如果成功会连接到自己,使用exit退出即可。
三、下载Hadoop
这里推荐使用cdh版本,具体这个版本和官方版本的区别,可以自己查阅资料,一般推荐使用cdh版本。
下载地址为:https://archive.cloudera.com/cdh5/cdh/5/,然后搜索hadoop2.6.0-cdh5.7.0,如下图所示
注意这里应该下载hadoop-2.6.0-cdh5.7.0.tar.gz,而不是带src的。
下载完成后解压 tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C ~/app
四、hadoop配置文件的修改
因为是单机版,即伪分布式,所以这里只需要配置三个文件
etc/hadoop/hadoop-env.sh(大概25行)
注释掉原来的JAVA_HOME,改为自己系统下的目录,如下图所示:
etc/hadoop/core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://主机名:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/stu/app/tmp</value>
</property>
</configuration>
说明:
fs.defaultFS : 默认文件系统的名称 ,uri用来确定主机、端口等
dfs.name.dir : 用于确定HDFS文件系统的元信息保存在说明目录下,默认的是保存在linux系统的/tmp目录下,但是每次重启系统后数据会被清除,所以这里自己配置一个新的目录
etc/hadoop/hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
说明:
dfs.replication : 用于指定备份的数量,默认是3份,因为这里是伪分布式,所以改为1
为了方便命令行操作,配置hadoop环境变量
vim ~/.bash_profile
export Hadoop_HOME=/home/wds/app/hadoop
export PATH=$Hadoop_HOME:$PATH
这样在linux shell里直接输入hadoop可以看到有命令提示,如下图所示
到这里,配置基本完成。
五、启动HDFS
1) 第一次启动的时候,需要先进行格式化操作
bin/hdfs namenode -format
2)启动
sbin/start-dfs.sh
启动日志如下
- 验证启动是否成功
-
JPS命令
-
浏览器访问,在浏览器里输入https://ip:50070
浏览器里有很多方便的可视化操作,非常方便
六、遇到的问题解决
1) 浏览器访问打不开
可能的原因:
-
没有格式化文件系统
-
没有配置JAVA_HOME
-
防火墙没有关闭(或者配置规则)
-
查看本地端口,netstat -ant,查看端口50070是否已经开放
-
查看本地端口,如果50070前面ip是127.0.0.1(默认绑定),会造成回环,改成0.0.0.0或者本机ip,具体做法是修改/etc/hosts文件,删除多余文件并添加一行 ip 主机名
或者在hdfs-site.xml文件修改
<property> <name>dfs.http.address</name> <value>0.0.0.0:50070</value> </property>
2) datanode结点无法启动
如果在第一次格式化文件系统以后又格式化了一次,会造成这种情况,主要原因是datanode的clusterID 和 namenode的clusterID 不匹配。当我们执行文件系统格式化时,会在namenode数据文件夹(即配置文件中dfs.name.dir在本地系统的路径)中保存一个current/VERSION文件,记录namespaceID,标志了所有格式化的namenode版本。如果我们频繁的格式化namenode,那么datanode中保存(即dfs.data.dir在本地系统的路径)的current/VERSION文件只是你地第一次格式化时保存的namenode的ID,因此就会造成namenode和datanode之间的ID不一致。
解决方法一:(推荐)
删除DataNode的所有资料及将集群中每个datanode节点的/dfs/data/current中的VERSION删除,然后重新执行hadoop namenode -format进行格式化,重启集群,错误消失。
解决方法二:
将name/current下的VERSION中的clusterID复制到data/current下的VERSION中,覆盖掉原来的clusterID
然后重启即可。