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=0yum 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用于自动故障转移。
2个namenode都启动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
启动yarn(resourcemanager、nodemanager):(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,完工!
- hadoop-CDH4.7部署(详细)
- CDH4.1(hadoop-2.0.0-cdh4.1.2)安装部署文档
- CDH4.1(hadoop-2.0.0-cdh4.1.2)安装部署文档
- CDH4.1(hadoop-2.0.0-cdh4.1.2)安装部署文档
- CDH4.1(hadoop-2.0.0-cdh4.1.2)安装部署文档
- Hadoop (CDH4发行版)集群部署 (部署脚本,namenode高可用,hadoop管理)
- Hadoop-CDH4的部署包的文件结构
- hadoop cdh4 下载地址
- hadoop cdh4 eclipse plugin
- hadoop cdh4 文件结构
- 手动安装cloudera cdh4.2 hadoop + hbase + hive(一)
- 手动安装cloudera cdh4.2 hadoop + hbase + hive(二)
- 手动安装cloudera cdh4.2 hadoop + hbase + hive(三)
- hadoop cdh4.5 mapreduce yarn 配置文件 (接上文)
- 将Chukwa 0.5部署在基于Cloudera CDH4的Hadoop集群上
- cdh4.2.1安装部署各目录用户组及权限详细说明
- Cloudra Hadoop 发行版 (CDH4)
- Hadoop CDH4伪分布式安装
- 利用phantomjs+casperjs实现登陆抓取网页并截图
- j2ee开发防止表单重复提交三大解决方案
- [leetcode] Symmetric Tree
- The method getDispatcherType() is undefined for the type HttpServletRequest的解决方法
- 如何提交app store 申请应用的加急审核
- hadoop-CDH4.7部署(详细)
- LTE协议之用户面与控制面UE侧协议结构
- java虚拟机的内存是如何分布的
- Android 剪贴板操作方法在不同版本API下的使用
- pppd chat中文帮助
- VS2013过期激活,VS2013激活,vs2013序列号,VS2013密钥,VS013产品密匙
- 网页制作常用代码集合
- hdu 5122 K.Bro Sorting [ACM/ICPC 2014 北京站现场赛]
- android开发笔记之反编译apk(一)