前骤:
Hadoop Cluster中的Daemon
HDFS:
NameNode,NN
SecondaryNode,SNN
DataNode:DN
/data/hadoop/hdfs/{nn,snn,dn}
nn:fsimage,editlog//镜像和编辑日志
//hdfs的NN是在内存中存放数据,不断根据文件状态改变,修改元数据
fsimage存放了:文件分割后存放在哪些node上
//文件元数据的改变,会写入到editllog中,最后写入到fsimage中,因此下次NN重启后数据依然存在,从fsimage中读取数据,获取到内存中
//一旦nn崩溃,数据恢复需要大量的时间
snn:在nn崩溃的时候,及时顶上去,省去修复nn,让nn重新上线的时间,但是各个data node报告数据状态,进行修复的时间依然需要。
正常情况下:snn负责copy nn的fsimage和editlog然后在snn上合并
checkpoint:因为nn是在不断变化的,因此snn要指定合并到那个时间点上。
//官方建议30个以上的node构建hadoop集群
data是否需要工作于raid//因为hdfs已经有replicate的功能,因此再次提供冗余的必要性不大
hadoop-daemon.sh 运行进程
在集群模式中hadoop-daemon.sh start DataNode时,需要自动的找每一个DataNode节点,然后在每一个DataNode上自动启动。
如何找到,或者如何保证命令能够通过主控节点,自动连接到各从节点,并且有权限执行命令。
在主节点上:配置
YARN:
ResourceManager
NodeManager:
yarn-daemon.sh start/stop
实际运行进程:
【NN】 【SNN】 【RM】
| | |
---------------------------------
[node1/NN] [nod2/NN] [node3/NN]
在node上启动:datanode进程和nodemanager进程即可
实验模型:
【NN/SNN/RM】
|
-----------------------------------------
[node1/NN] [nod2/NN] [node3/NN]
主控节点上运行:namenode,secondarynamenode,resourcemanager三个进程
其他node上启动:datanode进程和nodemanager进程
预备:
1.ntpdate 同步
tzselect,
timedatactl //查看时区设置
timedatectl list-timezones # 列出所有时区
timedatectl set-local-rtc 1 # 将硬件时钟调整为与本地时钟一致, 0 为设置为 UTC 时间
timedatectl set-timezone Asia/Shanghai # 设置系统时区为上海
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime //最简单的方案
2.hosts通信
172.16.100.67 node1.mt.com node1 master
172.16.100.68 node2.mt.com node2
172.16.100.69 node3.mt.com node3
172.16.100.70 node4.mt.com node4
如果需要通过master节点启动或停止整个集群,需要在master上配置运行服务的用户,如hdfs和yarn能够基于密钥ssh链接
node1:
一、前奏
(1)配置环境
vim /etc/profile.d/java.sh
JAVA_HOME=/usr
yum install java-1.8.0-openjdk-devel.x86_64
scp /etc/profile.d/java.sh node2:/etc/profile.d/
scp /etc/profile.d/java.sh node3:/etc/profile.d/
scp /etc/profile.d/java.sh node4:/etc/profile.d/
vim /etc/profile.d/hadoop.sh
export HADOOP_PREFIX=/bdapps/hadoop
export PATH=$PATH:${HADOOP_PREFIX}/bin:${HADOOP_PREFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PREFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PREFIX}
export HADOOP_COMMON_HOME=${HADOOP_PREFIX}
export HADOOP_HDFS_HOME=${HADOOP_PREFIX}
. /etc/profile.d/hadoop.sh
scp /etc/profile.d/hadoop.sh node2:/etc/profile.d/
scp /etc/profile.d/hadoop.sh node3:/etc/profile.d/
scp /etc/profile.d/hadoop.sh node4:/etc/profile.d/
(2)修改hosts文件
vim /etc/hosts
172.16.100.67 node1.mt.com node1 master
172.16.100.68 node2.mt.com node2
172.16.100.69 node3.mt.com node3
172.16.100.70 node4.mt.com node4
scp 到 node2,node3,node4
(3)hadoop 密钥登录
useradd hadoop //node2,3,4都有一个hadoop用户
echo "hadoop" | passwd --stdin hadoop
useradd -g hadoop hadoop //这里都使用一个用户,也可以分别创建yarn和hdfs用户
su - hadoop
ssh-keygen
for i in 2 3 4; do ssh-copy-id -i .ssh/id_rsa.pub hadoop@node${i}; done
验证:
ssh node2 ‘date‘
ssh node3 ‘date‘
ssh node4 ‘date‘
二、安装部署hadoop
(1)解压
mkdir -pv /bdapps/ /data/hadoop/hdfs/{nn,snn,dn} //这里的dn是用不到的,因为主控节点是不存储数据的,可以不创建
chown -R hadoop:hadoop /data/hadoop/hdfs
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2 hadoop
cd hadoop
mkdir logs
chown g+w logs
chown -R hadoop:hadoop ./*
(2)配置文件修改
1.core-site.xml 配置
vim etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
//hdfs的访问接口,master如果不能解析,用ip地址也可以
<final>true</final>
</property>
</configuration>
//core指向NN
2.yanr-site.xml文件配置
vim etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<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.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
</configuration>
//%s/localhost/master/g //替换localhost为master
//指向ResourceManager
3.hdfs-site.xml配置
vim etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name> //dfs的副本数量
<value>2</value>
</property>
<proporty>
<name>dfs.namenode.name.dir</name>
<value>file:///data/hadoop/hdfs/nn</value>
</property>
<proporty>
<name>dfs.datanode.data.dir</name>
<value>file:///data/hadoop/hdfs/dn</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
<property>
<name>fs.checkpoint.edits.dir</name>
<value>file:///data/hadoop/hdfs/snn</value>
</property>
</configuration>
4.
mapred-site.xml 是唯一不需要修改的
默认的就是yarn就可以
5.
vim slaves
node2
node3
node4
//slaves是datanode和nodemanager
(3)
在node2,node3,node4指定到该步骤后:chown -R hadoop:hadoop ./*
su - hadoop
scp /bdapps/hadoop/etc/hadoop/* node2:/bdapps/hadoop/etc/hadoop/
scp /bdapps/hadoop/etc/hadoop/* node3:/bdapps/hadoop/etc/hadoop/
scp /bdapps/hadoop/etc/hadoop/* node4:/bdapps/hadoop/etc/hadoop/
三.格式化然后启动
su - hadoop
hdfs namenode -format
显示/data/hadoop/hdfs/nn hash been successful formatted 表示成功
启动hadoop方式有两种:
1.在各节点上分别启动要启动的服务
启动yarn服务要使用yarn用户身份
master节点:NameNode服务和ResourceManager服务
su - hdfs -c ‘hadoop-daemon.sh start namenode‘
su - hdfs -c ‘yarn-daemon.sh start resourcemanager‘
slave节点:DataNode服务和NodeManager服务
su - hdfs -c ‘hadoop-daemon.sh start datanode‘
su - hdfs -c ‘yarn-daemon.sh start nodemanager‘
2.在master上启动整个集群
su - hdfs -c ‘start-dfs.sh‘
su - hdfs -c ‘start-yarn.sh‘
老版本通过start-all.sh和stop-all.sh来控制hdfs和mapreduce
启动服务:
su - hdfs -c ‘start-dfs.sh‘
su - hdfs -c ‘stop-dfs.sh‘ //关闭hdfs
会提示在,2,3,4节点上启动
su - hdfs -c ‘start-yarn.sh‘
master启动resourcemanager
slave上启动nodemanager
测试:
node3: su - hadoop
jps //查看DataNode进程和NodeManager进程
node1:su - hadoop
jps //启动的有secondaryNameNode和NameNode进程
hdfs dfs -mkdir /test
hdfs dfs -put /etc/fstab /test/fstab
hdfs dfs -ls -R /test
hdfs dfs -cat /test/fstab
node3:
ls /data/hadoop/hdfs/dn/current/..../blk,... 存储在这里
注意:node2,3,4中有一个是没有存储该文件的,因为定义的slaves 为2个
vim etc/hadoop/hdfs-site.xml
<name>dfs.replication</name> //dfs的副本数量
<value>2</value>
Web接口查看:
172.16.100.67:8088
内存显示为24G,因为3G,每个node的物理内存代大小为8G
172.16.100.67:50070
datanode: 有三个
单个文件太小的是不会被切割的,大于64M的文件会被切片
可以直接上传压缩文件,会被切块
运行任务测试:
yarn jar /bdapps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-example-2.6.jar wordcount /test/fstab /test/functions /test/wc
hdfs dfs cat /test/wc/part-r-0000
四、其他节点
node2:
user hadoop
echo "hadoop" | passwd --stdin hadoop
mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} //只有dn有用
chown -R hadoop:hadoop /data/hadoop/hdfs/
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2 hadoop
cd hadoop
mkdir logs
chown g+w logs
chown -R hadoop:hadoop ./*
//可以在修改配置文件后,直接复制到node3和node4上因为配置都一样
node3:
user hadoop
echo "hadoop" | passwd --stdin hadoop
mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} //只有dn有用
chown -R hadoop:hadoop /data/hadoop/hdfs/
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2 hadoop
cd hadoop
mkdir logs
chown g+w logs
chown -R hadoop:hadoop ./*
node4:
user hadoop
echo "hadoop" | passwd --stdin hadoop
mkdir -pv /bdapps /data/hadoop/hdfs/{nn,snn,dn} //只有dn有用
chown -R hadoop:hadoop /data/hadoop/hdfs/
tar xvf hadoop-2.6.2.tar.gz -C /bdapps/
cd /bdapps/
ln -sv hadoop-2.6.2 hadoop
cd hadoop
mkdir logs
chown g+w logs
chown -R hadoop:hadoop ./*
=====================================================
yarn的集群管理命令
yarn [--config confdir] COMMAND
resourcemanager-format-state-store //删除RMStateStore
resourcemanager //运行ResourceManager
nodemanaer //运行nodemanager on each slave
timelineserver //运行timelineserver,任务编排,时间线
rmadmin //resourcemanager管理
version
jar //运行jar文件
application //显示application信息
report/kill application
applicationattempt //尝试运行相关报告
container //容器相关信息
node //显示node
queue //报告队列信息
logs //备份容器日志
classpath //显示java运行程序时的类加载路径
daemonlog //获取守护进程的日志级别
jar,application,node,logs,classpath,version 是常用的用户命令
resourcemanager,nodemanager,proxyserver,rmadmin,daemon是常用的管理类命令
yarn application [options]
-status ApplicationID 状态信息
yarn application -status application_1494685700454_0001
-list 列出yarn上的application列表
-appTypes:MAPREDUCE,YARN
-appStates:ALL,NEW,NEW_SAVING,SUBMITTED,ACCEPTED,RUNNING,FINISHED,FAILED,KILLED
yarn application -appStates=all
-kill ApplicationID
yarn node
-list //例出node列表
-states: NEW,RUNNING,UNHEALTHY不健康,DECOMMISSION退役的,LOST,REBOOTED
-staus Node-ID //显示节点信息
logs:显示已经完成的YARN程序的日志(及状态为:FAILED,KILLED,FINISHED)
如果需要在命令行查看日志需要配置yarn-site.xml
yarn.log-aggregation-enable 属性值为true
yarn logs -applicationId [applicationID] [options]
-applicationId applicationID必备选项,用于从ResourceManager获取其详细信息。
-appOwner APPOwner默认为当前用户,可选
-nodeAddress NodeAddress -containerId containerID:获取当前指定节点上指定容器的相关信息;其中NodeAddress的格式同NodeId
classpath:
yarn calasspath //加载java程序路径
管理命令:
rmadmin
nodemanager
timelineserver
rmadmin是ResourceManager的客户端程序,可用于刷新访问控制策略、调度器队列及注册到RM上的节点等。
刷新之后,无需重启即可生效。
yarn rmadmin [options]
-help
-refreshQueues:重载队列的acl,状态及调用器队列;它会根据配置文件中的配置信息重新初始化调度器
-refreshNodes:为RM刷新主机信息,它通过读取RM节点的include和exclude文件来更新集群需要包含或排除的节点列表。
-refreshUserToGroupMappings:根据配置的Hadoop安全组映射,通过刷新组缓存中的信息来更新用户和组之间的映射关系。
-refreshSuperUserGroupsConfiguration:刷新超级用户代理组映射,以及更新代理主机和core-site.xml配置文件中的hadoop.proxyuser属性定义的代理组
-refreshAdminAcls:根据yarn站点配置文件或默认配置文件的yarn.admin.acl属性刷新RM的管理ACL;
-refreshServiceAcl:重载服务级别授权策略文件,而后RM将重载授权策略文件;它会检查hadoop安全授权是否启用并为IPC Server,ApplicationMaster,Client及Resource tracker刷新ACL;
DaemonLog:查看或更细
http://host:port/logLevel?log=name service?
yarn daemonlog [options] args
-getLevel host:port name:显示指定守护进程的日志级别
-getLevel host:port level:设置守护进程的日志级别
运行YARN application
yarn application可以是一个shell脚本,MapReduce作业或者其他类型的任意作业。
步骤:
1.Application初始化提交 //client端完成
2.分配内存并启动AM //RM完成
3.AM注册及资源分配 //AM在nodemanager上完成
4.启动并监控容器 //AM向NM报告,NM报告RM完成
5.Application进度报告 //AM完成
6.Application进度完成 //
利用ambari部署hadoop集群
https://www.ibm.com/developerworks/cn/opensource/os-cn-bigdata-ambari/
https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.5.0
IBM官方技术论坛:https://www.ibm.com/developerworks/cn/opensource/
Ambari 2.2.2 下载资源
OS Format URL
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.2.0
http://public-repo-1.hortonworks.com/ambari/centos6/2.x/updates/2.2.2.0/ambari.repo
http://public-repo-1.hortonworks.com/ambari/centos7/2.x/updates/2.2.2.0/ambari-2.2.2.0-centos7.tar.gz
HDP 2.4.2 下载资源
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0/hdp.repo
http://public-repo-1.hortonworks.com/HDP/centos7/2.x/updates/2.4.2.0/HDP-2.4.2.0-centos7-rpm.tar.gz
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos7
http://public-repo-1.hortonworks.com/HDP-UTILS-1.1.0.20/repos/centos7/HDP-UTILS-1.1.0.20-centos7.tar.gz
原文地址:http://hmtk520.blog.51cto.com/12595610/1944156