hadoop-CDH4.7部署(详细)

来源:互联网 发布:苹方字体windows版 编辑:程序博客网 时间:2024/05/21 03:27

一、准备工作

 申请开通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=Basebaseurl=http://172.23.64.71/centos6.4-x86_64enabled=1gpgcheck=0[updates]name=updatesbaseurl=http://172.23.64.71/repos/6.4-updatesgpgcheck=0enabled=1[cdh]name=cdhbaseurl=http://172.23.64.71/repos/cdh/4enabled=1gpgcheck=0[ext]name=extbaseurl=http://172.23.64.71/repos/cloudera-gplextras4enabled=1gpgcheck=0[epel]name=epelbaseurl=http://172.23.64.71/repos/epelenabled=1gpgcheck=0[gfs]name=gfsbaseurl=http://172.23.64.71/repos/gfsenabled=1gpgcheck=0
yum  clean  all

1.2  配置/etc/hosts

127.0.0.1   localhost localhost.localdomain172.23.27.48   JXQ-23-27-48.com.cn172.23.27.49   JXQ-23-27-49.com.cn172.23.27.50   JXQ-23-27-50.com.cn172.23.27.51   JXQ-23-27-51.com.cn172.23.27.52   JXQ-23-27-52.com.cn172.23.27.53   JXQ-23-27-53.com.cn172.23.27.54   JXQ-23-27-54.com.cn172.23.27.55   JXQ-23-27-55.com.cn172.23.27.56   JXQ-23-27-56.com.cn172.23.27.57   JXQ-23-27-57.com.cn

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

1.4 配置无密登录

cd  ~/.sshssh-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.rpmalternatives --install /usr/bin/java java /usr/java/default/bin/java 3alternatives --config javaalternatives --install /usr/bin/java java /usr/java/latest/bin/java 1600alternatives --auto javaalternatives --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=50tickTime=2000initLimit=10syncLimit=5dataDir=/var/lib/zookeeperclientPort=2181server.1= JXQ-23-27-55.com.cn:2888:3888server.2= JXQ-23-27-56.com.cn:2888:3888server.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选项来启动NameNodeNameNode将从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   /rack001172.23.27.51   /rack001172.23.27.52   /rack002172.23.27.53   /rack002172.23.27.54   /rack002

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

#!/bin/shHADOOP_CONF=/etc/hadoop/confecho `date` input: $@ >> /tmp/topology.logwhile [ $# -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"  fidone

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

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

export JAVA_HOME=/usr/java/jdk1.7.0_51export HADOOP_HOME=/usr/lib/hadoopexport HADOOP_HDFS_HOME=/usr/lib/hadoop-hdfsexport HADOOP_MAPRED_HOME=/usr/lib/hadoop-mapreduceexport HADOOP_YARN_HOME=/usr/lib/hadoop-yarnexport HADOOP_COMMON_HOME=${HADOOP_HOME}export HADOOP_LIBEXEC_DIR=${HADOOP_HOME}/libexecexport HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoopexport HDFS_CONF_DIR=${HADOOP_HOME}/etc/hadoopexport YARN_CONF_DIR=${HADOOP_HOME}/etc/hadoopexport PATH=$PATH:$JAVA_HOME/bin:$SCALA_HOME/binexport 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: 0Blocks with corrupt replicas: 0Missing 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.cnRack: /rack001Decommission Status : NormalConfigured 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 2015Name: 172.23.27.52:50010 (JXQ-23-27-52.com.cn)Hostname: JXQ-23-27-52.com.cnRack: /rack002Decommission Status : NormalConfigured 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 2015Name: 172.23.27.53:50010 (JXQ-23-27-53.com.cn)Hostname: JXQ-23-27-53.com.cnRack: /rack002Decommission Status : NormalConfigured 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 2015Name: 172.23.27.51:50010 (JXQ-23-27-51.com.cn)Hostname: JXQ-23-27-51.com.cnRack: /rack001Decommission Status : NormalConfigured 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 2015Dead datanodes:Name: 172.23.27.54:50010 (JXQ-23-27-54.com.cn)Hostname: JXQ-23-27-54.com.cnDecommission Status : NormalConfigured 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
原创粉丝点击