hadoop-CDH4.7部署(详细)

一、准备工作

 申请开通hadoop3测试集群防火墙权限

 规划:

主机

IP

系统

节点

JXQ-23-27-48.com.cn

172.23.27.48

CentOS release 6.4

Namenode、zkfc、

JobHistoryServer

JXQ-23-27-49.com.cn

172.23.27.49

CentOS release 6.4

Namenode、zkfc

 

JXQ-23-27-50.com.cn

172.23.27.50

CentOS release 6.4

Datanode、nodemanager、resourcemanager

JXQ-23-27-51.com.cn

172.23.27.51

CentOS release 6.4

Datanode、nodemanager、

JXQ-23-27-52.com.cn

172.23.27.52

CentOS release 6.4

Datanode、nodemanager、

JXQ-23-27-53.com.cn

172.23.27.53

CentOS release 6.4

Datanode、nodemanager、

JXQ-23-27-54.com.cn

172.23.27.54

CentOS release 6.4

Datanode、nodemanager、

JXQ-23-27-55.com.cn

172.23.27.55

CentOS release 6.4

Zookeeper,journalnode

JXQ-23-27-56.com.cn

172.23.27.56

CentOS release 6.4

Zookeeper,journalnode

JXQ-23-27-57.com.cn

172.23.27.57

CentOS release 6.4

Zookeeper,journalnode


1.1  配置yum源

mv  /etc/yum.repos.d/cobbler-config.repo   /etc/yum.repos.d/cobbler-config.repo.bak

vim  /etc/yum.repos.d/cloudera.repo

[Base]
name=Base
baseurl=http://172.23.64.71/centos6.4-x86_64
enabled=1
gpgcheck=0

[updates]
name=updates
baseurl=http://172.23.64.71/repos/6.4-updates
gpgcheck=0
enabled=1

[cdh]
name=cdh
baseurl=http://172.23.64.71/repos/cdh/4
enabled=1
gpgcheck=0

[ext]
name=ext
baseurl=http://172.23.64.71/repos/cloudera-gplextras4
enabled=1
gpgcheck=0

[epel]
name=epel
baseurl=http://172.23.64.71/repos/epel
enabled=1
gpgcheck=0

[gfs]
name=gfs
baseurl=http://172.23.64.71/repos/gfs
enabled=1
gpgcheck=0
yum  clean  all

1.2  配置/etc/hosts

127.0.0.1   localhost localhost.localdomain
172.23.27.48   JXQ-23-27-48.com.cn
172.23.27.49   JXQ-23-27-49.com.cn
172.23.27.50   JXQ-23-27-50.com.cn
172.23.27.51   JXQ-23-27-51.com.cn
172.23.27.52   JXQ-23-27-52.com.cn
172.23.27.53   JXQ-23-27-53.com.cn
172.23.27.54   JXQ-23-27-54.com.cn
172.23.27.55   JXQ-23-27-55.com.cn
172.23.27.56   JXQ-23-27-56.com.cn
172.23.27.57   JXQ-23-27-57.com.cn

1.3 确定关闭iptables,selinux,配置ntp,系统优化,ulimit,取消sudotty
echo '* soft nofile 65536'  >>/etc/security/limits.conf
echo '* hard nofile 65536'  >>/etc/security/limits.conf
echo '* soft nproc 131072'  >>/etc/security/limits.conf
echo '* hard nproc 131072'  >>/etc/security/limits.conf
echo '* soft nofile 65536'  >>/etc/security/limits.d/90-nproc.conf
echo '* hard nofile 65536'  >>/etc/security/limits.d/90-nproc.conf
echo '* soft nproc 131072'  >>/etc/security/limits.d/90-nproc.conf
echo '* hard nproc 131072'  >>/etc/security/limits.d/90-nproc.conf

1.4 配置无密登录

cd  ~/.ssh
ssh-keygen -t rsa (四个回车)
ssh-copy-id '-p 51899 pe@172.23.27.49'
ssh-copy-id '-p 51899 pe@172.23.27.50'
ssh-copy-id '-p 51899 pe@172.23.27.51'
1.5 关闭防火墙

#查看防火墙状态
		service iptables status
		#关闭防火墙
		service iptables stop
		#查看防火墙开机启动状态
		chkconfig iptables --list
		#关闭防火墙开机启动
		chkconfig iptables off

1.6 jdk安装

rpm -ivh http://172.23.64.71/repos/jdk-7u51-linux-x64.rpm
alternatives --install /usr/bin/java java /usr/java/default/bin/java 3
alternatives --config java
alternatives --install /usr/bin/java java /usr/java/latest/bin/java 1600
alternatives --auto java
alternatives --install /usr/bin/jps jps /usr/java/latest/bin/jps 1

二、开始安装Zookeeper与journalnode

Zookeeper 至少需要3个节点,并且节点数要求是基数,这里在55,56,57

    在每个节点上安装zookeeper

$ yum install zookeeper* -y

  设置 zookeeper 配置/etc/zookeeper/conf/zoo.cfg

maxClientCnxns=50
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/lib/zookeeper
clientPort=2181
server.1= JXQ-23-27-55.com.cn:2888:3888
server.2= JXQ-23-27-56.com.cn:2888:3888
server.3= JXQ-23-27-57.com.cn:2888:3888

同步配置文件

将配置文件同步到其他节点:

