完全分布模式hadoop集群安装配置之一安装第一个节点
本系列文章讲述搭建完全分布模式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. 得到其下载链接:
选这个是因为它是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
里面是空的,将其内容改成:
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
vi hdfs-site.xml, 加入:
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
这个dfs.replication表示数据复制的份数,生产环境就不可能是1了,当然是要大于1了。
vi mapred-site.xml,将其改成:
<property>
<name>fs.default.name</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>mapred.job.tracker</name>
<value>namenode:9001</value>
</property>
注意这里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节点加入,让多个节点成为一个完全分步式的集群。
如果觉得本文有帮助,请帮忙点推荐。谢谢

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
Safely Dumping Hashes from Live Domain Controllers
UPDATE: See http://pauldotcom.com/2011/12/safely-dumping-hashes-now-avai.html for updated information. Recently, Mark Baggett and I presented material on some research we've been conducting for several months in a talk called "Lurking in the Shadows". The basis of the talk and the purpose for our research is that there are some really cool things you can do with Volume Shadow Copies in modern Windows Operating Systems. Our talk takes the approach of using Shadow Copies for hiding malware on Wind...
- 下一篇
完全分布模式hadoop集群安装配置之二 添加新节点组成分布式集群
前文说到如何搭建集群中第一个节点,这篇将说到如何向集群添加节点。这篇是基于前文的,没有看过前文的可以参考此链接:http://www.cnblogs.com/mikelij/archive/2012/03/06/2380937.html 2 向集群添加节点 前文已经建立了一个节点的hadoop集群。现在要做的添加节点。安装JDK, 创建hadoop用户等见前文。这里就不重复了。 2.1 检查主机名,修改/etc/hostname, /etc/hosts 新节点需要在这个集群里叫一个名字,给此节点命名,比如slavenode1, slavenode2, etc.集群里新加入的服务器都需要在/etc/hostname中改名,将规定的服务器名放在/etc/hostname文件中。然后将已有服务器上的/etc/hosts拷贝过来。再加上此新节点的主机名。然后再复制到群里每一个服务器中。即所有集群中服务器的/etc/hosts文件要一样。 2.2 配置SSH Key以便hadoop用户无密码登录集群 与前文不同的是,此处只需要将之前的节点产生的ssh key等拷贝过来就可以了。用...
相关文章
文章评论
共有0条评论来说两句吧...