对上次的一些细节总结
HDFS写操作:
1)客户端先对数据用block切分计算数据块个数,在HDFS中默认的块大小是128M
2)客户端在切分数据后向NameNode汇报的信息包括整个文件的block数,文件权限,上传时间
3)客户端开始以字节的形式读取数据直到128M
4)客户端请求第一个blocks的存放地址(包含两个备份地址一共是三个)和对应的Id号
5)NameNode根据各个DataNode返回的信息返回负载最小的DataNode地址给client
6)客户端开始上传数据:
为了加快传输的效率,采用并行传输的方式,客户端将一个block分为一个个packet,每个packet大小为64K,将要传输的三个DataNode之间会形成管道,客户端会连接到管道的源头并源源不断地发送一个个packet当数据经过DataNode时,该节点会拷贝该数据
7)在一个block拷贝完成后DataNode会向NameNode汇报存储情况
备份机制(默认备份节点为两个):
1)如果是集群内提交的数据
第一个Block会存储在当前节点
第二个Block会存储到一个不同机架上的一台随机服务器中
第三个Block会存储到和第二台相同的相同机架上的另一台服务器中
其他的均为随机备份
持久化机制
NameNode再启动的时候会生成两个文件,一个是edit(日志文件)一个是fsimage(快照)
随着集群的运行NameNode会将这两个文件交给secondaryNameNode进行重演以产生相同的元数据,在此期间对edit的改写会写入edit.new文件中
该演练触发的机制有两种
1.超过3600S
2.edit文件大小超过64M
在持久化时除了block的位置信息(因为位置信息可能经常发生变动),其余均会被持久化
为了解决位置信息缺失的问题,在每一次重启集群后所有DataNode节点都会向NameNode汇报当前节点的block信息
配置HDFS (伪分布式)
首先安装linux操作系统,以下的演示均在CentOs 6.5下完成
1.配置JDK
因为hadoop采用Java语言编写,所以需要配置JDK环境
先下载jdk包
http://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/jdk-8u181-linux-x64.tar.gz
上传至服务器任意文件夹下
解压 tar -zxvf jdk-8u181-linux-x64.tar.gz(你下载的文件名)
修改配置文件
vi /etc/profile
在末尾加上
export JAVA_HOME=/usr/java/jdk1.8.0_181
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$PATH
控制台输入java -version看是否能打印出JDK版本信息
2.配置免密登录
ssh-keygen -t rsa
ssh-copy-id -i ~/.ssh/id_rsa.pub root@用户名
可能在第二条命令会出错的,提示无法识别主机名
这时候需要在etc/hosts下配置别名信息
4.修改hdfs-site.xml配置文件
将以下数据添加到hadoop/etc中的hdfs-site.xml中的<configuration>
标签中
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value>
</property>
5.修改core-site.xml配置文件
将以下数据添加到hadoop/etc中的core-site.xml中的<configuration>
标签中
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/abc/hadoop/local</value>
</property>
6.修改slaves配置文件,在其中添加用户名
hadoop01
7.格式化NameNode(创建目录以及文件)
#hdfs namenode -format
为了方便使用我们可以配置一下hadoop的环境变量,以后就可以在任意文件下执行hadoop命令
vi /etc/bashrc
在最下面加入
export HADOOP_HOME=/home/vickey/hadoop/hadoop-2.6.5
export PATH=$HADOOP_HOME/bin:$PATH
export PATH=$HADOOP_HOME/sbin:$PATH
这里可能会提示javahome未找到或者java not set等错误
这时可以去修改hadoop.env.sh文件
添加这么一句
export JAVA_HOME=/usr/java/jdk1.8.0_181
当提示未找到配置文件目录的错误时,我们可以添加另一句
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
8.启动HDFS
start-dfs.sh
如果顺利的话控制台会依次启动三个节点,当启动完成后我们可以用jps指令来查看他们的进程
启动完成后我们可以通过浏览器来查看他的运行情况
在浏览器输入localhost:50070
另外我们也可以通过主机的浏览器去查看hadoop的运行,在浏览器输入
你虚拟机的ip地址:50070
或者通过修改C:\Windows\System32\drivers\etc\hosts文件
如以上的格式修改DNS解析,就可以通过主机名的方式进行访问了