Hadoop2.7.1集群安装流程:
1.硬件配置:
1台:Namenode 24核3.5g 256G内存 硬盘1.8T
2台:Datanode 24核3.5g 256G内存硬盘1.8T
以上均为物理机
2.配置域名解析
编辑/etc/sysconfig/network, hostname要编辑成如下形式
图1
编辑/etc/hosts
图2
图1和图2均为namenode上的配置,dw-server20-30.wlt为主机名,两个地方需要保持一致
3.配置ssh公钥密钥自动登录
使用的命令有:ssh-keygen -t rsa
产生了两个文件,私钥文件:id_raa公钥文件:id_rsa.pub
cat id_rsa.pub >> authorized_keys
再把产生的文件拷贝到datanode的相应目录中
scp ./* root@dn1:/root/.ssh/
把两类文件从namenode上copy到datanode上,
Scp /root/.ssh/* root@dn1:/root/.ssh
Scp /etc/hosts root@dn1:/etc/
再测试从namenode到datanode的无钥密自动登录
免密码登录失败的常见原因,无非是目录权限问题:
1. 当前用户的主目录,建议配置成700, chmod 700 /home/dba
2. .ssh目录的权限,建议配置成700,chmod 700 /home/dba/.ssh
3. authorized_keys文件的权限,建议配置成600或者644,chmod600 /home/dba/.ssh/ authorized_keys
4.下载并配置jdk
下载jdk1.7.0_79.tar.gz
解压 tar –zxvf jdk1.7.0_79.tar.gz
编辑/etc/profile,添加
exportJAVA_HOME=/home/huzhihua/jdk1.7.0_79
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
exportPATH=$PATH:$JAVA_HOME/bin
5.安装hadoop2.7.1
1) 下载并解压hadoop-2.7.1.tar.gz
]# tar –zxvf hadoop-2.7.1.tar.gz
2) 把安装目录移动到/home/hadoop
]#mv hadoop-2.7.1 /home/hadoop //统一放到/home/hadoop下,方便管理
3) 创建目录
创建tmp hdfs/name hdfs/data
]#mkdir –p tmp hdfs/name hdfs/data
注:Hdfs/data为datanode上的hdfs的存放目录,hdfs/name为namenode上hdfs的存放目录,tmp为临时目录
4) 配置各种配置文件
各种配置文件包括:core-site.xml、yarn-site.xml、mapred-site.xml、hdfs-site.xml、slaves
我们可以通过apache的官网去查询各种配置文件的范本,地址http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-common
每个配置属性后面都有相应的默认配置和解释
目录在${HADOOP_HOME}/etc/hadoop下
Core-site.xml的配置如下
<configuration>
<property>
<name>fs.defaultFS</name> //配置namenode的地址
<value>hdfs://nn </value>//端口默认为8020
</property>
<property>
<name>hadoop.tmp.dir</name> //配置tmp目录
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>//sequencefile的read/write的buffer,默认是物理页大小4096的整数倍
<value>131072</value>
</property>
</configuration>
Hdfs-site.xml的配置
<configuration>
<property>
<name>dfs.namenode.name.dir</name>//namenode的hdfs的路径
<value>file:///home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> //datanode的hdfs路径
<value>file:///home/hadoop/hdfs/data</value>
</property>
<property>
<name>hadoop.tmp.dir</name>//tmp路径
<value>/home/hadoop/tmp</value>
</property>
<property>
<name>dfs.replication</name> //datanode个数
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name> //第二个namenode的地址和端口,可以不在本机
<value>172.16.19.201:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
mapred-site.xml的配置
<configuration>
<property>
<name>mapreduce.framework.name</name>// mapreduce的调度程序指定为hadoop yarn
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>//查看mapreduce的历史情况
<value>172.16.19.201:10020</value>
</property>
<property>
<name>mapreduce.cluster.local.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>172.16.19.201:19888</value>
</property>
</configuration>
Yarn-site.xml的配置
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>//shuffle service that needed to be set for mapreduceapplication
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>//resourcemanager的地址和端口
<value>172.16.19.201:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>//application master用来获取调度资源的地址和端口
<value>172.16.19.201:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>//resoucemanager对nodemananger开放的地址和端口
<value>172.16.19.201:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>172.16.19.201:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>172.16.19.201:8088</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>30720</value>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx2048m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2048m</value>
</property>
</configuration>
5) 配置hadoop-env.sh、yarn-env.sh的JAVA_HOME
exportJAVA_HOME=/home/huzhihua/jdk1.7.0_79
配置slaves,删除默认的localhost,增加两个节点
Dn1
Dn2
6.把配置好的整个hadoop目录scp到各个从节点上
scp -r hadoop/ root@dn1:/home/
scp -r hadoop/root@dn2:/home/
7.修改环境变量
编辑/etc/profile,把hadoop的各个路径配置进去,再source /etc/profile,使配置生效
8 在namenode上启动hadoop
进入/home/hadoop/hadoop-2.7.1目录
1) 初始化文件系统,hdfs namenode –format
]#hdfs namenode-format
2) 启动hadoop
可以start-all.sh来启动hdfs和yarn,也可以单独start-dfs.sh,start-yarn.sh来分别启动hdfs和yarn
3) 停止hadoop
可以stop-all.sh来全部停止服务,也可以stop-dfs.sh和stop-yarn.sh来分别停止
4) 查看进程启动情况
可以使用jps命令来查看各个节点上的启动情况
Namenode
Datanode
5) 启动历史任务服务器
Mr-jobhistory-daemon.sh start historyserver
9 查看hadoop的cluster运行情况
在浏览器里输入172.16.19.201:8088
查看hdfs的使用情况,可以输入172.16.19.50070
Hadoop安装过程遇到的问题:
1.主机名没配置
Incorrectconfiguration: namenode address dfs.namenode.servicerpc-address ordfs.namenode.rpc-address is not configured.
问题core-site.xml里面fs.defaultFS没有配置,需要添加如下
<property>
<name>fs.defaultFS</name>
<value>hdfs://bhm:9000</value>//bhm为namenode的别名
</property>
2.Distcp出错
hadoop distcphdfs://172.16.19.73//bi/wlt_user_tag/cloud_page_mobile_mapping_ft0 /tmp
报错:
Error:java.io.IOException: File copy failed: hdfs://172.16.19.73/bi/wlt_user_tag/cloud_page_mobile_mapping_ft0/000001_0--> hdfs://bhm:9000/tmp/cloud_page_mobile_mapping_ft0/000001_0
解决:加上选项-update –skipcrccheck
3.启动Jobhistoryserver
Sbin/mr-jobhistory-daemon.sh starthistoryserver
Yarn 架构:
包含3大块,resource manager, Application master ,node manager
Resource manager
包括调度器和应用程序管理器
1. 调度器,负责资源的分配和调度
调度器仅根据各个应用程序的资源需求进行资源分配,而资源分配单位用一个抽象概念“资源容器”(ResourceContainer,简称Container)表示,Container是一个动态资源分配单位,它将内存、CPU、磁盘、网络等资源封装在一起
2. 应用程序管理器
负责启动应用程序,与调度器协商启动application master(AM),监控AM的运行状态以及失败时重启
Application master(AM)
与RM协商获得资源
进一步分配子任务
与node manager通信,来启动/停止任务
监控所有任务的运行情况,任务失败时重新申请资源来重启任务
Node manager(NM)
定时向RM汇报本节点的资源使用情况,还有contianer的运行状况,向RM发心跳
出来来自AM的启动/停止container的请求
Container
抽象出来的资源单位,包括了CPU、内存、网络IO、磁盘等资源。
当AM向RM申请资源的时候,RM向AM返回的资源就是用Container表示的。
Yarn会为每个任务分配一个container。
Yarn的工作流程
步骤1 用户向YARN中提交应用程序,其中包括ApplicationMaster程序、启动ApplicationMaster的命令、用户程序等。
步骤2ResourceManager为该应用程序分配第一个Container,并与对应的Node-Manager通信,要求它在这个Container中启动应用程序的ApplicationMaster。
步骤3ApplicationMaster首先向ResourceManager注册,这样用户可以直接通过ResourceManager查看应用程序的运行状态,然后它将为各个任务申请资源,并监控它的运行状态,直到运行结束,即重复步骤4~7。
步骤4ApplicationMaster采用轮询的方式通过RPC协议向ResourceManager申请和领取资源。
步骤5 一旦ApplicationMaster申请到资源后,便与对应的NodeManager通信,要求它启动任务。
步骤6NodeManager为任务设置好运行环境(包括环境变量、JAR包、二进制程序等)后,将任务启动命令写到一个脚本中,并通过运行该脚本启动任务。
步骤7 各个任务通过某个RPC协议向ApplicationMaster汇报自己的状态和进度,以让ApplicationMaster随时掌握各个任务的运行状态,从而可以在任务失败时重新启动任务。
在应用程序运行过程中,用户可随时通过RPC向ApplicationMaster查询应用程序的当前运行状态。
步骤8 应用程序运行完成后,ApplicationMaster向ResourceManager注销并关闭自己。