接触过hadoop的人都知道hadoop的搭建过程很是麻烦,尤为是对于初学者,幸运的是有cloudera这样的公司为咱们作了一些发行版,咱们能够直接使用apt-get,yum等包管理工具进行安装。
下面我要说得是,在centos6.5 64位下,经过yum安装cdh5.1.0,须要注意的是5.1.0默认是mapred2(也就是yarn模式),我这里安装的是mapred1,也就是传统的hadoop模式。html
先看看cloudera官方说明,最好是按照人家说得版原本,毕竟人家测试过了,没问题呀,你要是非用不支持的版本,注定是一场折腾之路。java
这里我重点说下/etc/hosts
的配置,在namenode与jobtracker所在的机器上,必定不要有node
127.0.0.0 <hostname>
这条记录,而且要把全部子结点的ip与hostname配进去。
不然你会遇到各类错误,下面是一个错误:apache
2015-02-05 12:35:30,145 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Time to add replicas to map for block pool BP-2009649341-10.6.8.213-1423108250285 on volume /data/dfs/dn/current: 1ms 2015-02-05 12:35:30,145 INFO org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsDatasetImpl: Total time to add all replicas to map: 6ms 2015-02-05 12:35:30,148 INFO org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool BP-2009649341-10.6.8.213-1423108250285 (Datanode Uuid null) service to /10.6.8.213:8020 beginning handshake with NN 2015-02-05 12:35:33,219 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: Initialization failed for Block pool BP-2009649341-10.6.8.213-1423108250285 (Datanode Uuid null) service to /10.6.8.213:8020 Datanode denied communication with namenode because hostname cannot be resolved (ip=10.6.3.175, hostname=10.6.3.175): DatanodeRegistration(0.0.0.0, datanodeUuid=177b02e8-6692-4c69-8e4d-d0d14566ce72, infoPort=50075, ipcPort=50020, storageInfo=lv=-55;cid=CID-dcde3b04-134d-42c2-ac61-143ef3869377;nsid=1437835541;c=0) at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:802) at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:4314) at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:980) at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.registerDatanode(DatanodeProtocolServerSideTranslatorPB.java:92) at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28057) at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:585) at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:1026) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1986) at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:1982) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:415) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1554) at org.apache.hadoop.ipc.Server$Handler.run(Server.java:1980)
这个错误,是在启动namenode后,启动datanode时的错误,从错误信息来看,这时在datanode向namenode注册时的错。centos
在/etc/yum.repo.d
中建立一个repo文件,内容为ide
[cloudera-cdh5] name=Cloudera's Distribution for Hadoop, Version 5 baseurl= http://archive.cloudera.com/cdh5/redhat/5/x86_64/cdh/5.1.0/ gpgkey = http://archive.cloudera.com/cdh5/redhat/5/x86_64/cdh/RPM-GPG-KEY-cloudera gpgcheck = 0
配置源后,执行工具
yum clean all
来更新源,确保系统仓库中的软件为最新版。oop
hadoop2.0把各个模块都给分出来了。hdfs、mapred、yarn、client都是做为独立的模块的,能够单独安装。测试
yum -y install hadoop-hdfs-namenode yum -y install hadoop-0.20-mapreduce-jobtracker yum -y install hadoop-hdfs-datanode yum -y install hadoop-0.20-mapreduce-tasktracker
你们能够根据机器的角色,安装不一样的组件。
在客户端执行hadoop任务时,须要安装ui
yum install hadoop-client
经过yum安装,配置文件默认在/etc/hadoop/conf
文件夹中。须要修改下面三个配置文件:
core-site.xml
<property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property>
hdfs-site.xml
<property> <name>dfs.namenode.name.dir</name> <value>file:///data/dfs/nn</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///data/dfs/dn</value> </property>
mapred-site.xml
<property> <name>mapred.job.tracker</name> <value>master:8021</value> </property> <property> <name>mapred.local.dir</name> <value>/data/mapred/local</value> </property>
经过yum安装,conf文件夹中默认没有hadoop-env.sh
这个文件,咱们能够从其余地方拷过来,在/usr/lib/hadoop-0.20-mapreduce/example-confs/conf.secure/hadoop-env.sh
有个参考配置,咱们能够把它拷贝过来,而且开头添加下面的配置:
export JAVA_HOME=/usr/java/default export HADOOP_MAPRED_HOME=/usr/lib/hadoop-0.20-mapreduce
/usr/java/default
是我机器上java的安装目录,大家可根据实际状况进行修改。
在上面的配置中,hdfs-site.xml
中制定了namenode与datanode的存放数据的目录,下面进行建立
mkdir -p /data/dfs/nn /data/dfs/dn chown hdfs:hdfs /data/dfs/nn /data/dfs/dn
mapred-site.xml
中指定了执行任务时临时数据的存放目录,下面进行建立
mkdir -p /data/mapred/local chown mapred:mapred /data/mapred/local
这里须要说明的是,在hadoop2.0中,再也不推荐用一个hadoop帐户来启动全部进程,推荐使用hdfs用户操做hdfs相关进程,mapred用户操做mapred相关进程,yarn用户操做yarn相关进程,在咱们用yum安装各个组件时,相应的用户会替咱们自动建立。
首先时在主结点启动namenode
sudo -u hdfs hdfs namenode -format service hadoop-hdfs-namenode start
以后,在子结点启动datanode
service hadoop-hdfs-datanode start
这样,hdfs就能工做了。下面建立mapred在hdfs上所需的目录
sudo -u hdfs hdfs dfs -mkdir /tmp sudo -u hdfs hdfs dfs -chmod -R 1777 /tmp
这时,就能够在主结点上启动jobtracker了
service hadoop-0.20-mapreduce-jobtracker start
启动jobtracker后,会在hdfs的tmp下生成以下结构的目录:
最后,在子结点上启动tasktracker就能够了。
service hadoop-0.20-mapreduce-tasktracker start