$ scp -r /etc/zookeeper/conf root@56服务器:/etc/zookeeper/

$ scp -r /etc/zookeeper/conf root@57服务器:/etc/zookeeper/

初始化并启动服务

在每个节点上初始化并启动 zookeeper,注意 n 的值需要和 zoo.cfg 中的编号一致。

在 55 节点运行

$ service zookeeper-server init --myid=1

$ service zookeeper-server start

在 56 节点运行

$ service zookeeper-server init --myid=2

$ service zookeeper-server start

在 57 节点运行

$ service zookeeper-server init --myid=3

$ service zookeeper-server start

安装journalnode实现元数据的同步

yum -y installhadoop-hdfs-journalnode hadoop-lzo-cdh4

servicehadoop-hdfs-journalnode start


三、开始安装

主namenode:(172.23.27.48)

      yum -y install hadoop-hdfs-namenode hadoop-hdfs-zkfc hadoop-lzo-cdh4                      

                               hadoop-mapreduce-historyserver

     

辅namenode:(172.23.27.49)

        yum-y install hadoop-hdfs-namenode hadoop-hdfs-zkfc hadoop-lzo-cdh4

 

主 resourcemanager:(172.23.27.50)

      yum -y install hadoop-yarn-resourcemanager

 

datanode、nodemanager安装:(50,51,52,53,54)

           yum -y install  hadoop-yarn-nodemanager hadoop-hdfs-datanode 

hadoop-mapreduce     hadoop-lzo-cdh4


四、配置文件

我在48上修改配置文件,然后统一拷贝同步

[root@JXQ-23-27-48 conf]# cat allowed_hosts

                                     JXQ-23-27-50.com.cn
                                     JXQ-23-27-51.com.cn
                                     JXQ-23-27-52.com.cn
                                     JXQ-23-27-53.com.cn
                                     JXQ-23-27-54.com.cn

[root@JXQ-23-27-48 conf]# cat exclude_datanode_hosts

   空....

设置hadoop-env.sh

 [root@JXQ-23-27-48 conf]# cat hadoop-env.sh 

设置core-site.xml

 [root@JXQ-23-27-48 conf]# cat core-site.xml 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
		<!-- 指定hdfs的nameservice为wangyin-m6 -->
		<!-- 接收Client连接的RPC端口,用于获取文件系统metadata信息 -->
		<property>
			<name>fs.defaultFS</name>
			<value>hdfs://m6-hadoop3</value>
		</property>
		<!-- 指定hadoop临时目录 -->
		<property>
			 <name>hadoop.tmp.dir</name>
			 <value>/tmp/hadoop-${user.name}-${hue.suffix}</value>
		 </property>
		<!-- 指定zookeeper地址 (IP最好改为域名)-->
		 <property>
			<name>ha.zookeeper.quorum</name>
	<value>JXQ-23-27-55.com.cn:2181,JXQ-23-27-56.com.cn:2181,JXQ-23-27-57.com.cn:2181</value>
		</property>
<!-- 压缩算法-->
		<property>
		 	 <name>io.compression.codecs</name>
		   	 <value>org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.BZip2Codec,com.hadoop.compression.lzo.LzoCodec,com.hadoop.compression.lzo.LzopCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
		</property>
		<property>  
		    	 <name>io.compression.codec.lzo.class</name>  
		         <value>com.hadoop.compression.lzo.LzoCodec</value>  
		</property>
<!-- 文件废弃标识设定,0为禁止此功能;
			该参数值为时间间隔,单位为分钟,默认为0,表示回收站功能关闭。该值表示回收站中文件保存多长时间,
			如果服务端配置了该参数,则忽略客户端的配置;如果服务端关闭了该参数,则检查客户端是否有配置该参数;	
	-->
		<property>
		  	<name>fs.trash.interval</name>
		    	<value>10080</value>
		     	 <description>
		            10080mins=7day.
		                  Number of minutes between trash checkpoints. If zero, the trash feature is disabled
<!-- 垃圾检查点之间的数分钟。如果为零,垃圾特性是禁用的-->
  		  	 </description>
  		</property>
	<!-- 该参数值为时间间隔,单位为分钟,默认为0。该值表示检查回收站时间间隔,该值要小于fs.trash.interval,
			 该值在服务端配置。如果该值设置为0,则使用 fs.trash.interval 的值-->
		<property>  
  			<name>fs.trash.checkpoint.interval</name>  
    			<value>10080</value>  
    		</property>
<!-- 流文件的缓冲区为128K;
				缓冲区大小:io.file.buffer.size默认是4KB,作为hadoop缓冲区,用于hadoop读hdfs的文件和写hdfs的文件,
				还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k(131072),甚至是1M(太大了map和reduce任务可能会内存溢出)
	-->
		<property>
		  	<name>io.file.buffer.size</name>
		    	<value>131072</value>
		</property>
		<!-- 	排序内存使用限制;
					以MB为单位,默认100M,这个值比较小;map节点没运行完时,内存的数据过多,要将内存中的内容写入磁盘盘,
					这个设置就是设置内存缓冲的大小,在suffle之前;这个选项定义了map输出结果在内存里占用buffer的大小,当buffer达到某个阈值(后面那条配置),会启动一个后台线程来对buffer的内容进行排序,然后写入本地磁盘(一个spill文件),根据map输出数据量的大小,可以适当的调整buffer的大小,注意是适当的调整,并不是越大越好-->
		<property>
		  	<name>io.sort.mb</name>
		    	<value>512</value>
		</property>
