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

[经验分享] 完全分布模式hadoop集群安装配置之一安装第一个节点

[复制链接]

尚未签到

发表于 2015-7-11 08:49:49 | 显示全部楼层 |阅读模式
  本系列文章讲述搭建完全分布模式hadoop的安装配置过程,还将讲述完全分布式模式的一些基本操作。准备采用先单机调通再加入节点的方式。本文只讲述单节点的安装和配置。
  
  1. Namenode和JobTracker的安装
  
  这是完全分布模式集群的第一台,也是很关键的一台。采用VMWARE虚拟的Ubuntu Linux 11.10  server版。安装Linux非本文重点就不说了。 默认建立了一个用户叫abc, 其有sudo权限。root的口令是随机的一个口令,只能用sudo命令暂时提升到root权限。为保险起见,安装完系统第一件事就是改root密码。用sudo passwd root,系统不会问你要原口令,直接输入新口令两遍即可。有root口令在手,后面万一操作错误不至于束手无策。
  
  1.1 安装JDK1.6
  
  有个命令可以很快地安装jdk,   sudo apt-get install sun-java6-jdk, 这是ubuntu系统本身一个机制。当时试了一下,没有成功,记得说是找不到包。不知道啥原因,要不网络不行,要不包名不对了。就放弃了。只好找另外的办法。
  到Oracle网站上找到JDK 1.6的目前最新版本 JDK 1.6.0_31. 得到其下载链接:
DSC0000.jpg
DSC0001.jpg
  选这个是因为它是32位的JDK, Ubuntu Linux选的是32位的。JDK所以也选32位。点“Accept License Agreement", 右键点到"jdk-6u31-linux-i586.bin"上,在属性中得到其链接:http://download.oracle.com/otn-pub/java/jdk/6u31-b04/jdk-6u31-linux-i586.bin,  再回到虚拟机中,用abc登录,输入命令:
  wget http://download.oracle.com/otn-pub/java/jdk/6u31-b04/jdk-6u31-linux-i586.bin
  这下载需要一段时间。等下载完成后,在/home/abc/下就有一个jdk-6u31-linux-i586.bin的文件。
  sudo mkdir /usr/lib/jvm
  cd /usr/lib/jvm
  sudo mkdir java
  cd java
  sudo cp /home/abc/jdk-6u31-linux-i586.bin  .
  sudo chmod 777 jdk-6u31-linux-i586.bin
  ./jdk-6u31-linux-i586.bin
  这样就开始安装jdk了。一会就安装好了。
  sudo vi /etc/environment
  将此文件做如下修改:
  在PATH那一行后面添加   :/usr/lib/jvm/java/jdk1.6.0_31/bin   注意/usr前面那个冒号是需要的。
  再加这两行:
  CLASSPATH=.:/usr/lib/jvm/java/jdk1.6.0_31/lib
  JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_31
  保存
  说明:有的地方说linux 系统本身会默认安装一些包如openjdk包,就会造成多个jvm共存。还需要用update -alternatives 命令去选择默认的jvm到刚安装的jdk目录。
  发现Ubuntu Linux11.10 server版默认没有装其他的任何jdk包,在此之前连java命令都无法运行,所以不需要运行update-alternatives 命令了。
  sudo reboot
  
  1.2 建立hadoop用户和hadoop组
  
  重启系统后,登录abc用户
  sudo addgroup hadoop
  sudo adduser --ingroup hadoop hadoop
  输入新口令两遍,然后是一些无关紧要的信息,一路回车直到完成命令。hadoop用户就建立了。
  su
  输入root的口令,成功后就换成了root用户
  继续输入命令:
  chmod u+w /etc/sudoers
  vi /etc/sudoers
  在此行:root    ALL=(ALL:ALL) ALL  后加一行:
  hadoop  ALL=(ALL:ALL) ALL
  意思就是允许hadoop用户sudo运行任何命令
  保存
  chmod u-w  /etc/sudoers
  这是把sudoers文件的权限改回440, 即root用户通常也只读。Ubuntu linux的sudo 命令运行时会检查这个文件权限是否440, 如果不是440, sudo命令都没有办法工作。所以改完之后一定要改回原来的440.
  作为root用户的任务就结束了,输入exit退出root用户
  再输入exit退出abc用户
  
  1.3 配置SSH Key以便hadoop用户无密码登录集群
  
  再用刚刚建立的用户hadoop来登录,
  sudo apt-get install ssh
  ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  要用命令ssh localhost来测试一下ssh是否工作,如果不用输入口令那就正确。
  
  1.4 检查主机名,修改/etc/hostname, /etc/hosts
  
  sudo vi /etc/hostname
  检查系统自动分配的主机名是否合适,不合适的话改成一个有意义的名字,如namenode,保存
  ifconfig
  看看当前IP,记录下来。
  sudo vi /etc/hosts
  那些127开头的两行都不用动,
  在后面加刚刚记录的IP 和新改的主机名,保存
  这个很重要。不正确地做的话,可能后面jobtracker的reduce步骤运行不正常。
  
  1.5 安装hadoop包
  
  从http://hadoop.apache.org/common/releases.html找一个当前的stable的版本。找到了0.20.203.0版本,找一个比较近的镜像站点。wget下载此包到/home/hadoop/目录下。
  继续以hadoop用户输入命令
  sudo mkdir /usr/local/hadoop
  sudo chown hadoop:hadoop /usr/local/hadoop
  cp /home/hadoop/hadoop-0.20.203.0rc1.tar.gz  /usr/local/hadoop
  cd /usr/local/hadoop
  tar zxvf hadoop-0.20.203.0rc1.tar.gz
  cd hadoop-0.20.203.0/conf
  vi hadoop-env.sh
  就把这行改成这样:export JAVA_HOME=/usr/lib/jvm/java/jdk1.6.0_31/, 其他都可以暂时不动。
  vi core-site.xml
  里面是空的,将其内容改成:
  

  fs.default.name
  hdfs://namenode:9000


  hadoop.tmp.dir
  /home/hadoop/tmp


  vi hdfs-site.xml, 加入:
  
  fs.default.name
  hdfs://namenode:9000


  hadoop.tmp.dir
  /home/hadoop/tmp


  dfs.replication
  1

  这个dfs.replication表示数据复制的份数,生产环境就不可能是1了,当然是要大于1了。
  vi mapred-site.xml,将其改成:
  
  fs.default.name
  hdfs://namenode:9000


  hadoop.tmp.dir
  /home/hadoop/tmp


  dfs.replication
  1


  mapred.job.tracker
  namenode:9001

  注意这里jobtracker和namenode选用了同一个主机,即在同一台机器上,生产环境是可以namenode和jobtracker分开成两个机器的。
  
  都改完成了。就修改一下PATH变量:
  sudo vi /etc/environment
  在PATH那一行后面再加上   :/usr/local/hadoop/hadoop-0.20.203.0/bin   保存, 这是为了能随时可用hadoop的命令。
  sudo reboot重启
  
  1.6  格式化hdfs
  再用hadoop用户登录,
  hadoop namenode -format
  
  1.7 启动此单机配置及验证
  start-all.sh
  此hadoop单个节点的就启动了。
  验证可以用:
  jps
  出这样的结果就对了:
  3156 NameNode
