设为首页 收藏本站
查看: 1464|回复: 0

[经验分享] hdfs--hadoop--双namenode三datanode

[复制链接]

尚未签到

发表于 2018-10-28 14:52:40 | 显示全部楼层 |阅读模式
  前提:搭建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 axfhadoop-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
DSC0000.jpg

DSC0001.jpg

DSC0002.jpg

  http://192.168.233.156:50070/dfshealth.html#tab-overview
DSC0003.jpg

  页面上的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 /


报错处理
DSC0004.jpg

  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
DSC0005.jpg

  重新生成数据
  主节点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



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627612-1-1.html 上篇帖子: 安装hadoop集群(Multi Cluster) 下篇帖子: Determine Hadoop Memory Configuration Settings-candon123
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表