<!--  reduce阶段用户合并map输出的内存限制-->
		<property>
	 		 <name>fs.inmemory.size.mb</name>
    			<value>300</value>
    		</property>
		
			<!-- 将webinterface.Private.actions设置为true,意味着允许任何人访问HDFS Web界面来删除文件。
				  dfs.web.ugi属性决定以哪个用户身份运行HDFS Web UI,从而控制可以查看或删除哪些文件-->
		<property>
		    	<name>webinterface.private.actions</name>
		        <value>true</value>
		</property>
	<!-- hadoop.security.authorization=true则开启ServiceLevel Authorization,若为false则不经过任何验证,
		      所有用户拥有全部权限。(修改此配置需要重启hadoop)
		      hadoop访问控制分为两级,其中ServiceLevel Authorization为系统级,用于控制是否可以访问指定的服务,
		      例如用户/组是否可以向集群提交Job,它是最基础的访问控制,优先于文件权限和mapred队列权限验证。
		      详细信息参见(hadoop简单权限管理.docx)
		 -->
		<property>
		   	<name>hadoop.security.authorization</name>
		        <value>true</value>
		</property>


		<!-- 配置用户权限-->
		<property>
			<name>security.client.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.client.datanode.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.datanode.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.inter.datanode.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.namenode.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.inter.tracker.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.job.submission.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.task.umbilical.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>
		<property>
			<name>security.refresh.policy.protocol.acl</name>
			<value>root,hdfs,hadoop,yarn</value>
		</property>


		<!-- 配置代理用户hue-->
		<property>
		 	 <name>hadoop.proxyuser.hue.hosts</name>
		    	<value>*</value>
		</property>
		<property>
		     	 <name>hadoop.proxyuser.hue.groups</name>
		         <value>*</value>
		</property>
		<!-- 配置代理用户httpfs-->
		<property>  
 			 <name>hadoop.proxyuser.httpfs.hosts</name>  
    			 <value>*</value>  
    		</property>  
    		<property>  
      			<name>hadoop.proxyuser.httpfs.groups</name>  
        		<value>*</value>  
       		</property>  
		<!-- 配置代理用户hive-->
		<property>
		         <name>hadoop.proxyuser.hive.hosts</name>
		         <value>*</value>
		</property>
		<property>
		         <name>hadoop.proxyuser.hive.groups</name>
		 	 <value>*</value>
		</property>
		<!-- 配置代理用户hdfs-->
		<property>
			<name>hadoop.proxyuser.hdfs.hosts</name>
			<value>*</value>
		</property>
		<property>
			<name>hadoop.proxyuser.hdfs.groups</name>
			<value>*</value>
		</property>
		<!-- 在网页界面访问数据使用的用户名。默认值是一个不真实存在的用户,此用户权限很小,不能访问不同用户的数据。
			这保证了数据安全。也可以设置为hdfs和hadoop等具有较高权限的用户,但会导致能够登陆网页界面的人能看到其它用户数据。
			实际设置请综合考虑。如无特殊需求。使用默认值就好-->
		<property>
			<name>hadoop.http.staticuser.user</name>
			<value>mapred</value>
		</property>
<!-- 机架感知-->
<!-- 配合ScriptBasedMapping使用。脚本文件。此脚本文件,输入是ip地址,输出是机架路径。 -->
		<property>
			<name>net.topology.script.file.name</name>
		  	<value>/etc/hadoop/conf/topo.sh</value>
		</property>
</configuration>

设置hdfs-site.xml

 [root@JXQ-23-27-48 conf]# cat hdfs-site.xml 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!--指定hdfs的nameservice为wangyin-m6,需要和core-site.xml中的保持一致 -->
	<property>
		<name>dfs.nameservices</name>
		<value>m6-hadoop3</value>
	</property>
<!-- wangyin-m6下面有两个NameNode,分别是nn1,nn2 -->
	<property>
  		<name>dfs.ha.namenodes.m6-hadoop3</name>
    		<value>nn1,nn2</value>
    	</property>
<!-- nn1的RPC通信地址 -->
	<property>
  		<name>dfs.namenode.rpc-address.m6-hadoop3.nn1</name>
    		<value>JXQ-23-27-48.com.cn:8020</value>
    	</property>
<!-- nn2的RPC通信地址 -->
	<property>
  		<name>dfs.namenode.rpc-address.m6-hadoop3.nn2</name>
    		<value>JXQ-23-27-49.com.cn:8020</value>
    	</property>
<!-- nn1的http通信地址 -->
	<property>
 		<name>dfs.namenode.http-address.m6-hadoop3.nn1</name>
    		<value>JXQ-23-27-48.com.cn:50070</value>
    	</property>
<!-- nn2的http通信地址 -->
	<property>
  		<name>dfs.namenode.http-address.m6-hadoop3.nn2</name>
    		<value>JXQ-23-27-49.com.cn:50070</value>
    	</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
	<property>
  		<name>dfs.namenode.shared.edits.dir</name>
    		<value>qjournal://JXQ-23-27-55.com.cn:8485;JXQ-23-27-56.com.cn:8485;JXQ-23-27-57.com.cn:8485/m6-hadoop3</value>
    	</property>
	
<!-- 配置失败自动切换实现方式 -->
	<property>
	  	<name>dfs.client.failover.proxy.provider.m6-hadoop3</name>
	   	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
