赞
踩
HDFS 全称是Hadoop Distributed File System hadoop分布式(cluser)文件存储系统.
1、hadoop1体系 64M一个快(少)
hadoop2体系 128M一个块(默认)
8TB (3TB/3TB/2TB)n=X/128 个快
提高数据读写效率(利于并行读取数据)
2、冗余存储 (24TB 动态扩充 ,保证数据安全)
3、校验和(确定块是否完整 是否损坏)
原理:实现思想(加密算法MD5 不可逆)
可对二进制加密,128M加密----> 32个字符串(16进制0F)
元不变(加密结果也不会改变)
datanode 定期检查块 (向nameNode汇报块是否损坏)。
NameNode 的持久化?:
/opt/models 原始文件
/opt/install 安装文件放置的位置
1. linux服务器的基本配置 设置ip,关闭防火墙,关闭selinux,配置主机名,主机与ip映射 2. 安装jdk 1.7+ rpm -ivh jdk-7u71-linux-x64.rpm 默认安装位置 /usr 环境变量的配置 vi /etc/profile 环境变量 linux 所有用户生效 vi ~/.bash_profile 环境变量 当前用户生效 vi ~/.bashrc JAVA_HOME=/usr/java/jdk1.7.0_71 CLASSPATH=. PATH=$JAVA_HOME/bin:$PATH:$HOME/bin export JAVA_HOME export CLASSPATH export PATH source .bash_profile
tar -zxvf hadoop-2.5.2.tar.gz -C /opt/install
1.1 hadoop-env.sh export JAVA_HOME=/usr/java/jdk1.7.0_71 1.2 core-site.xml <!--用于设置namenode并且作为Java程序的访问入口---> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop.baizhiedu.com:8020</value> </property> <!--存储NameNode持久化的数据,DataNode块数据——> <!--手工创建$HADOOP_HOME/data/tmp--> <property> <name>hadoop.tmp.dir</name> <value>/opt/install/hadoop-2.5.2/data/tmp</value> </property> 1.3 hdfs-site.xml <!--设置副本数量 默认是3 但是单节点测试,改成1--> <property> <name>dfs.replication</name> <value>1</value> </property> 1.4 mapred-site.xml <!--yarn 与 MR相关--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 1.5 yarn-site.xml <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> 1.6 slaves hadoop2.baizhiedu.com
【第一次搭建hdfs集群时需要使用】
目的作用:格式化hdfs系统,并且生成存储数据块的目录
bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode
sbin/hadoop-daemon.sh start datanode
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/hadoop-daemon.sh stop namenode
sbin/hadoop-daemon.sh stop datanode
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
ps -ef | grep java
jps 查看相关4个进程
通过网络进行访问测试
浏览器 http://hadoop2.baizhiedu.com:50070 hdfs
http://hadoop2.baizhiedu.com:8088 yarn
1. 查看日志
tail -nxxx 文件名
$HADOOP_HOME/logs
[hadoop-用户名-namenode-主机名.log]
hadoop-root-namenode-hadoop2.baizhiedu.com.log
hadoop-root-datanode-hadoop2.baizhiedu.com.log
yarn-root-resourcemanager-hadoop2.baizhiedu.com.log
yarn-root-nodemanager-hadoop2.baizhiedu.com.log
1. 查看目录结构 bin/hdfs dfs -ls 路径 bin/hdfs dfs -ls / 2. 创建文件夹 bin/hdfs dfs -mkdir /suns bin/hdfs dfs -mkdir -p /liuh/xiaojr 3. 本地上传文件到hdfs中 bin/hdfs dfs -put /root/hdfs/data /suns bin/hdfs dfs -put local_path hdfs_path 4. 查看文件内容 bin/hdfs dfs -text /suns/data bin/hdfs dfs -cat /suns/data 5. 删除 bin/hdfs dfs -rm /suns/data 注意事项:可以修改垃圾桶的存活时间 core-site.xml <property> <name>fs.trash.interval</name> <value>10</value> </property> 垃圾桶的位置:/user/root/.Trash/190522010000/suns/data hdfs:有权限: hdfs-site.xml <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> 6. 删除非空文件夹 bin/hdfs dfs -rmr /suns 7. 从hdfs下载文件到本地 bin/hdfs dfs -get hdfs_path local_path 8. cp mv
shell脚本 当前目录执行方式 ./hadoop-start.sh 绝对路径执行shell /opt/install/hadoo-2.5.2/hadoop-start.sh linux hadoop-start.sh sbin/hadoop-daemon.sh start namenode sbin/hadoop-daemon.sh start datanode sbin/yarn-daemon.sh start resourcemanager sbin/yarn-daemon.sh start nodemanager hadoop-stop.sh sbin/hadoop-daemon.sh stop namenode sbin/hadoop-daemon.sh stop datanode sbin/yarn-daemon.sh stop resourcemanager sbin/yarn-daemon.sh stop nodemanager sbin/yarn-daemon.sh start nodemanager hadoop-stop.sh sbin/hadoop-daemon.sh stop namenode sbin/hadoop-daemon.sh stop datanode sbin/yarn-daemon.sh stop resourcemanager sbin/yarn-daemon.sh stop nodemanager
NameNode在运行时,元数据放置在内存中。
如果内存出现问题,则元数据丢失。
为了保证元数据安全,NameNode有对应的持久化机制,把元数据持久化到硬盘存储。
1、FSImage(文件系统镜像二进制) 存储某一个时间点(checkPoint)的NameNode镜像数据 默认存储位置 /opt/install/hadoop-2.5.2/data/tmp/dfs/name dfs.namenode.name.dir 2、EditsLog 可编辑日志二进制 记录(检查点以后的所有写操作) 默认存储位置 dfs.namenode.edits.dir 3、 定制FSImage和EditsLog的存储位置 ~~~markdown hdfs-site.xml <property> <name>dfs.namenode.name.dir</name> <value>file:///xxx/xxxx</value> </property> <property> <name>dfs.namenode.edits.dir</name> <value>file:///xxx/xxxx</value> </property>
每一次启动namenode时,hdfs都需要进行FSImage和EditsLog的整合,
在这个过程中,不允许用户做写操作,把这个过程称之为安全模式(safe mode),默认30秒
(1). safe mode相关命令
bin/hdfs dfsadmin -safemode [enter leave get]
(2). HDFS集群启动是,完成流程
HDFS集群启动 过程 (安全模式)
1,整合 FSImage和EditsLog 生成新的EditsLog 和 FSImage,由新EditsLog接收用户写操作命令
2, DataNode都需NameNode主动汇报健康情况(心跳)3秒
3, 汇报块列表 通过校验和 检查块是否可用,并定期1小时汇报。
自定义SecondaryNameNode 拉取数据的周期
hdfs-site.xml
dfs.namenode.checkpoint.period 3600秒
dfs.namenode.checkpoint.txns 1000000
secondaryNameNode启动方式:
sbin/start-dfs.sh
sbin/hadoop-daemon.sh start secondarynamenode
定制secondaryNameNode 启动的节点
hdfs-site.xml
dfs.namenode.secondary.http-address 0.0.0.0:50090
dfs.namenode.secondary.https-address 0.0.0.0:50091
zookeeper:选主过程 1 ,2,3,4,5,按编号依次启动: 服务器1启动,给自己投票,发投票信息,由于其它机器还没有启动所以它收 不到反馈信息,服务器1的状态一直属于Looking(选举状态)。 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大 所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3 的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为领导者,服务器1,2成为小弟。 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为小弟。 服务器5启动,后面的逻辑同服务器4成为小弟。 LOOKING,竞选状态。 FOLLOWING,随从状态,同步leader状态,参与投票。 OBSERVING,观察状态,同步leader状态,不参与投票。 LEADING,领导者状态。 zookeeper 集群高可靠 (奇数台) 作用: 1、选主namenode(投票)active/standby 2、管理EdisLog(QJN),将EdisLog同步给Standby(NameNode) standyBy(Namenode) 作用: 1、从zookerper上拉取edisLog 进行整合成 FSImage 替换原有的FSImage 2、接受dataNode 的元数据信息。 3、当activeNameNode 宕机时,全权接管 activeNameNode的所有功能,对外进行服务
(1)client向NameNode申请上传…/xxx.txt文件
(2)NN向client响应可以上传文件
(3)Client向NameNode申请DataNode
(4)NN向Client返回DN1,DN2,DN3
(5)Client向DN1,DN2,DN3申请建立文件传输通道
(6)DN3,DN2,DN1依次响应连接
(1)client向NN请求下载…/xxx.txt文件
(2)NN向client返回文件的元数据
(3)Client向DN1请求访问读数据blk_1
(4)DN1向Client传输数据
(5)Client向DN2请求访问读数据blk_2
(6)DN2向Client传输数据
(1)、Map的输出会先写到内存缓冲区中
(2)、达到 阀值(100M)/0.8产生溢写
(3)、产生临时文件,写到本地磁盘
(4)、多个file1 临时文件 marge排序合并(按分区、排序) ,个数为分区个数。
存在本地linux服务器端。
(1)、reduce 通过 http 找nodemanager
(2)、主动拉去数据到 内存 环形缓冲区(分组排序 group sort)
(3)、产生溢写——多个临时文件
(4)、临时文件merge汇总(分组 、排序)交给——reduce
1. zookeeper集群 1.1 解压缩 tar -zxvf zookeeper-xxx-tar.gz -C /opt/install 1.2 创建数据文件夹 mdkir zookeeper_home/data 1.3 conf目录修改zookeeper的配置文件 修改zoo_sample.cfg 为 zoo.cfg mv zoo_sample.cfg zoo.cfg 编辑内容 dataDir=/opt/install/zookeeper-3.4.5/data server.0=hadoop2.baizhiedu.com:2888:3888 server.1=hadoop3.baizhiedu.com:2888:3888 server.2=hadoop4.baizhiedu.com:2888:3888 1.4 zookeeper_home/data myid文件 0 hadoop2.baizhiedu.com myid文件 1 hadoop3.baizhiedu.com myid文件 2 hadoop4.baizhiedu.com 1.5 scp -r 命令 同步集群中所有节点 并 修改对应的myid文件 1.6 主节点 ssh 其他节点 1.7 启动zk服务 bin/zkServer.sh start | stop | restart bin/zkServer.sh status 查看集群状态 【必须集群完整启动完成】 bin/zkCli.sh [leader] 2. HA-HDFS集群 删除 data/tmp 2.1 core-site.xml <property> <name>fs.defaultFS</name> <value>hdfs://ns</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/install/hadoop-2.5.2/data/tmp</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>hadoop2.baizhiedu.com:2181,hadoop3.baizhiedu.com:2181,hadoop4.baizhiedu.com:2181</value> </property> 2.2 hdfs-site.xml <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> <!--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致 --> <property> <name>dfs.nameservices</name> <value>ns</value> </property> <!-- ns下面有两个NameNode,分别是nn1,nn2 --> <property> <name>dfs.ha.namenodes.ns</name> <value>nn1,nn2</value> </property> <!-- nn1的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn1</name> <value>hadoop2.baizhiedu.com:8020</value> </property> <!-- nn1的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn1</name> <value>hadoop2.baizhiedu.com:50070</value> </property> <!-- nn2的RPC通信地址 --> <property> <name>dfs.namenode.rpc-address.ns.nn2</name> <value>hadoop3.baizhiedu.com:8020</value> </property> <!-- nn2的http通信地址 --> <property> <name>dfs.namenode.http-address.ns.nn2</name> <value>hadoop3.baizhiedu.com:50070</value> </property> <!-- 指定NameNode的元数据在JournalNode上的存放位置 --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://hadoop2.baizhiedu.com:8485;hadoop3.baizhiedu.com:8485;hadoop4.baizhiedu.com:8485/ns</value> </property> <!-- 指定JournalNode在本地磁盘存放数据的位置 --> <property> <name>dfs.journalnode.edits.dir</name> <value>/opt/install/hadoop-2.5.2/journal</value> </property> <!-- 开启NameNode故障时自动切换 --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 配置失败自动切换实现方式 --> <property> <name>dfs.client.failover.proxy.provider.ns</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> </property> <!-- 配置隔离机制,如果ssh是默认22端口,value直接写sshfence即可 --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> </property> <!-- 使用隔离机制时需要ssh免登陆 --> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/root/.ssh/id_rsa</value> </property> 2.3 yarn-env.sh添加如下内容 export JAVA_HOME=/usr/java/jdk1.7.0_71 首先启动各个节点的Zookeeper,在各个节点上执行以下命令: bin/zkServer.sh start 在某一个namenode节点执行如下命令,创建命名空间 bin/hdfs zkfc -formatZK 在每个journalnode节点用如下命令启动journalnode sbin/hadoop-daemon.sh start journalnode 在主namenode节点格式化namenode和journalnode目录 bin/hdfs namenode -format ns 在主namenode节点启动namenode进程 sbin/hadoop-daemon.sh start namenode 在备namenode节点执行第一行命令,这个是把备namenode节点的目录格式化并把元数据从主namenode节点copy过来,并且这个命令不会把journalnode目录再格式化了!然后用第二个命令启动备namenode进程! bin/hdfs namenode -bootstrapStandby sbin/hadoop-daemon.sh start namenode 在两个namenode节点都执行以下命令 sbin/hadoop-daemon.sh start zkfc 在所有datanode节点都执行以下命令启动datanode sbin/hadoop-daemon.sh start datanode 日常启停命令 sbin/start-dfs.sh sbin/stop-dfs.sh
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。