2743 SecondaryNameNode
3447 Jps
2807 JobTracker
2909 TaskTracker
2638 DataNode
  再hadoop dfsadmin -report
  能显示出hdfs的信息
  
  访问http://namenode:50070/ 显示hdfs的信息
  还有http://namenode:50030/ 显示jobtracker的信息
  再可以用一些常用命令将文件放到hdfs上,如
  hadoop fs -put test.txt /user/hadoop/test.text
  以上可以证明hdfs基本正常.下面要验证jobtracker和taskTracker是否正常,准备运行hadoop example中的wordcount程序。
  cd /usr/local/hadoop/hadoop/hadoop-0.20.203.0
  hadoop fs -put conf input
  将conf目录拷贝到hdfs
  hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output
  得到大概这样的结果就对了, 即map增长到100%, reduce也增长到100%,
  12/03/05 07:52:09 INFO input.FileInputFormat: Total input paths to process : 15
12/03/05 07:52:09 INFO mapred.JobClient: Running job: job_201203050735_0001
12/03/05 07:52:10 INFO mapred.JobClient:  map 0% reduce 0%
12/03/05 07:52:24 INFO mapred.JobClient:  map 13% reduce 0%
12/03/05 07:52:25 INFO mapred.JobClient:  map 26% reduce 0%
12/03/05 07:52:30 INFO mapred.JobClient:  map 40% reduce 0%
12/03/05 07:52:31 INFO mapred.JobClient:  map 53% reduce 0%
12/03/05 07:52:36 INFO mapred.JobClient:  map 66% reduce 13%
12/03/05 07:52:37 INFO mapred.JobClient:  map 80% reduce 13%
12/03/05 07:52:39 INFO mapred.JobClient:  map 80% reduce 17%
12/03/05 07:52:42 INFO mapred.JobClient:  map 100% reduce 17%
12/03/05 07:52:51 INFO mapred.JobClient:  map 100% reduce 100%
12/03/05 07:52:56 INFO mapred.JobClient: Job complete: job_201203050735_0001
12/03/05 07:52:56 INFO mapred.JobClient: Counters: 26
12/03/05 07:52:56 INFO mapred.JobClient:   Job Counters
12/03/05 07:52:56 INFO mapred.JobClient:     Launched reduce tasks=1
12/03/05 07:52:56 INFO mapred.JobClient:     SLOTS_MILLIS_MAPS=68532
12/03/05 07:52:56 INFO mapred.JobClient:     Total time spent by all reduces waiting after reserving slots (ms)=0
12/03/05 07:52:56 INFO mapred.JobClient:     Total time spent by all maps waiting after reserving slots (ms)=0
12/03/05 07:52:56 INFO mapred.JobClient:     Rack-local map tasks=7
12/03/05 07:52:56 INFO mapred.JobClient:     Launched map tasks=15
12/03/05 07:52:56 INFO mapred.JobClient:     Data-local map tasks=8
12/03/05 07:52:56 INFO mapred.JobClient:     SLOTS_MILLIS_REDUCES=25151
12/03/05 07:52:56 INFO mapred.JobClient:   File Output Format Counters
12/03/05 07:52:56 INFO mapred.JobClient:     Bytes Written=14249
12/03/05 07:52:56 INFO mapred.JobClient:   FileSystemCounters
12/03/05 07:52:56 INFO mapred.JobClient:     FILE_BYTES_READ=21493
12/03/05 07:52:56 INFO mapred.JobClient:     HDFS_BYTES_READ=27707
12/03/05 07:52:56 INFO mapred.JobClient:     FILE_BYTES_WRITTEN=384596
12/03/05 07:52:56 INFO mapred.JobClient:     HDFS_BYTES_WRITTEN=14249
12/03/05 07:52:56 INFO mapred.JobClient:   File Input Format Counters
12/03/05 07:52:56 INFO mapred.JobClient:     Bytes Read=25869
12/03/05 07:52:56 INFO mapred.JobClient:   Map-Reduce Framework
12/03/05 07:52:56 INFO mapred.JobClient:     Reduce input groups=754
12/03/05 07:52:56 INFO mapred.JobClient:     Map output materialized bytes=21577
12/03/05 07:52:56 INFO mapred.JobClient:     Combine output records=1047
12/03/05 07:52:56 INFO mapred.JobClient:     Map input records=734
12/03/05 07:52:56 INFO mapred.JobClient:     Reduce shuffle bytes=21577
12/03/05 07:52:56 INFO mapred.JobClient:     Reduce output records=754
12/03/05 07:52:56 INFO mapred.JobClient:     Spilled Records=2094
12/03/05 07:52:56 INFO mapred.JobClient:     Map output bytes=34601
12/03/05 07:52:56 INFO mapred.JobClient:     Combine input records=2526
12/03/05 07:52:56 INFO mapred.JobClient:     Map output records=2526
12/03/05 07:52:56 INFO mapred.JobClient:     SPLIT_RAW_BYTES=1838
12/03/05 07:52:56 INFO mapred.JobClient:     Reduce input records=1047
  最后再hadoop fs -get output /home/hadoop   将output目录取到本地来查看结果。
  
  1.8  单机的停止
  stop-all.sh
  
  1.9 遇到的问题
  Too many fetch-failures问题
  运行wordcount示例时,reduce任务无法达到100%总是卡住在0%.
  分析log里面有Too many fetch-failures信息,上网查了一下,有人说要将IP地址还有hostname都要写到/etc/hosts里面,才行。
  照着做了一下,发现还是不行。正头大之际,经过不懈努力,终于找到症结:原来ubuntu linux给指定的一个主机名是192,这个主机名192已经成了hdfs的标准配置了。即使本人后来将主机名改成有意义的名字,这个顺序已经不对了,因为发现logs目录下的每个任务的配置文件xml文件还是用的老主机名,新改的主机名根本就没有用上,而这个老主机名存在哪里呢,后来发现这个主机名存在hdfs文件系统的那些文件里。所以需要从1.4步开始到1.8步重新做一遍。如此重新做了一遍以后,运行wordcount示例程序就成功了。
  
  本人回答过qq群里同仁的问题:
  运行hadoop namenode -format报main函数找不到
  回答:CLASSPATH设置不对。
  
  单机安装配置就讲这么多。本文就说到这里了。本文之后的文章将说到如何将新的hadoop节点加入,让多个节点成为一个完全分步式的集群。
  如果觉得本文有帮助,请帮忙点推荐。谢谢

运维网声明 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-85366-1-1.html 上篇帖子: Hadoop配置和使用问题记录 下篇帖子: 初学Hadoop之WordCount词频统计
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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