<!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
	<property>
  		<name>dfs.ha.fencing.methods</name>
    		<value>shell(/home/hadoop/fencingscript.sh)</value>
    	</property>
<!-- 开启NameNode失败自动切换 -->
	<property>
  		<name>dfs.ha.automatic-failover.enabled</name>
    		<value>true</value>
    	</property>
<!-- 指定JournalNode在本地磁盘存放数据的位置 -->
	<property>
  		<name>dfs.journalnode.edits.dir</name>
    		<value>/export/hdfs/journalnode</value>
    	</property>
<!-- 名字节点的冗余备份;
			这个参数用于确定将HDFS文件系统的元信息保存在什么目录下。
			如果这个参数设置为多个目录,那么这些目录下都保存着元信息的多个备份
			-->
	<property>
     		<name>dfs.name.dir</name>
     		<value>/export/hdfs/namenode</value>
  	</property>
<!-- 数据节点的block块本地存放目录
			这个参数用于确定将HDFS文件系统的数据保存在什么目录下。
			我们可以将这个参数设置为多个分区上目录,即可将HDFS建立在不同分区上。
		-->
	<property>
	    	<name>dfs.data.dir</name>
		<value>/export/hdfs/1/datanode;/export/hdfs/2/datanode</value>
	</property>
<!-- hadoop hdfs的用户权限检查-->
	<property>
	  	<name>dfs.permissions.enabled</name>
	    	<value>true</value>
	</property>
<!-- 缺省的块复制数量-->
	<property>
  		<name>dfs.replication</name>
    		<value>3</value>
    	</property>

<!-- 允许接入为DataNode的机器列表,如果不配置或所指定的列表文件为空则默认允许所有主机成为DataNode-->
	<property>
	 	 <name>dfs.hosts</name>
	    	 <value>/etc/hadoop/conf/allowed_hosts</value>
	      	<!-- all datanode node -->
	</property>
<!-- 拒绝接入为DataNode的机器列表,如果一台机器同时出现在两个列表中,则拒绝。
			它们的本质作用是拒绝某些节点上的datanode进程连接,而不是调度这些节点上datanode进程的允许和关闭。-->
	<property>
  		<name>dfs.hosts.exclude</name>
    		<value>/etc/hadoop/conf/exclude_datanode_hosts</value>
    	</property>
<!-- 相当于linux下的打开文件最大数量,文档中无此参数,当出现DataXceiver报错的时候,需要调大。默认2048-->
	<property>
	  	<name>dfs.datanode.max.xcievers</name>
	   	 <!--suggest <value>2048</value> -->
  		<value>65535</value>
  	</property>
<!-- 两次连续的检查点之间的最大的时间间隔,缺省值是1小时
		可参考(hadoop1.x和2.X的HDFS fsimage和edits文件运行机制对比.docx)
		-->
	<property>
 		<name>dfs.namenode.checkpoint.period</name>
  		<value>600</value>
  	</property>
<!-- 
		如果其它所有的映像文件和edits都丢失了,可以将最后的检查点导入到NameNode,为此,需要以下步骤:
		创建一个空目录,在dfs.namenode.name.dir项中配置为该目录;
		设置dfs.namenode.checkpoint.dir为检查点目录;
 		采用-importCheckpoint选项来启动NameNode
		NameNode将从dfs.namenode.checkpoint.dir设置的目录中上载检查点,并将其保存在dfs.namenode.name.dir指定的目录中。
		如果dfs.namenode.name.dir中存在一个合法的映像文件,NameNode就会启动失败,NameNode要验证dfs.namenode.checkpoint.dir中的映像文件是否合法,
		但在任何情况下,都不会修改该文件。
-->
  	<property>
   		<name>dfs.namenode.checkpoint.dir</name>
    		<value>/export/hdfs/checkpoint</value>
   	</property>

<!-- 与下面的“写”操作类似-->
	<property>
	  	<name>dfs.namenode.avoid.read.stale.datanode</name>
	    	<value>true</value>    
	</property>
<!-- 表明是否要避免写为“过时”的心跳消息尚未收到的NameNode超过指定的时间间隔数据节点。写操作将避免使用陈旧的数据节点,除非多数据节点的配置比例-->
	<property>
	        <name>dfs.namenode.avoid.write.stale.datanode</name>
	        <value>true</value>
	</property>
<!-- 默认时间间隔一个datanode标记为“down机”,即。 ,如果 namenode没有接到一个datanode心跳超过这个时间间隔,datanode将标记为“过期”。 
		 过期的间隔不能太小 (默认值是3倍 心跳间隔)-->
	<property>
  		<name>dfs.namenode.stale.datanode.interval</name>
   		<value>30000</value>
    	</property>

<!-- impala -->
<!-- 开启客户端就近读取,还会检查dfs.block.local-path-access.user配置的用户权限-->
	<property>
   		 <name>dfs.client.read.shortcircuit</name>
        	 <value>true</value>
        </property>
<!-- Unix域套接字路径,可通过dfs.domain.socket.path设置。该路径必须安全地阻止无优先级进程进行中间人攻击(MITM攻击,man-in-the-middle attack)。
		 每个套接字路径必须是root拥有或者DN用户拥有,不能使用人人都可以写或者用户组可写方式的路径-->
	<property>
    		<name>dfs.domain.socket.path</name>
        	<value>/var/run/hadoop-hdfs/dn._PORT</value>
        </property>
        <property>
            	<name>dfs.client.file-block-storage-locations.timeout</name>
                <value>3000</value>
        </property>
