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

[经验分享] hadoop/hdfs-12227658

[复制链接]

尚未签到

发表于 2018-10-29 09:36:30 | 显示全部楼层 |阅读模式
  hadoop/hdfs
  首先hadoop是apache基金会用java语言实现的开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。
  hadoop/hdfs和mfs都是分布式文件系统,二者的比较如下
  1、hdfs和mfs都是类似goolefs的实现方式,即一个master+多个chunkserver构成的集群
  2、都存在master单点故障问题
  3、都支持在线扩容
  4、都是处理海量数据的,但对海量小文件处理乏力
  差异:
  1、hadoop基于java实现,mfs基于c++实现
  2、mfs提供的快照功能
  3、
  所以,首先要保证java平台能够正常运行,下载安装jdk原码薄,一般情况下将其解压放至/usr/local然后创建软连接。
  hadoop单机模式:
  [root@server1 local]# ln -s jdk1.7.0_79/ java
  进入/etc/profile下修改java路径(java_home,classpath,path)。
  export JAVA_HOME=/usr/local/java
  export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  export PATH=$PATH:$JAVA_HOME/bin
  source使配置文件生效。
  [root@server1 java]# source /etc/profile
  查看配置是否正确
  [root@server1 java]# echo $JAVA_HOME
  /usr/local/java
  [root@server1 java]# echo $CLASSPATH
  .:/usr/local/java/lib:/usr/local/java/jre/lib
  [root@server1 java]# echo $PATH
  /usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/java/bin:/usr/local/java/bin
  ***如果是配置文件错误导致无法使用系统命令,那么需要使用绝对路径来调用命令
  编写一个java小程序,测试java环境的正确性:
  [root@server1 java]# cat test.java
  class test
  {
  public static void main (String args[]){
  System.out.println("hello world ");
  }
  }
  [root@server1 java]# !jav
  javac test.java
  [root@server1 java]# java test
  hello world
  至此,java环境配置完成。
  hadoop/hdfs安装。
  [root@server1 hadoop]# tar -xf hadoop-2.7.3.tar.gz -C /usr/local/
  创建软连接:
  [root@server1 local]# ln -s hadoop-2.7.3/ hadoop
  默认情况下hadoop是运行在非分布式模式,在这种情况下,可以进行debug。
  尝试使用hdfs对数据进行统计:
  [root@server1 hadoop]# pwd
  /usr/local/hadoop
  $mkdir input
  $ cp etc/hadoop/*.xml input
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
  $ cat output/*
  [root@server1 hadoop]# cat output/*
  1dfsadmin
  1dfs.replication
  hdfs伪分布模式
  很多hadoop配置的模版在share/doc中都有,所以将其移到/var/www/html下,使用网页查看,以便修改配置文件:
  [root@server1 doc]# cp hadoop/ /var/www/html/ -r
  [root@server1 hadoop]# pwd
  /usr/local/hadoop/etc/hadoop
  [root@server1 hadoop]# vim core-site.xml
  
  
  fs.defaultFS
  hdfs://172.25.33.1:9000
  namenode IP也可以使用主机名,但最好要有解析。
  
  [root@server1 hadoop]# vim hdfs-site.xml
  
  
  dfs.replication
  1//分片数量,单机模式将其配置为1.
  
  
  [root@server1 hadoop]# vim hadoop-env.sh
  24 # The java implementation to use.
  25 export JAVA_HOME=/usr/local/java
  在启动hdfs时会使用ssh进行多次登陆,所以,设置ssh输入密码登陆。
  [root@server1 hadoop]# ssh-keygen //一路回车
  [root@server1 hadoop]# ssh-copy-id  172.25.33.1//将密钥分发给172.25.33.1,即刚才在core-site中设置的IP
  使用ssh 172.25.33.1可以无密码访问即为成功
  格式化namenode 节点
  [root@server1 hadoop]# bin/hdfs namenode -format
  启动hdfs
  [root@server1 hadoop]# sbin/start-dfs.sh
  使用jps查看本节点的资源信息
  [root@server1 hadoop]# jps
  2918 NameNode
  3011 DataNode
  3293 Jps
  3184 SecondaryNameNode
  此时可以通过网页的50070访问到关于hdfs的信息
  ***如果发现无法访问,并提示not found,检查本地的50070是否打开,然后清理/tmp/下的所有临时文件,再清空浏览器的缓存,再次访问。
  创建hdfs目录,以便于执行mapreduce工作。
  bin/hdfs dfs -mkdir /user
  bin/hdfs dfs -mkdir /user/root
  ***如果在这里没有创建hdfs目录,那么可能会出现没有这个目录的报错。
  项分布式系统中放一些东西
  bin/hdfs dfs -put etc/hadoop/  input
  运行mapreduce的一些测试方法:
  $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar grep input output 'dfs[a-z.]+'
  检测输出的结果,
  [root@server1 hadoop]# bin/hdfs dfs -get output output
  [root@server1 hadoop]# cat output/*
  6dfs.audit.logger
  4dfs.class
  3dfs.server.namenode.
  2dfs.period
  2dfs.audit.log.maxfilesize
  2dfs.audit.log.maxbackupindex
  1dfsmetrics.log
  1dfsadmin
  1dfs.servers
  1dfs.replication
  1dfs.file
  或直接执行:
  [root@server1 hadoop]# bin/hdfs dfs -cat output/*
  同时也可以在浏览器中查看结果是否成功
  使用bin/hdfs dfs 回车,会发现好多可以执行的命令。
  分布式hdfs
  停掉bin/stop-dfs.sh
  启动三台虚拟机:
  为三台虚拟机创建hadoop用户,uid=1000
  mv hadoop-2.7.3/ /home/hadoop/
  vim /etc/profile
  export JAVA_HOME=/home/hadoop/java
  export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
  export PATH=$PATH:$JAVA_HOME/bin
  source /etc/profile
  改变/home/hadoop/下的所有文件的所属主和所属组均为hadoop
  在2,3,4上均安装nfs-utils 实现/home/hadoop目录共享
  修改配置文件,将/home/hadoop共享出去
  vim /etc/exports
  /home/hadoop 172.25.33.0/24(rw,anonuid=1000,anongid=1000)
  为server1添加slaves
  [root@server1 hadoop]# pwd
  /home/hadoop/hadoop/etc/hadoop
  编辑slaves文件,添加要共享的主机IP
  172.25.33.3
  172.25.33.4
  启动nfs
  service nfs start
  并检查rpcbind and rpcidmapd 的状态
  如果二者的状态不在运行,那么,nfs可能无法启动
  将二者体起来
  在server1上执行showmount -e来查看自己的共享
  使用exports -v  输出自己的共享
  exportfs -v
  /shared       172.25.33.2/24(rw,wdelay,root_squash,no_subtree_check)
  /var/www/html/upload
  172.25.33.2/24(rw,wdelay,root_squash,no_subtree_check)
  /home/hadoop  172.25.33.0/24(rw,wdelay,root_squash,no_subtree_check,anonuid=1000,anongid=1000)
  在server2,3,4上挂在/home/hadoop /home/hadoop
  为2,3,4的hadoop用户设置免密码登陆
  为每个hadoop设置密码
  切换到hadoop用户,生成密钥:
  ssh-keygen
  然后将其分发出去:
  ssh-copy-id 172.25.33.2/3/4
  为每台机器添加java环境变量
  vim /etc/profile
  source /etc/profile
  将/home/hadoop目录中文件的属主属组改为hadoop
  编辑[root@server1 hadoop]# vim hdfs-site.xml
  将value 值改为2.
  使用hadoop格式化,启动hdfs
  使用jps查看发现
  [hadoop@server1 hadoop]$ jps
  17846 Jps
  17737 SecondaryNameNode
  17545 NameNode
  在本地没有了datanode,在3,4上看,发现数据节点已经传过来了。
  jps
  [hadoop@server3 ~]$ jps
  3005 DataNode
  3110 Jps
  此时可能有各种各样的原因导致各种错误,因此,如果出现某个节点无法启动,可以在hadoop/对应目录下有log/下边有各种日志,方便派错哦。
  此次错误主要是namenode无法启动,经过派错发现,50070端口被java已经占用,所以,果断一个killall - 9 java,弄死他,然后在从新格式化,启动,即OK ~
  创建hdfs执行目录:
  bin/hdfs dfs -mkdir /user
  bin/hdfs dfs -mkdir /user/hadoop
  bin/hdfs dfs -put etc/hadoop/ input
  bin/hdfs dfs -cat input/*
  在浏览器中同样可以看到
  使用bin/hdfs dfsadmin -report可以查看资源输出和占用情况。
  启动资源管理器:
  yarn
  yarn是hadoop的资源管理器,他的设计思想时将jobTracker拆分成了两个独立的服务,一个是全剧的资源管理器,ResourceManager和每个应用程序特有的ApplicationMaster
  ResourceManager负责整个系统的资源分配和管理,而AM负责单个应用程序的管理
  其总体上仍然是M/S结构。
  hdfs资源迁移:
  对新机器做根目录共享和挂在,启动datanode节点
  [hadoop@server5 hadoop]$ sbin/hadoop-daemon.sh start datanode
  在5上同样要有hosts解析,同时要有sshkey免密码钥匙
  在server1上执行bin/hdfs dfsadmin -report可以看到server5在节点中。
  在server1上,添加datanode控制文件:
  vim hdfs.site.xml
  
  
  dfs.replication
  2
  
  
  dfs.hosts.exclude
  /home/hadoop/hadoop/etc/hadoop/exludes
  
  
  添加控制资源信息
  [hadoop@server1 hadoop]$ vim /home/hadoop/hadoop/etc/hadoop/exludes
  172.25.33.3//对server3的资源进行操作。
  刷新资源节点:
  [hadoop@server1 hadoop]$ bin/hdfs dfsadmin -refreshNodes
  它会提示成功,但是,实际进行的资源转移正在进行。
  使用[hadoop@server1 hadoop]$ bin/hdfs dfsadmin -report
  查看资源变化状态。
  当资源进行后,使用
  [hadoop@server3 hadoop]$ sbin/hadoop-daemon.sh stop datanode
  停掉该节点的资源。
  使用bin/hdfs dfsadmin -report就会发现,资源3已经停止了。
  使用jps已经没有资源信息了。


运维网声明 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-627808-1-1.html 上篇帖子: Hadoop平台调度系统 下篇帖子: 简单的hadoop启动脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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