hdfs--hadoop--双namenode三datanode-创新互联
前提:搭建zookeeper集群、java环境、无秘互通
注意:文中加粗部分表示需要按实际情况修改的部分
zookeeper可以参考:zookeeper传送门
下载安装包
https://mirrors.tuna.tsinghua.edu.cn/apache/ 是官网提供的安装包下载网站之一。
结构
主机名 | study | centos156 | client |
---|---|---|---|
IP | 192.168.233.155 | 192.168.233.156 | 192.168.233.158 |
服务1 | zookeeper 1 | zookeeper 2 | zookeeper 3 |
服务2 | namenode | namenode | |
服务3 | datanode | datanode | datanode |
服务4 | journalnode | journalnode | |
服务5 | nodemanager | nodemanager | nodemanager |
服务6 | zkfc | zkfc | |
服务7 | ResourceManager |
服务简介:
zookeeper:分布式应用程序协调服务。
namenode:管理服务。管理元数据,维护目录树,响应请求。
datanode:hadoop中存储数据。
journalnode:实现namenode数据共享,保持数据的一致性。
ResourceManager:yarn集群中资源的统一管理和分配
nodemanager:ResourceManager在每台机器上的代理
参考文档:hadoop介绍
注:zookeeper和hadoop可以不装在一个台机器上,只需配置文件指定即可
开始安装
主节点1-study
检查java环境
java -version
如果能够显示版本说明jdk安装ok
#下载文件(可能因为版本更新生效)
cd /tmp
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.5/hadoop-2.7.5.tar.gz
#解压文件
tar axf hadoop-2.7.5/hadoop-2.7.5.tar.gz -C /usr/local
#重命名,方便管理配置
cd /usr/local
rename hadoop-2.7.5 hadoop hadoop-2.7.5
#修改环境变量
vim /etc/profile
在文件最后添加如下内容
export HADOOP_HOME=/usr/local/hadoop
export PATH=${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:${PATH}
export HADOOP_MAPARED_HOME=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}
export YARN_HOME=${HADOOP_HOME}
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export LD_LIBRARY_PATH=${HADOOP_HOME}/lib/native/:${LD_LIBRARY_PATH}
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native
export HADOOP_OPTS="-Djava.library.path=${HADOOP_HOME}/lib/native"
#使其生效
source /etc/profile
#创建文件存放目录
mkdir -p /usr/local/hadoop/{name,data,tmp,journal}
#修改配置文件
cd $HADOOP_HOME/etc/hadoop
#修改slaves文件,指定slave服务器
vim slaves
study
centos156
client
#修改core-site.xml,指定hdfs集群,临时文件目录,zookeeper等
vim core-site.xml
fs.defaultFS hdfs://hadoop HDFS的逻辑服务名,hadoop位置可以写成任何东西 hadoop.tmp.dir /usr/local/hadoop/tmp hadoop临时文件存放目录,也可写作file:/usr/local/hadoop/tmp
io.file.buffer.size 4096 指定执行文件IO缓存区大小,机器好可以设置大些 ha.zookeeper.quorum study:2181,centos156:2181,client:2181 指定zookeeper地址
参考文档
vim hdfs-site.xml
dfs.nameservices hadoop HDFS NN的逻辑名称,需要与core-site.xml中的HDFS的逻辑服务名一致,这里使用上面的hadoop dfs.ha.namenodes.hadoop study,centos156 hadoop逻辑名namenode节点列表,hadoop对应逻辑名 dfs.namenode.rpc-address.hadoop.study study:9000 hadoop中study的rpc通信地址 dfs.namenode.http-address.hadoop.study study:50070 hadoop中study的http通信地址 dfs.namenode.rpc-address.hadoop.centos156 centos156:9000 hadoop中centos156的rpc通信地址 dfs.namenode.http-address.hadoop.centos156 centos156:50070 hadoop中centos156的http通信地址 dfs.namenode.shared.edits.dir qjournal://study:8485;centos156:8485;client:8485/hadoop journalNode 的 URI 地址,活动的namenode会将edit log写入journalNode dfs.journalnode.edits.dir /usr/local/hadoop/journal 用于存放 editlog 和其他状态信息的目录 dfs.ha.automatic-failover.enabled true 启动自动failover,详情请看参考文档 dfs.client.failover.proxy.provider.hadoop org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider 实现客户端与 active NameNode 进行交互的 Java类 dfs.ha.fencing.methods sshfence 解决HA集群脑裂问题,只允许一个nn写数据 dfs.ha.fencing.ssh.private-key-files /root/.ssh/id_rsa the location stored ssh key,指定用户密匙,建议不要用root,用于故障转移,可以不设置 dfs.ha.fencing.ssh.connect-timeout 5000 ssh连接超时时间,上面秘钥没设置这个也可以不设置 dfs.namenode.name.dir file:/usr/local/hadoop/name namenode数据存放目录 dfs.datanode.data.dir file:/usr/local/hadoop/data datanode数据存放目录 dfs.replication 2 client参数,node level参数,指定一个文件在hdfs中有几个副本,设置2或3即可,不能错过datanode节点数 dfs.webhdfs.enabled true 允许webhdfs,用于数据读取
webhdfs详解
vim mapred-site.xml
mapreduce.framework.name yarn mapreduce框架,一般用yarn
MapReduce详解
vim yarn-site.xml
yarn.nodemanager.aux-services mapreduce_shuffle nodemanager启动时加载services的方式为mapreduce分配 yarn.nodemanager.aux-services.mapreduce_shuffle.class org.apache.hadoop.mapred.ShuffleHandler 实现mapreduce_shuffle的java类 yarn.resourcemanager.hostname study resourcemanager节点列表,一个namenode上有即可
修改脚本文件中的JAVA_HOME
vim hadoop-env.sh
export JAVA_HOME=/usr/local/jdk
注意 export HADOOP_SSH_OPTS是自动hadoop服务ssh使用端口,如果你没有使用默认的22号端口,请修改该选项,否则HA无法实现
vim yarn-env.sh
JAVA_HOME=/usr/local/jdk
主节点二-centos156
#将study节点上的hadoop文件拷贝到centos156的/usr/local目录下
scp -r study:/usr/local/hadoop /usr/local
#修改环境变量
scp -r study:/etc/profile /etc/
source /etc/profile
#如果你使用的是其他的用户执行hadoop,就需要修改hadoop文件的属主等信息
从节点-client
#与 主节点二-centos156操作一样
scp -r study:/usr/local/hadoop /usr/local
scp -r study:/etc/profile /etc/
source /etc/profile
启动hadoop集群
第一次运行hadoop是需要格式化数据,启动会比较麻烦,之后的启动只需要start-all.sh停止stop-all.sh
前提:zookeeper状态正常,jdk状态正常,环境变量设置正常
主节点1-study
#创建命名空间
hdfs zkfc -formatZK
#启动journalnode
hadoop-daemon.sh start journalnode(最好三个节点一起启动)
#格式化namenode
hdfs namenode -format hadoop
#启动namenode
hadoop-daemon.sh start namenode
#启动zfkc
hadoop-daemon.sh start zkfc
主节点二-centos156
#启动journalnode
hadoop-daemon.sh start journalnode
#从hdfs namenode -bootstrapStandby获取格式化后的元数据
hdfs namenode -bootstrapStandby
#启动namenode
hadoop-daemon.sh start namenode
#启动zfkc
hadoop-daemon.sh start zkfc
从节点-client
#启动journalnode
hadoop-daemon.sh start journalnode
上面三个节点命令运行完成后重启hadoop集群
关闭集群
stop-all.sh
启动集群
start-all.sh
访问状态页面
http://192.168.233.155:50070/dfshealth.html#tab-overview
http://192.168.233.156:50070/dfshealth.html#tab-overview
页面上的datanodes可以看到datanode的状态,utilities可以查看文件和日志
hadoop常用命令
关闭集群 stop-all.sh
启动集群 start-all.sh
单独启动namenode hadoop-daemon.sh start namenode
单独启动datanode hadoop-daemon.sh start datanode
单独启动journalnode hadoop-daemon.sh start journalnode
单独启动zkfc hadoop-daemon.sh start zkfc
手动转移活动namenode hdfs haadmin -transitionToActive --forcemanual study
查看/下面的文件 hadoop fs -ls /
上传文件到hadoop hadoop fs -put <原文件> <存放路径>
i.e. hadoop fs -put /etc/passwd /
hadoop中创建命令 hadoop fs –mkdir <绝对路径>
i.e. hadoop fs -mkdir /tmp
创建空文件 hadoop fs -touchz <文件绝对路径>
i.e. hadoop fs -touchz /tmp/hello
查看文件 hadoop fs -cat <文件绝对路径>
i.e. hadoop fs -cat /passwd
移动或重命名 hadoop fs -mv <文件绝对路径> <新文件绝对路径\名称>
下载hadoop中的文件或目录到本地
hadoop fs -get <文件绝对路径> <本地路径>
i.e. hadoop fs -get /passwd /tmp
修改文件权限 hadoop fs -chmod [-R] <文件绝对路径>
i.e. hadoop fs -chmod 777 /passwd
删除文件 hadoop fs -rm <文件绝对路径>
删除目录 hadoop fs -rm -r <目录绝对路径>
hadoop数据迁移
数据备份
mkdir /tmp/hadoop
chmod 777 /tmp/hadoop
hadoop fs -copyToLocal hdfs://study:9000/ /tmp/hadoop
数据恢复
先用u盘或者其他的任何方式将文件传输到目标机器
hadoop fs -copyFromLocal /tmp/hadoop hdfs://study:9000/
hadoop fs -ls /
报错处理
master: Host key verification failed.
请检查authorized_keys 和known_hosts文件是是否有该主机的信息,ssh 主机名能不能连上
hadoop集群一个主节点namenode挂掉之后启动异常
2018-01-17 08:53:24,751 FATAL [hadoop1:16000.activeMasterManager] master.HMaster: Failed to become active master
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby
at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:87)
at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:1774)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1313)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:3850)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:1011)
at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.getFileInfo(ClientNamenodeProtocolServerSideTranslatorPB.java:843)
at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)
处理过程:
查看状态(看web页面)发现study的状态为standby,centos156状态为active
如果有一个active这集群状态依然是正常的,如果两个都是standby则为异常。
状态不正常可能是数据异常造成的,namenode挂的时间长了数据不同步,处理方法一、从centos 156节点将数据同步过来,方法二、删除所有节点上所有hadoop的数据,删除zk中hadoop-ha目录
本次使用的是方法二
所有节点删除${HADOOP_HOME}下name、data、logs、tmp目录下的所有文件
删除zk中的数据
zkCli.sh
ls /
rmr /hadoop-ha
quit
重新生成数据
主节点1-study
#创建命名空间
hdfs zkfc -formatZK
#启动journalnode
hadoop-daemon.sh start journalnode(最好三个节点一起启动)
#格式化namenode
hdfs namenode -format hadoop
#启动namenode
hadoop-daemon.sh start namenode
#启动zfkc
hadoop-daemon.sh start zkfc
主节点二-centos156
#启动journalnode
hadoop-daemon.sh start journalnode
#从hdfs namenode -bootstrapStandby获取格式化后的元数据
hdfs namenode -bootstrapStandby
#启动namenode
hadoop-daemon.sh start namenode
#启动zfkc
hadoop-daemon.sh start zkfc
从节点-client
#启动journalnode
hadoop-daemon.sh start journalnode
查看状态肯定是active,都是新的了
!!!!注意!!! 重新构建hadoop数据会导致hbase无法获取zookeeper中的数据,暂时不知道如何恢复,只能删除zookeeper中的/hbase/table表
参考
hadoop介绍
配置文件参考文档
webhdfs详解
hadoop HDFS常用文件操作命令
hadoop fs管理文件权限:https://www.cnblogs.com/linn/p/5526071.html
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享标题:hdfs--hadoop--双namenode三datanode-创新互联
URL链接:http://ybzwz.com/article/dhdegd.html