<!-- 
		该项配置的用户名进行shortcircuit读取时如果没有权限会将本地的datanode作为deadnode处理,然后数据通过远程读取
-->
	<property>
  	 	<name>dfs.block.local-path-access.user</name>
      		<value>impala</value>
      	</property>
<!-- datanode所使用的本地文件夹的路径权限,默认755-->
	<property>
   		<name>dfs.datanode.data.dir.perm</name>
      		<value>750</value>
      	</property>
<!-- 通过知道每个block所在磁盘,可以在调度cpu资源时让不同的cpu读不同的磁盘,避免查询内和查询间的IO竞争-->
	<property>
  		<name>dfs.datanode.hdfs-blocks-metadata.enabled</name>
    		<value>true</value>
    	</property> 
<!-- 该属性指定hdfs的超级用户,默认为hdfs,你可以修改为hadoop-->
	<property>
		<name>dfs.permissions.superusergroup</name>
  		<value>hadoop</value>
  	</property>
<!-- datanode 控制端口,默认50010-->
	<property>
  		<name>dfs.datanode.address</name>
    		<value>0.0.0.0:50010</value>
    	</property>
<!-- datanode的HTTP服务器和端口,默认50075-->
	<property>
  		<name>dfs.datanode.http.address</name>
    		<value>0.0.0.0:50075</value>
        </property>
<!-- datanode的RPC服务器地址和端口,默认50020-->
	<property>
  		<name>dfs.datanode.ipc.address</name>
    		<value>0.0.0.0:50020</value>
    	</property>
<!-- 使用webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令,因为这些信息都是由namenode来保存的
			详细参见(hadoop webHDFS设置和使用说明.docx)-->
	<property>
	  	<name>dfs.webhdfs.enabled</name>
	    	<value>true</value>
	 </property>
</configuration>

设置mapred-site.xml

 [root@JXQ-23-27-48conf]# cat mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<!-- 指定mr框架为yarn方式 -->
	<property>
  		<name>mapreduce.framework.name</name>
    		<value>yarn</value>
    	</property>
	<!-- MR的中介数据文件存放目录-->
	<property>
		<name>mapred.local.dir</name>
		<value>/export/hdfs/1/mapred,/export/hdfs/2/mapred</value>
	</property>
<!--临时目录,如果不配置会报hdfs://test1/user/$username/grep-temp-1369767580 目录找不到 -->

	<property>
		<name>mapred.temp.dir</name>
		<value>${hadoop.tmp.dir}/mapred/temp</value>
	</property>
<!-- MapReduce作业产生的正在运行的日志存放位置-->
	<property>
  		<name>mapreduce.jobhistory.intermediate-done-dir</name>
    		<value>/user/history/intermediate</value>
    	</property>
<!-- MapReduce JobHistory Server地址,默认端口10020-->
	<property>
  		<name>mapreduce.jobhistory.address</name>
    		<value>JXQ-23-27-48.com.cn:10020</value>
    	</property>
<!-- MapReduce JobHistory Server Web UI地址,默认端口19888-->
	<property>
  		<name>mapreduce.jobhistory.webapp.address</name>
    		<value>JXQ-23-27-48.com.cn:19888</value>
    	</property>
<!--在什么目录下存放已经运行完的Hadoop作业记录-->
	<property>
		<name>mapreduce.jobhistory.done-dir</name>
		<value>/user/history/done</value>
	</property>
<!-- client将application定义以及需要的jar包文件等上传到hdfs的指定目录-->
	<property>
  		<name>yarn.app.mapreduce.am.staging-dir</name>
    		<value>/user</value>
    	</property>
</configuration>

设置yarn-site.xml

[root@JXQ-23-27-48 conf]# cat yarn-site.xml 

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
<!-- 指定resourcemanager-->
  <property>
  	<name>yarn.resourcemanager.hostname</name>
 	<value>JXQ-23-27-50.com.cn</value>
  </property>
<!-- (配置yarn.nodemanager.aux-services 一定要小心,hadoop2.2.0对应的value值已经从mapreduce.shuffle改为了mapreduce_shuffle);
			在CDH4中该值设为 mapreduce.shuffle,在CDH5中该值设为 mapreduce_shuffle;
			-->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce.shuffle</value>
  </property>
<!-- 为了能够运行MapReduce程序,需要让各个NodeManager在启动时加载shuffle server,shuffle server实际上是Jetty/Netty Server,
			Reduce Task通过该server从各个NodeManager上远程拷贝Map Task产生的中间结果。上面增加的两个配置均用于指定shuffle serve。
			如果YARN集群有多个节点,你还要配置yarn.resourcemanager.address等参数
			详细参见(hadoop YARN安装部署初探.docx)
			-->
  <property>
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  </property>

  <property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
  </property>
<!-- 中间结果存放位置,类似于1.0中的mapred.local.dir。注意,这个参数通常会配置多个目录,已分摊磁盘IO负载。-->
  <property>
    <description>List of directories to store localized files in.</description>
    <name>yarn.nodemanager.local-dirs</name>
    <value>/var/lib/hadoop-yarn/cache/${user.name}/nm-local-dir</value>
  </property>
