centos搭建hadoop集群装Hadoop软件,总是出现如下问题,这是为什么,怎么解决

CentOS X64编译安装hadoop教程
一、安装准备
1.1 安装protobuf
下载&/files/protobuf-2.5.0.tar.gz
编译安装protobuf前,需要先安装gcc、gcc-c++、make等编译所必须的工具,编译安装过程如下:
[root@hadoop01 ~]# tar xf protobuf-2.5.0.tar.gz
[root@hadoop01 ~]# cd protobuf-2.5.0
[root@hadoop01 protobuf-2.5.0]# ./configure --prefix=/usr/local/protobuf
[root@hadoop01 protobuf-2.5.0]# make &j4
[root@hadoop01 protobuf-2.5.0]# make& install
便完成后,还需添加库文件和可执行文件路径:
[root@hadoop01 protobuf-2.5.0]# vi /etc/ld.so.conf ##添加如下一行
include /usr/local/protobuf/lib
修改 /etc/profile ,添加如下一行:
export PATH=/usr/local/protobuf/bin:$PATH
重新登录后验证是否安装正确:
[root@hadoop01 ~]# protoc --version
libprotoc 2.5.0
1.2 安装maven
maven的编译容易出错,所以最简单的办法是直接使用通用二进制文件:
下载:/apache/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
[root@hadoop01 ~]# tar xf apache-maven-3.1.1-bin.tar.gz
[root@hadoop01 ~]# mv& apache-maven-3.1.1 /usr/local/
修改 /etc/profile ,添加如下一行:
export PATH=/usr/local/apache-maven-3.1.1/bin:$PATH
1.3 其他编译所需rpm包:
[root@hadoop01 ~]# yum -y install lzo-devel& zlib-devel& gcc autoconf automake libtool&& ncurses-devel openssl-devel
二、编译hadoop 2.2.0
2.1 下载源码:
[root@hadoop01 ~]# wget&/apache/hadoop/common/hadoop-2.2.0/hadoop-2.2.0-src.tar.gz
[root@hadoop01 ~]# tar -xf hadoop-2.2.0-src.tar.gz
2.2 编译:
[root@hadoop01 ~]# cd hadoop-2.2.0-src
[root@hadoop01 hadoop-2.2.0-src]# mvn package -Pdist,native -DskipTests &Dtarcd
过程很长,需要在线下载很多相关资源,耐心等待。我只遇到了下面两个问题,如果遇到其他问题,请网上搜索处理即可。
编译完成后,hadoop-dist/target/目录下生成有hadoop-2.2.0-tar.gz文件,这个就是我们要的东东,后继安装配置,参照前文:hadoop的安装&即可。
2.3 问题处理:
提示如下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:
[ERROR] /home/chuan/trunk/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[84,13] cannot access ponent.AbstractLifeCycle
[ERROR] class file for ponent.AbstractLifeCycle not found
参考官方说明:https://issues.apache.org/jira/browse/HADOOP-10110
解决办法,修改hadoop-common-project/hadoop-auth/pom.xml,添加如下10行:
&dependency&
&groupId&org.mortbay.jetty&/groupId&
&artifactId&jetty-util&/artifactId&
&scope&test&/scope&
&/dependency&
&dependency&
&groupId&org.mortbay.jetty&/groupId&
&artifactId&jetty&/artifactId&
&scope&test&/scope&
&/dependency&
提示如下错误:
[ERROR] Failed to execute goal org.apache.hadoop:hadoop-maven-plugins:2.2.0:protoc (compile-protoc) on project hadoop-common: org.apache.maven.plugin.MojoExecutionException: &protoc &version& did not return a version -& [Help 1]
检查protobuf安装是否正确,参考1.1部分
标签(Tag):
------分隔线----------------------------
------分隔线----------------------------CentOS下Hadoop伪分布模式安装
CentOS下Hadoop伪分布模式安装
&&&一. 前言&&&&&&&伪分布式模式是在单机上模拟分布式,单机上的分布式并不是真正的伪分布式,而是使用线程模拟分布式。本身是无法区分伪分布式和分布式的,两种配置也很相似,唯一不同的地方是伪分布式是在单机器上配置,数据节点和名字节点均是一个机器。&现在很多初学者根本不具备搭建完全分布式集群的硬件环境,大多都是在单机下进行学习和实验。&下面将我在安装期间遇到的问题和解决方法记录下来,和网友共勉。本人当时是在Linux Cent OS 6.3下搭建成功Hadoop伪分布式测试环境。二. 环境搭建搭建测试环境所需的软件包括:jdk-6u13-linux-i586.bin&、hadoop-1.0.1.tar.gz。测试服务器操作系统Linux Cent OS 6.3。1、JDK安装及Java环境变量的配置说明:1.CentOS默认情况下,会安装OpenOffice之类的软件,这些软件需要Java的支持,所以系统默认会安装JDK的环境,若需要特定的Java环境,最好将默认的JDK彻底删除;2.查看默认的JDK命令:java -version3.但是如果先删除默认再装新的JDK,则与之相关的软件比如openoffice等也会随之删除,所以,应该先装新的jdk再卸系统默认自带的jdk。***卸载系统自带原JDK的方法示例:(注意,此操作应该在新jdk安装完毕后再执行)终端输入,查看gcj的版本号:rpm -qa|grep &jdk得到结果:jdk-1.7.0_04-fcs.x86_64java-1.6.0-openjdk-1.6.0.0-1.49.1.11.4.el6_3.x86_64终端输入,卸载:yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.49.1.11.4.el6_3.x86_64等待系统自动卸载,最终终端显示&Complete,卸载完成&1.1 JDK安装root 用户登陆,使用命令mkdir /usr/program新建目录/usr/program&,下载 JDK 安装包jdk-6u13-linux-i586.bin,将其复制到目录/usr/program下,用cd命令进入该目录,执行命令“./ jdk-6u13-linux-i586.bin”,命令运行完毕即安装完成,将在目录下生成文件夹/jdk1.6.0_13,此即为jdk被成功安装到目录:/usr/program/jdk1.6.0_13下。1.2 java环境变量配置root 用户登陆,命令行中执行命令“vi /etc/profile”,并加入以下内容,配置环境变量(注意/etc/profile 这个文件很重要,后面&Hadoop&的配置还会用到)。# set java environment&& export JAVA_HOME=/usr/program/jdk1.6.0_13&& export JRE_HOME=/usr/program/jdk1.6.0_13/jre&& export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib&& export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH在vi编辑器增加以上内容后保存退出,并执行以下命令使配置生效!#chmod &+x& /etc/profile ;增加执行权限#source& /etc/profile;使配置生效!配置完毕后,在命令行中输入:java -version,如出现下列信息说明java环境安装成功。java version "1.6.0_13"Java(TM) SE Runtime Environment (build 1.6.0_13-b03)Java HotSpot(TM) Server VM (build 16.3-b01, mixed mode)2、SSH无密码验证配置注:Hadoop 需要使用SSH 协议,namenode 将使用SSH 协议启动 namenode和datanode 进程,伪分布式模式数据节点和名称节点均是本身,所以配置 SSH localhost无密码验证登录就会方便很多。实际上,在H adoop的安装过程中,是否免密码登录是无关紧要的,但是如果不配置免密码登录,每次启动Hadoop都需要输入密码以登录到每台机器的DataNode上,考虑到一般的Hadoop集群动辄拥有数百或上千台机器,因此一般来说都会配置SSH的免密码登录!在此我们选择配置SSH为免密码登录模式!!!配置为可以免密码登录本机:首先查看在“当前用户”文件夹下是否存在.ssh&文件夹(注意ssh前面有“.”,这是一个隐藏文件夹)。输入命令查看此文件夹是否存在。一般来说,安装SSH时会自动在当前用户下创建这个隐藏文件夹,如果没有,可以手创建一个。下面的配置我是在root超级用户下进行的:[root@centos1 ~]# ls –a发现.ssh文件夹已经存在。接下来输入命令(注意下面命令中不是双引号,是两个单引号):方法一:用root用户登录,在root目录下执行如下命令:ssh-keygen -t rsa[root@mycentos ~]# ssh-keygen -t& rsaGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):&&&&按回车默认路径&&Created directory '/root/.ssh'.& &创建/root/.ssh目录&Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:c6:7e:57:59:0a:2d:85:49:23:cc:c4:58:ff:db:5b:38 root@master通过以上命令将在/root/.ssh/ 目录下生成id_rsa私钥和id_rsa.pub公钥。进入/root/.ssh目录在namenode节点下做如下配置:[root@master .ssh]# cat id_rsa.pub & authorized_keys配置完毕,可通过ssh 本机IP 测试是否需要密码登录。方法二、或者按照如下方式配置:生成签名文件:[root@centos1 ~]# ssh-keygen -t dsa -P ' ' –f& ~/.ssh/id_dsa解释一下,ssh-keygen代表生成秘钥; -t(注意区分大小写)表示指定生成的秘钥类型;dsa是dsa密钥认证的意思。即秘钥类型;-P用于提供密语;-f指定生成的秘钥文件。(其中~代表当前用户文件夹,如home/wade ),这条命令会在.ssh文件夹下创建id_dsa及id_dsa.pub两个文件,这是SSH的一对私钥和秘钥,类似于锁和钥匙。[root@centos1 ~]# cat ~/.ssh/id_dsa.pub && ~/.ssh/authorized_keys这条命令用于把公钥加到用于认证的公钥文件中。这里的authorized_keys是用于认证的公钥文件。至此免密码登录本机已配置完毕,可通过ssh 本机IP 测试是否需要密码登录。操作如图所示:说明配置无密码登录成功!&3、&Hadoop配置下载 hadoop-1.0.1.tar.gz,将其拷贝到/usr/local/hadoop&目录下,然后在该目录/usr/local/hadoop下解压安装生成文件/hadoop-1.0.1(即为hadoop被安装到/usr/local/hadoop/ hadoop-1. 0.1文件夹下)。命令如下:& tar -zxvf& hadoop-1.0.1.tar.gz &&&&解压安装一步完成!&首先配置hadoop的环境变量命令“vi /etc/profile”#set hadoopexport HADOOP_HOME=/usr/hadoop/hadoop-1.0.1export PATH=$HADOOP_HOME/bin:$PATH命令:source& /etc/profile& 使刚配置的文件生效!3.1&& 进入/usr/local/hadoop/hadoop-1.0.1/conf,配置Hadoop配置文件3.1.1 配置hadoop-env.sh文件打开文件命令:vi hadoop-env.sh添加 # set java environment&&&&&&&&&&&& export JAVA_HOME=/usr/program/jdk1.6.0_13编辑后保存退出。3.1.2 配置core-site.xml[root@master conf]# vi core-site.xml&?xml version="1.0"?&&?xml-stylesheet type="text/xsl" href="configuration.xsl"?&&!-- Put site-specific property overrides in this file. --&&configuration&&& &property&&&&& &name&fs.default.name&/name&&&&& &value&hdfs://localhost:9000/&/value& 注:9000后面的“/&”不能少&& &/property&&& &&property&&&&&&& &name&hadoop.tmp.dir&/name&&&value&/usr/local/hadoop/hadoop-1.0.1/hadooptmp&/value&&&/property&&/configuration&说明:hadoop分布式文件系统的两个重要的目录结构,一个是namenode上名字空间的存放地方,一个是datanode数据块的存放地方,还有一些其他的文件存放地方,这些存放地方都是基于hadoop.tmp.dir目录的,比如namenode的名字空间存放地方就是&${hadoop.tmp.dir}/dfs/name, datanode数据块的存放地方就是${hadoop.tmp.dir}/dfs/data,所以设置好hadoop.tmp.dir目录后,其他的重要目录都是在这个目录下面,这是一个根目录。我设置的是&/usr/local/hadoop/hadoop-1.0.1/hadooptmp,当然这个目录必须是存在的。3.1.3 配置hdfs-site.xml[root@master conf]# vi& hdfs-site.xml&?xml version="1.0"?&&?xml-stylesheet type="text/xsl" href="configuration.xsl"?&&!-- Put site-specific property overrides in this file. --&&configuration&& &property&&&&& &name&dfs.replication&/name&&&&& &value&1&/value&& &/property&&/configuration&& &&3.1.4 配置mapred-site.xml[root@master conf]# vi mapred-site.xml&?xml version="1.0"?&&?xml-stylesheet type="text/xsl" href="configuration.xsl"?&&!-- Put site-specific property overrides in this file. --&&configuration&& &property&&&&& &name&mapred.job.tracker&/name&&&&& &value&localhost:9001&/value&& &/property&&/configuration&3.1.5&配置masters文件和slaves文件(一般此二文件的默认内容即为下述内容,无需重新配置)[root@master conf]# vi masterslocalhost[root@master conf]# vi slaveslocalhost注:因为在伪分布模式下,作为master的namenode与作为slave的datanode是同一台服务器,所以配置文件中的ip是一样的。&3.1.6&主机名和IP解析配置 (这一步非常重要!!!)[root@master ~]# vi /etc/hosts注:因为是在伪分布模式下,所以master与slave是一台机器3.1.7编辑主机名:[root@master ~]# vi /etc/hostname内容为:mycentos[root@master ~]# vi /etc/sysconfig/network说明:这三个位置的配置必须协调一致,Hadpoop才能正常工作!主机名的配置非常重要!我在上面的配置中没有修改主机名,还是用的mycentos这个主机名,这样容易出错,最好还是将主机名修改为master,在配置中使127.0.0.1 &master对应!&4、 Hadoop启动4.1 进入 /usr/local/hadoop/hadoop-1.0.1/bin目录下,格式化namenode[root@master bin]# hadoop namenode -format4.2启动hadoop所有进程在/usr/local/hadoop/hadoop-1. 0.1/bin 目录下,执行start-all.sh命令启动完成后,可用[root@master bin]# jps命令查看hadoop进程是否启动完全。正常情况下应该有如下进程:如下如所示:说明:1.secondaryname是namenode的一个备份,里面同样保存了名字空间和文件到文件块的map关系。建议运行在另外一台机器上,这样master死掉之后,还可以通过secondaryname所在的机器找回名字空间,和文件到文件块得map关系数据,恢复namenode。2.启动之后,在/usr/local/hadoop/hadoop-1.0.1/hadooptmp&下的dfs文件夹里会生成&data目录,这里面存放的是datanode上的数据块数据,因为笔者用的是单机,所以name&和&data&都在一个机器上,如果是集群的话,namenode所在的机器上只会有name文件夹,而datanode上只会有data文件夹。&在搭建过程中,在此环节出现的问题最多,经常出现启动进程不完整的情况,要么是datanode无法正常启动,就是namenode或是TaskTracker启动异常。解决的方式如下:1.&&&&&&&在Linux下关闭防火墙:使用service iptables stop命令;关闭hadoop:stop-all.sh1) 重启后生效开启: chkconfig iptables on关闭: chkconfig iptables off2) 即时生效,重启后失效开启: service iptables start关闭: service iptables stop需要说明的是对于Linux下的其它服务都可以用以上命令执行开启和关闭操作。在开启了防火墙时,做如下设置,开启相关端口,修改/etc/sysconfig/iptables 文件,添加以下内容:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT开始我使用的是service方式,但是总不好用,最后使用了chkconfig重启方式,生效!2.再次对namenode进行格式化:在/usr/local/hadoop/hadoop-1.0.1/bin 目录下执行hadoop namenode -format命令3.对服务器进行重启4.查看datanode或是namenode对应的日志文件,日志文件保存在/usr/local/hadoop/hadoop-1. 0.1/logs目录下。仔细查看日志报错的原因,(上次日志报错的信息忘记了)解决方法是进入/usr/local/hadoop/hdfs/name&和usr/local/hadoop/hdfs/data目录下,将目录下的文件全部删除。5.再次在/bin目录下用start-all.sh命令启动所有进程,通过以上的几个方法应该能解决进程启动不完全的问题了。6.在执行hadoop相关命令时候,总是出现如下提示:&分析:经过查看hadoop-1.0.1的hadoop和hadoop-config.sh脚本,发现对于HADDP_HOME做了判断解决方法如下:在hadoop-env.sh ,添加一个环境变量:export HADOOP_HOME_WARN_SUPPRESS=true&4.3& 查看集群状态&[root@master bin]# hadoop dfsadmin -report&4.4、在WEB页面下查看Hadoop工作情况4.4.1打开IE浏览器输入部署Hadoop服务器的IP:;&4.4.2输入::&5. Hadop使用(一个测试例子wordcount)&&&&&&&计算输入文本中词语数量的程序。WordCount在主目录下的java程序包hadoop-examples-1.0.1.jar&中,执行步骤如下:5.1.&首先启动hadoop所有进程:bin/start-all.sh,然在/usr/local/hadoop/hadoop-1.0.1/bin/目录下进行如下操作:&(新建目录名称,可任意命名),在test下创建文本file01、file02,分别输入数个单词。5.2.在hdfs分布式文件系统创建目录input:bin/hadoop fs -mkdir input;&&然后可以使用bin/hadoop fs -ls查看。注:删除目录:bin/hadoop fs -rmr ***;删除文件:bin/hadoop fs -rm ***&5.3.离开hodoop的安全模式:# bin/hadoop dfsadmin –safemode leave注:Hadoop的安全模式相关命令:#bin/hadoop dfsadmin –safemode enter/leave/get/waitHadoop的HDFS系统在安全模式下只能进行“读”操作!不能进行文件等的删除,创建和更新操作!5.4.将数据从linux文件系统复制到HDFS分布式文件系统中的input文件夹中:#bin/hadoop fs -put /usr/local/hadoop/hadoop-1.0.1/test/* input5.5.执行例子中的WordCount:bin/hadoop jar hadoop-1.0.1-examples.jar wordcount input output参考:&5.6.查看执行结果:bin/hadoop dfs -cat output/*5.7.执行完毕后,可进入web界面刷新查看running job及completed job的显示。5.8.关闭hadoop所有进程:bin/stop-all.sh。
发表评论:
TA的最新馆藏[转]&Centos6.5源码编译安装Hadoop2.5.1
一、编译环境
[plain]&view plaincopy
二、安装以上所需的所有软件
1.yum可安装的软件
[html]&view plaincopy
[html]&view plaincopy
[html]&view plaincopy
4.安装findbugs
[html]&view plaincopy
5.安装protobuf
[html]&view plaincopy
6.安装maven
[html]&view plaincopy
三、编译源码
[html]&view plaincopy
最后的文件就在hadoop-2.5.1-src/hadoop-dist/target中
至此,自己编译的hadoop2.5.1已经完成,经测试不会再在运行的时候出现warning了,确实让人开心!
另外:如果在编译的时候出现问题,不妨考虑一下jdk的版本以及各个软件的版本的问题,我最初用的是jdk8,一直报错,最后尝试了一下jdk7才算成功。
按照如上步骤基本可以保证能够正确编译,编译过程中参考了网上不少的文章,由于自己有记笔记的习惯,每次操作过后都记录在笔记中,因此未记录参考过那些文章,请见谅。
【声明】:黑吧安全网()登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱,我们会在最短的时间内进行处理。
上一篇:【】【】本 Hadoop 教程由
出品,转载请注明。本教程适合于在 CentOS 6.x 系统中安装原生 Hadoop 2,适用于Hadoop 2.7.1,
Hadoop 2.6.0 等版本,主要参考了
官方安装教程
,步骤详细,辅以适当说明,
相信按照步骤来,都能顺利在 CentOS 中安装并运行 Hadoop
本教程使用
CentOS 6.4 32位
作为系统环境,请自行安装系统(可参考
使用VirtualBox安装CentOS
)。如果用的是
系统,请查看相应的
Ubuntu安装Hadoop教程
本教程基于原生 Hadoop 2,在
Hadoop 2.6.0 (stable)
版本下验证通过,可适合任何 Hadoop 2.x.y 版本,例如 Hadoop 2.7.1, Hadoop 2.4.1等。
Hadoop版本
Hadoop 有两个主要版本,Hadoop 1.x.y 和 Hadoop 2.x.y 系列,比较老的教材上用的可能是 0.20 这样的版本。Hadoop 2.x 版本在不断更新,本教程均可适用。如果需安装 0.20,1.2.1这样的版本,本教程也可以作为参考,主要差别在于配置项,配置请参考官网教程或其他教程。
新版是兼容旧版的,书上旧版本的代码应该能够正常运行(我自己没验证,欢迎验证反馈)。
装好了 CentOS 系统之后,在安装 Hadoop 前还需要做一些必备工作。
创建hadoop用户
如果你安装 CentOS 的时候不是用的 “hadoop” 用户,那么需要增加一个名为 hadoop 的用户。
首先点击左上角的 “” -& “系统工具” -& “终端”,首先在终端中输入
,按回车,输入 root 密码以 root 用户登录,接着执行命令创建新用户 hadoop:
# 上述提到的以 root 用户登录
useradd -m hadoop -s /bin/bash
# 创建新用户hadoop
如下图所示,这条命令创建了可以登陆的 hadoop 用户,并使用 /bin/bash 作为shell。
CentOS创建hadoop用户
接着使用如下命令修改密码,按提示输入两次密码,可简单的设为 “hadoop”(密码随意指定,若提示“无效的密码,过于简单”则再次输入确认就行):
passwd hadoop
可为 hadoop 用户增加权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:
如下图,找到
这行(应该在第98行,可以先按一下上的
键,然后输入
(按一下冒号,接着输入98,再按回车键),可以直接跳到第98行 ),然后在这行下面增加一行内容:
(当中的间隔为tab),如下图所示:
为hadoop增加sudo权限
添加好内容后,先按一下键盘上的
键,然后输入
(输入冒号还有wq,这是vi/vim的保存方法),再按回车键保存退出就可以了。
最后注销当前用户(点击屏幕右上角的用户名,选择退出-&注销),在登陆界面使用刚创建的 hadoop 用户进行登陆。
使用 hadoop 用户登录后,还需要安装几个才能安装 Hadoop。
CentOS 使用 yum 来安装软件,需要联网环境,首先应检查一下是否连上了。如下图所示,桌面右上角的网络图标若显示红叉,则表明还未联网,应点击选择可用网络。
检查是否联网
连接网络后,需要安装 SSH 和 。
安装SSH、配置SSH无密码登陆
集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台
主机,并且在上面运行命令),一般情况下,CentOS 默认已安装了 SSH client、SSH server,打开终端执行如下命令进行检验:
rpm -qa | grep ssh
如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装。
检查是否安装了SSH
若需要安装,则可以通过 yum 进行安装(安装过程中会让你输入 [y/N],输入 y 即可):
sudo yum install openssh-clients
sudo yum install openssh-server
接着执行如下命令测试一下 SSH 是否可用:
此时会有如下提示(SSH首次登陆提示),输入 yes 。然后按提示输入密码 hadoop,这样就登陆到本机了。
测试SSH是否可用
但这样登陆是需要每次输入密码的,我们需要配置成SSH无密码登陆比较方便。
退出刚才的 ssh,就回到了我们原先的终端窗口,然后利用 ssh-keygen 生成密钥,并将密钥加入到授权中:
# 退出刚才的 ssh localhost
cd ~/.ssh/
# 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa
# 会有提示,都按回车就可以
cat id_rsa.pub && authorized_keys
# 加入授权
chmod 600 ./authorized_keys
# 修改文件权限
在 Linux 系统中,~ 代表的是用户的主,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注释。
ssh localhost
命令,无需输入密码就可以直接登陆了,如下图所示。
SSH无密码登录
安装Java环境
Java 环境可选择
的 JDK,或是 OpenJDK,现在一般 Linux 系统默认安装的基本是 OpenJDK,如 CentOS 6.4 就默认安装了 OpenJDK 1.7。按
http://wiki.apache.org/hadoop/HadoopJavas
中说的,Hadoop 在 OpenJDK 1.7 下运行是没问题的。需要注意的是,CentOS 6.4 中默认安装的只是 Java JRE,而不是 JDK,为了开发方便,我们还是需要通过 yum 进行安装 JDK,安装过程中会让输入 [y/N],输入 y 即可:
sudo yum install java-1.7.0-openjdk java-1.7.0-openjdk-devel
JRE和JDK的区别
JRE(Java Runtime Environment,Java),是运行 Java 所需的环境。JDK(Java Development Kit,Java工具包)即包括 JRE,还包括开发 Java 所需的工具和类库。
通过上述命令安装 OpenJDK,默认安装位置为 /usr/lib/jvm/java-1.7.0-openjdk(该路径可以通过执行
rpm -ql java-1.7.0-openjdk-devel | grep '/bin/javac'
命令确定,执行后会输出一个路径,除去路径末尾的 “/bin/javac”,剩下的就是正确的路径了)。OpenJDK 安装后就可以直接使用 java、javac 等命令了。
接着需要配置一下 JAVA_HOME 环境变量,为方便,我们在 ~/.bashrc 中进行设置(扩展阅读:
设置Linux环境变量的方法和区别
vim ~/.bashrc
在文件最后面添加如下单独一行(指向 JDK 的安装位置),并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk
如下图所示:
设置JAVA_HOME环境变量
接着还需要让该环境变量生效,执行如下代码:
source ~/.bashrc
# 使变量设置生效
设置好后我们来检验一下是否设置正确:
echo $JAVA_HOME
# 检验变量值
java -version
$JAVA_HOME/bin/java -version
# 与直接执行 java -version 一样
如果设置正确的话,
$JAVA_HOME/bin/java -version
会输出 java 的版本信息,且和
java -version
的输出结果一样,如下图所示:
成功设置JAVA_HOME环境变量
这样,Hadoop 所需的 Java 运行环境就安装好了。
安装 Hadoop 2
Hadoop 2 可以通过
http://mirror./apache/hadoop/common/
/apache/hadoop/common/
下载,本教程选择的是 2.6.0 版本,下载时请下载
hadoop-2.x.y.tar.gz
这个格式的文件,这是编译好的,另一个包含 src 的则是 Hadoop ,需要进行编译才可使用。
下载时强烈建议也下载
hadoop-2.x.y.tar.gz.mds
这个文件,该文件包含了检验值可用于检查 hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。
本文涉及的文件均通过下载,默认保存在 “下载” 目录中(若不是请自行更改 tar 命令的相应目录)。另外,如果你用的不是 2.6.0 版本,则将所有命令中出现的 2.6.0 更改为你所使用的版本。
cat ~/下载/hadoop-2.6.0.tar.gz.mds | grep 'MD5' # 列出md5检验值
# head -n 6 ~/下载/hadoop-2.7.1.tar.gz.mds # 2.7.1版本格式变了,可以用这种方式输出
md5sum ~/下载/hadoop-2.6.0.tar.gz | tr "a-z" "A-Z" # 计算md5值,并转化为大写,方便比较
若文件不完整则这两个值一般差别很大,可以简单对比下前几个字符跟后几个字符是否相等即可,如下图所示,如果两个值不一样,请务必重新下载。
检验文件完整性
我们选择将 Hadoop 安装至 /usr/local/ 中:
sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local
# 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.6.0/ ./hadoop
# 将文件夹名改为hadoop
sudo chown -R hadoop:hadoop ./hadoop
# 修改文件权限
Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:
cd /usr/local/hadoop
./bin/hadoop version
相对路径与绝对路径
请务必注意命令中的相对路径与绝对路径,本文后续出现的
等包含 ./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行
./bin/hadoop version
等同于执行
/usr/local/hadoop/bin/hadoop version
。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行
./bin/hadoop version
,执行的会是
/home/hadoop/bin/hadoop version
,就不是我们所想要的了。
Hadoop单机配置(非分布式)
Hadoop 默认模式为非分布式模式,无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。
现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar
可以看到所有例子),包括 wordcount、terasort、join、grep 等。
在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则
dfs[a-z.]+
的单词并统计出现的次数,最后输出结果到 output 文件夹中。
cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input
# 将作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'
cat ./output/*
# 查看运行结果
若运行出错,如出现如下图提示:
运行Hadoop实例时可能会报错
若出现提示 “WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform… using builtin-java classes where applicable”,该 WARN 提示可以忽略,不会影响 Hadoop 正常运行(可通过编译 Hadoop 源码解决,解决方法请自行搜索)。
若出现提示 “INFO metrics.MetricsUtil: Unable to obtain hostName java.net.UnknowHostException”,这需要执行如下命令修改 hosts 文件,为你的主机名增加IP映射:
sudo vim /etc/hosts
主机名在终端窗口标题里可以看到,或执行命令
查看,如下图所示,在最后面增加一行 “127.0.0.1
设置主机名的IP映射
保存文件后,重新运行 hadoop 实例,若执行成功的话会输出很多作业的相关信息,最后的输出信息如下图所示。作业的结果会输出在指定的 output 文件夹中,通过命令
cat ./output/*
查看结果,符合正则的单词 dfsadmin 出现了1次:
Hadoop例子输出结果
,Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将
rm -r ./output
Hadoop伪分布式配置
Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
在设置 Hadoop 伪分布式配置前,我们还需要设置 HADOOP 环境变量,执行如下命令在 ~/.bashrc 中设置:
gedit ~/.bashrc
这次我们选择用 gedit 而不是 vim 来编辑。gedit 是文本编辑器,类似于
中的记事本,会比较方便。保存后记得关掉整个 gedit 程序,否则会占用终端。在文件最后面增加如下内容:
# Hadoop Environment Variables
export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
保存后,不要忘记执行如下命令使配置生效:
source ~/.bashrc
这些变量在启动 Hadoop 进程时需要用到,不设置的话可能会报错(这些变量也可以通过修改 ./etc/hadoop/hadoop-env.sh 实现)。
Hadoop 的配置文件位于
/usr/local/hadoop/etc/hadoop/
中,伪分布式需要修改2个配置文件
core-site.xml
hdfs-site.xml
。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。
修改配置文件
core-site.xml
(通过 gedit 编辑会比较方便:
gedit ./etc/hadoop/core-site.xml
),将当中的
&configuration&
&/configuration&
修改为下面配置:
&configuration&
&property&
&name&hadoop.tmp.dir&/name&
&value&file:/usr/local/hadoop/tmp&/value&
&description&Abase for other temporary directories.&/description&
&/property&
&property&
&name&fs.defaultFS&/name&
&value&hdfs://localhost:9000&/value&
&/property&
&/configuration&
同样的,修改配置文件
hdfs-site.xml
&configuration&
&property&
&name&dfs.replication&/name&
&value&1&/value&
&/property&
&property&
&name&dfs.namenode.name.dir&/name&
&value&file:/usr/local/hadoop/tmp/dfs/name&/value&
&/property&
&property&
&name&dfs.datanode.data.dir&/name&
&value&file:/usr/local/hadoop/tmp/dfs/data&/value&
&/property&
&/configuration&
关于Hadoop配置项的一点说明
虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。
配置完成后,执行 NameNode 的格式化:
./bin/hdfs namenode -format
成功的话,会看到 “successfully formatted” 和 “Exitting with status 0″ 的提示,若为 “Exitting with status 1″ 则是出错。
执行NameNode格式化
守护进程:
./sbin/start-dfs.sh
若出现如下 SSH 的提示 “Are you sure you want to continue connecting”,输入 yes 即可。
首次启动Hadoop时的SSH提示
启动时可能会有 WARN 提示 “WARN util.NativeCodeLoader…” 如前面提到的,这个提示不会影响正常使用。
启动完成后,可以通过命令
来判断是否成功启动,若成功启动则会列出如下进程: “NameNode”、”DataNode”和
SecondaryNameNode
(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
通过jps查看启动的Hadoop进程
通过查看启动日志分析启动失败原因
有时 Hadoop 无法正确启动,如 NameNode 进程没有顺利启动,这时可以查看启动日志来排查原因,注意几点:
启动时会提示形如 “dblab: starting namenode, logging to /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.out”,其中 dblab 对应你的主机名,但启动的日志信息是记录在 /usr/local/hadoop/logs/hadoop-hadoop-namenode-dblab.log 中,所以应该查看这个后缀为
每一次的启动日志都是追加在日志文件之后,所以得拉到最后面看,看下记录的时间就知道了。
一般出错的提示在最后面,也就是写着 Fatal、Error 或者 Java Exception 的地方。
可以在网上搜索一下出错信息,看能否找到一些相关的解决方法。
成功启动后,可以访问 Web 界面
http://localhost:50070
查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件。
Hadopp的Web界面
运行Hadoop伪分布式实例
上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:
./bin/hdfs dfs -mkdir -p /user/hadoop
接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将 /usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的 /user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录 /user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是 /user/hadoop/input:
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input
复制完成后,可以通过如下命令查看 HDFS 中的文件列表:
./bin/hdfs dfs -ls input
伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'
查看运行结果的命令(查看的是位于 HDFS 中的输出结果):
./bin/hdfs dfs -cat output/*
结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。
Hadoop伪分布式运行grep的结果
我们也可以将运行结果取回到本地:
rm -r ./output
# 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output
# 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*
Hadoop 运行程序时,输出目录不能存在,否则会提示错误 “org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists” ,因此若要再次执行,需要执行如下命令删除 output 文件夹:
./bin/hdfs dfs -rm -r output
# 删除 output 文件夹
运行程序时,输出目录不能存在
运行 Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:
Configuration conf = new Configuration();
Job job = new Job(conf);
/* 删除输出目录 */
Path outputPath = new Path(args[1]);
outputPath.getFile(conf).delete(outputPath, true);
若要关闭 Hadoop,则运行
./sbin/stop-dfs.sh
下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行
./sbin/start-dfs.sh
(伪分布式不启动 YARN 也可以,一般不会影响程序执行)
有的读者可能会疑惑,怎么启动 Hadoop 后,见不到书上所说的 JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。
YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce 之上,提供了高可用性、高扩展性,YARN 的更多介绍在此不展开,有兴趣的可查阅相关资料。
./sbin/start-dfs.sh
启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让 YARN 来负责资源管理与任务调度。
首先修改配置文件
mapred-site.xml
,这边需要先进行重命名:
mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml
然后再进行编辑,同样使用 gedit 编辑会比较方便些
gedit ./etc/hadoop/mapred-site.xml
&configuration&
&property&
&name&mapreduce.framework.name&/name&
&value&yarn&/value&
&/property&
&/configuration&
接着修改配置文件
yarn-site.xml
&configuration&
&property&
&name&yarn.nodemanager.aux-services&/name&
&value&mapreduce_shuffle&/value&
&/property&
&/configuration&
然后就可以启动 YARN 了(需要先执行过
./sbin/start-dfs.sh
./sbin/start-yarn.sh
$ 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver
# 开启,才能在Web中查看任务运行情况
开启后通过
查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程,如下图所示。
启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是 “mapred.LocalJobRunner” 在跑任务,启用 YARN 之后,是 “mapred.YARNRunner” 在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:
http://localhost:8088/cluster
,如下图所示。
开启YARN后可以查看任务运行信息
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。
不启动 YARN 需删掉 mapred-site.xml
如果不想启动 YARN,务必删掉配置文件
mapred-site.xml
(改文件名更好,需要用时改回来就行,这也是为何该配置文件初始文件名为 mapred-site.xml.template),否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示 “Retrying connect to server: 0.0.0.0/0.0.0.0:8032″ 的错误。
同样的,关闭 YARN 的脚本如下:
./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver
自此,你已经掌握 Hadoop 的配置和基本使用了。
附加教程: 配置PATH环境变量
在这里额外讲一下 PATH 这个环境变量(可执行
echo $PATH
查看,当中包含了多个目录)。例如我们在主文件夹 ~ 中执行
这个命令时,实际执行的是
这个程序,而不是
这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。
上面的教程中,我们都是先进入到 /usr/local/hadoop 目录中,再执行
./sbin/hadoop
,实际上等同于运行
/usr/local/hadoop/sbin/hadoop
。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过
start-dfs.sh
开启 Hadoop,也可以直接通过
访问 HDFS 的内容,方便平时的操作。
在前面我们设置 HADOOP 环境变量时,我们已经顺便设置了 PATH 变量(即 “export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin”),那么以后我们在任意目录中都可以直接通过执行
start-dfs.sh
来启动 Hadoop 或者执行
hdfs dfs -ls input
查看 HDFS 文件了,读者不妨现在就执行
hdfs dfs -ls input
安装Hadoop集群
[准备中]…
使用Eclipse编译运行MapReduce程序
: 用文本编辑器写 Java 程序是不靠谱的,还是用 Eclipse 比较方便。
使用命令行编译打包运行自己的MapReduce程序
: 有时候需要直接通过命令来编译 MapReduce 程序。
Hadoop: Setting up a Single Node Cluster
How to Setup Hadoop 2.7.1 on CentOS, Ubuntu & LinuxMint
Yarn简单介绍及内存配置

我要回帖

更多关于 centos 7 hadoop 2.7 的文章

 

随机推荐