<!-- 日志存放地址(可配置多个目录)。-->
  <property>
    <description>Where to store container logs.</description>
    <name>yarn.nodemanager.log-dirs</name>
    <value>/var/log/hadoop-yarn/containers</value>
  </property>
<!-- 当应用程序运行结束后,日志被转移到的HDFS目录(启用日志聚集功能时有效)。
		 默认值:/tmp/logs
			-->
  <property>
    <description>Where to aggregate logs to.</description>
    <name>yarn.nodemanager.remote-app-log-dir</name>
    <value>/var/log/hadoop-yarn/apps</value>
  </property>

  <property>
    <description>Classpath for typical applications.</description>
     <name>yarn.application.classpath</name>
     <value>
        $HADOOP_CONF_DIR,
        $HADOOP_COMMON_HOME/*,$HADOOP_COMMON_HOME/lib/*,
        $HADOOP_HDFS_HOME/*,$HADOOP_HDFS_HOME/lib/*,
        $HADOOP_MAPRED_HOME/*,$HADOOP_MAPRED_HOME/lib/*,
        $YARN_HOME/*,$YARN_HOME/lib/*
     </value>
  </property>
<!-- 表示该节点上YARN可使用的物理内存总量,默认是8192(MB),注意,如果你的节点内存资源不够8GB,
			则需要调减小这个值,而YARN不会智能的探测节点的物理内存总量。-->
<property>
  <name>yarn.nodemanager.resource.memory-mb</name>
    <value>102400</value> 
    </property>
<!-- 单个任务可申请的最少物理内存量,默认是1024(MB),如果一个任务申请的物理内存量少于该值,则该对应的值改为这个数。-->
<property>
  <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>2048</value> 
    </property>
<!-- 单个任务可申请的最多物理内存量,默认是8192(MB)。
			默认情况下,YARN采用了线程监控的方法判断任务是否超量使用内存,一旦发现超量,则直接将其杀死。
			由于Cgroups对内存的控制缺乏灵活性(即任务任何时刻不能超过内存上限,如果超过,则直接将其杀死或者报OOM),
			而Java进程在创建瞬间内存将翻倍,之后骤降到正常值,这种情况下,采用线程监控的方式更加灵活(当发现进程树内存瞬间翻倍超过设定值时,
			可认为是正常现象,不会将任务杀死),因此YARN未提供Cgroups内存隔离机制。-->
<property>
  <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>8192</value> 
    </property>
<!-- 新框架中 NodeManager 与 RM 通信的接口地址-->
<property>
  <name>yarn.resourcemanager.address</name>
    <value>JXQ-23-27-50.com.cn:8032</value>
    </property>
<!-- 新框架中 NodeManger 需要知道 RM 主机的 scheduler 调度服务接口地址-->
<property>
  <name>yarn.resourcemanager.scheduler.address</name>
    <value>JXQ-23-27-50.com.cn:8030</value>
    </property>
<!-- 新框架中 NodeManager 需要向 RM 报告任务运行状态供 Resouce 跟踪,因此 NodeManager 节点主机需要知道 RM 主机的 tracker 接口地址-->
<property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>JXQ-23-27-50.com.cn:8031</value>
    </property>
<!-- ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。默认8033-->
<property>
  <name>yarn.resourcemanager.admin.address</name>
    <value>JXQ-23-27-50.com.cn:8033</value>
    </property>
<!-- 新框架中 各个 task 的资源调度及运行状况通过通过该 web 界面访问-->
         <property>
           <name>yarn.resourcemanager.webapp.address</name>
             <value>JXQ-23-27-50.com.cn:8088</value>
             </property>
<!-- yarn的web服务器地址-->
<property>
  <name>yarn.web-proxy.address</name>
    <value>JXQ-23-27-50.com.cn:54315</value>
</property>
</configuration>

[root@JXQ-23-27-48 conf]# cat topo.data

172.23.27.50   /rack001
172.23.27.51   /rack001
172.23.27.52   /rack002
172.23.27.53   /rack002
172.23.27.54   /rack002

[root@JXQ-23-27-48 conf]# cat topo.sh 

#!/bin/sh
HADOOP_CONF=/etc/hadoop/conf
echo `date` input: $@ >> /tmp/topology.log
while [ $# -gt 0 ] ; do
  nodeArg=$1
  exec< ${HADOOP_CONF}/topo.data
  result=""
  while read line ; do
    ar=( $line )
    if [ "${ar[0]}" = "$nodeArg" ] ; then
      result="${ar[1]}"
    fi
  done
  shift
  if [ -z "$result" ] ; then
    echo -n "/default/rack"
  else
    echo -n "$result"
  fi
done

五、同步文件(所有机器)

5.1.配置环境变量 /etc/profile

export JAVA_HOME=/usr/java/jdk1.7.0_51
export HADOOP_HOME=/usr/lib/hadoop
export HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfs
export HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduce
export HADOOP_YARN_HOME=/usr/lib/hadoop-yarn
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexec
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/bin
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH:/usr/lib/hadoop-hdfs/lib:/usr/lib/hadoop/lib:/usr/lib/hadoop-mapreduce/lib:/usr/lib/hadoop-yarn/lib

5.2.拷贝conf文件夹

    scp -P 51899 -r  /etc/hadoop/conf pe@172.23.27.49:/tmp
    scp -P 51899 -r  /etc/hadoop/conf pe@172.23.27.50:/tmp
    ...
    scp -P 51899 -r  /etc/hadoop/conf pe@172.23.27.56:/tmp
    scp -P 51899 -r  /etc/hadoop/conf pe@172.23.27.57:/tmp

因为环境权限原先,测试环境服务器间的root用户不能直接拷贝东西,

所以切换pe,先把数据拷贝到根目录tmp目录,然后再mv到/etc/hadoop/conf; 端口22被封闭,开放了51899

5.3.拷贝profile环境变量

    scp -P 51899  /etc/profile pe@172.23.27.57:/tmp
    scp -P 51899  /etc/profile pe@172.23.27.56:/tmp
    ...
    scp -P 51899  /etc/profile pe@172.23.27.50:/tmp
    scp -P 51899  /etc/profile pe@172.23.27.49:/tmp


六、启动集群

启动主namenode:(48

             [root@JXQ-23-27-48 conf]# su - hdfs

             -bash-4.1$  hadoop namenode -format

              -bash-4.1$   exit

               [root@JXQ-23-27-48 conf]# service hadoop-hdfs-namenode start

 启动辅 namenode:(49

                注:初次启动时需要,以后通过Journalnode自动同步

                 [root@JXQ-23-27-49~]# sudo -u hdfs hadoop namenode -bootstrapStandby

                 [root@JXQ-23-27-49~]# service hadoop-hdfs-namenode start

         [root@JXQ-23-27-48conf]# jps

                            20232NameNode

                            24067Jps

          [root@JXQ-23-27-49~]# jps

                            19993NameNode

                            23701Jps


                   格式化zk

              [root@JXQ-23-27-48 conf]# su -hdfs

              -bash-4.1$ hdfs zkfc -formatZK

 

                   在任意一个NameNode上下面命令,其会创建一个znode用于自动故障转移。

                   2namenode都启动zkfc

                   servicehadoop-hdfs-zkfc start 或者/etc/init.d/hadoop-hdfs-zkfc start

        

                   查看zk

                   [root@JXQ-23-27-55~]# /usr/lib/zookeeper/bin/zkCli.sh

                   [zk:localhost:2181(CONNECTED) 5] ls /

                   [hadoop-ha,zookeeper]

                   [zk:localhost:2181(CONNECTED) 4] ls /hadoop-ha/m6-hadoop3

                   [ActiveBreadCrumb,ActiveStandbyElectorLock]

                   查看namenode状态:

                   [root@JXQ-23-27-48tmp]# sudo -u hdfs hdfs haadmin -getServiceState nn2  

                   [root@JXQ-23-27-48tmp]# sudo -u hdfs hdfs haadmin -getServiceState nn1 

                   手动切换命令:(把nn1变成standby,nn2变成actiove)

                   [root@JXQ-23-27-48tmp]# sudo -u hdfs hdfs haadmin -failover nn1 nn2

   Failover to NameNode at JXQ-23-27-49.com.cn/172.23.27.49:8020successful

                   [root@JXQ-23-27-48tmp]# sudo -u hdfs hdfs haadmin -getServiceState nn1

                   standby

         启动datanode:(50,51,52,53,54

         [root@JXQ-23-27-50~]# service hadoop-hdfs-datanode start

         [root@JXQ-23-27-51~]# service hadoop-hdfs-datanode start

         [root@JXQ-23-27-52~]# service hadoop-hdfs-datanode start

         [root@JXQ-23-27-53~]# service hadoop-hdfs-datanode start

         [root@JXQ-23-27-54~]# service hadoop-hdfs-datanode start

         查看集群状态:

         [root@JXQ-23-27-48 tmp]# su - hdfs

         -bash-4.1$ hdfs dfsadmin -report

Configured Capacity: 603709177856 (562.25 GB)
Present Capacity: 572255666176 (532.95 GB)
DFS Remaining: 572255567872 (532.95 GB)
DFS Used: 98304 (96 KB)
DFS Used%: 0.00%
Under replicated blocks: 0
Blocks with corrupt replicas: 0
Missing blocks: 0

-------------------------------------------------
Datanodes available: 4 (5 total, 1 dead)

Live datanodes:
Name: 172.23.27.50:50010 (JXQ-23-27-50.com.cn)
Hostname: JXQ-23-27-50.com.cn
Rack: /rack001
Decommission Status : Normal
Configured Capacity: 150927294464 (140.56 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7863377920 (7.32 GB)
DFS Remaining: 143063891968 (133.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.79%
Last contact: Tue Feb 03 14:53:39 CST 2015


Name: 172.23.27.52:50010 (JXQ-23-27-52.com.cn)
Hostname: JXQ-23-27-52.com.cn
Rack: /rack002
Decommission Status : Normal
Configured Capacity: 150927294464 (140.56 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7863377920 (7.32 GB)
DFS Remaining: 143063891968 (133.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.79%
Last contact: Tue Feb 03 14:53:37 CST 2015


Name: 172.23.27.53:50010 (JXQ-23-27-53.com.cn)
Hostname: JXQ-23-27-53.com.cn
Rack: /rack002
Decommission Status : Normal
Configured Capacity: 150927294464 (140.56 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7863377920 (7.32 GB)
DFS Remaining: 143063891968 (133.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.79%
Last contact: Tue Feb 03 14:53:37 CST 2015


Name: 172.23.27.51:50010 (JXQ-23-27-51.com.cn)
Hostname: JXQ-23-27-51.com.cn
Rack: /rack001
Decommission Status : Normal
Configured Capacity: 150927294464 (140.56 GB)
DFS Used: 24576 (24 KB)
Non DFS Used: 7863377920 (7.32 GB)
DFS Remaining: 143063891968 (133.24 GB)
DFS Used%: 0.00%
DFS Remaining%: 94.79%
Last contact: Tue Feb 03 14:53:38 CST 2015


Dead datanodes:
Name: 172.23.27.54:50010 (JXQ-23-27-54.com.cn)
Hostname: JXQ-23-27-54.com.cn
Decommission Status : Normal
Configured Capacity: 0 (0 B)
DFS Used: 0 (0 B)
Non DFS Used: 0 (0 B)
DFS Remaining: 0 (0 B)
DFS Used%: 100.00%
DFS Remaining%: 0.00%
Last contact: Thu Jan 01 08:00:00 CST 1970

         启动yarnresourcemanagernodemanager):(50,51,52,53,54

[root@JXQ-23-27-50 ~]# servicehadoop-yarn-resourcemanager start

[root@JXQ-23-27-50 ~]# servicehadoop-yarn-nodemanager start

[root@JXQ-23-27-51 ~]# servicehadoop-yarn-nodemanager start

[root@JXQ-23-27-52 ~]# servicehadoop-yarn-nodemanager start

[root@JXQ-23-27-53 ~]# servicehadoop-yarn-nodemanager start

[root@JXQ-23-27-54 ~]# servicehadoop-yarn-nodemanager start


七、测试集群

创建普通用户:chensy

[root@JXQ-23-27-50 tmp]#useradd chensy

       [root@JXQ-23-27-50tmp]# su - chensy

 

在hdfs给创建相关目录:

[root@JXQ-23-27-48 conf]# su- hdfs

-bash-4.1$ hadoop fs -ls /

Found 1 items

drwxr-xr-x   - yarn hadoop          0 2015-02-03 14:58 /var

-bash-4.1$ hadoop fs -mkdir/user

-bash-4.1$ hadoop fs -ls /

Found 2 items

drwxr-xr-x   - hdfs hadoop          0 2015-02-03 15:33 /user

drwxr-xr-x   - yarn hadoop          0 2015-02-03 14:58 /var

-bash-4.1$ hadoop fs -mkdir/user/chensy

-bash-4.1$ hadoop fs -ls/user

Found 1 items

      drwxr-xr-x   - hdfs hadoop          0 2015-02-03 15:33 /user/chensy

 

         -bash-4.1$hadoop fs -chown chensy:chensy /user/chensy

         -bash-4.1$  hadoop fs -chmod 700  /user/chensy

创建input目录

                   [chensy@JXQ-23-27-50~]$ hadoop fs -mkdir input

                   [chensy@JXQ-23-27-50~]$ hadoop fs -put /etc/hadoop/conf/*.xml input

 

执行mapreduce:

[chensy@JXQ-23-27-50 ~]$

                            hadoopjar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep input output'dfs[a-z.]+'

故障(临时输入目录未产生,根本原因是job的中间结构目录没有创建)

ERROR security.UserGroupInformation:PriviledgedActionException as:chensy (auth:SIMPLE) cause:org.apache.hadoop.mapreduce.lib.input.InvalidInputException:Input path does not exist: hdfs://m6-hadoop3/user/chensy/grep-temp-1886952718


解决办法(将chensy加入hadoop组或者修改history目录权限)

[root@JXQ-23-27-48 conf]# su - hdfs

-bash-4.1$ hadoop fs -ls /

Found 2 items

drwxr-xr-x  - hdfs hadoop          02015-02-03 15:33 /user

drwxr-xr-x  - yarn hadoop          02015-02-03 14:58 /var

-bash-4.1$ hadoop fs -ls /user

Found 1 items

drwx------  - chensy chensy          02015-02-03 15:48 /user/chensy

-bash-4.1$ hadoop fs -mkdir /user/history

-bash-4.1$ hadoop fs -mkdir/user/history/intermediate

-bash-4.1$ hadoop fs -mkdir/user/history/done

-bash-4.1$ hadoop fs -chmod 775  /user/history

-bash-4.1$ hadoop fs -ls /user/history

Found 2 items

drwxr-xr-x  - hdfs hadoop          02015-02-03 15:53 /user/history/done

drwxr-xr-x  - hdfs hadoop          02015-02-03 15:53 /user/history/intermediate

 

-bash-4.1$ hadoop fs -chownmapred:hadoop  /user/history/

-bash-4.1$ hadoop fs -chownmapred:hadoop  /user/history/intermediate

-bash-4.1$ hadoop fs -chownmapred:hadoop  /user/history/done

-bash-4.1$ hadoop fs -chmod 777  /user/history

-bash-4.1$ hadoop fs -ls /user/history

Found 2 items

drwxrwxrwx  - mapred hadoop          02015-02-03 15:53 /user/history/done

drwxrwxrwx  - mapred hadoop          02015-02-03 16:28 /user/history/intermediate

 

更改输出目录output123后再次执行mr:

[chensy@JXQ-23-27-50 ~]$

                            hadoopjar /usr/lib/hadoop-mapreduce/hadoop-mapreduce-examples.jar grep input output123'dfs[a-z.]+'

 

OK,完工!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

撸依天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值