环境要求
需要有三台 Centos7 服务器,并都需要完成下面的配置要求:
- 关闭防火墙
- 新建普通用户
me
- 阿里云时钟同步服务器
- 配置免密登陆
- 关闭
selinux
- 配置
xsync
、xcall
同步脚本 - 配置
jdk8
环境 - 确保端口
8020,50090,50070,10020,19888,8088
端口没有被占用
环境准备可以参考我下面的博文:
集群规则
说明:
- 除特别说明外,本文的所有操作均在master节点、使用me这个非root用户执行
- 命令中出现的IP域名,均需要替换为自己集群中的IP域名【必须】
- 命令中出现的
/home/lbs/software
路径,可选择替换为自定义路径【可选】
服务器 IP域名 | master | node1 | node2 |
---|---|---|---|
HDFS | NameNode | ||
HDFS | SecondaryNameNode | ||
HDFS | DataNode | DataNode | DataNode |
YARN | ResourceManager | ||
YARN | NodeManager | NodeManager | NodeManager |
历史日志服务器 | JobHistoryServer |
安装集群
-
从百度云下载资源包
hadoop-2.6.0-cdh5.14.2_after_compile.tar.gz
,并上传到master
服务器https://pan.baidu.com/s/1nSUqi50p5u0skUAn4A-i-A?pwd=z8d7
-
解压
hadoop-2.6.0-cdh5.14.2_after_compile.tar.gz
到指定安装路径,并重命名目录为hadoop
tar -zxvf hadoop-2.6.0-cdh5.14.2_after_compile.tar.gz -C /home/lbs/software mv /home/lbs/software/hadoop-2.6.0-cdh5.14.2 /home/lbs/software/hadoop
-
进入到
/home/lbs/software/hadoop
目录,执行下面命令检查环境配置是否符合要求[me@master hadoop]$ ./bin/hadoop checknative 24/04/15 17:09:57 INFO bzip2.Bzip2Factory: Successfully loaded & initialized native-bzip2 library system-native 24/04/15 17:09:57 INFO zlib.ZlibFactory: Successfully loaded & initialized native-zlib library Native library checking: hadoop: true /home/lbs/software/hadoop/lib/native/libhadoop.so.1.0.0 zlib: true /lib64/libz.so.1 snappy: true /lib64/libsnappy.so.1 lz4: true revision:10301 bzip2: true /lib64/libbz2.so.1 openssl: true /lib64/libcrypto.so
如果有
false
项,则需要使用yum
进行安装,直到全部为true
-
配置
hadoop-env.sh
文件vim /home/lbs/software/hadoop/etc/hadoop/hadoop-env.sh # 注释掉之前的内容,新增实际的jdk路径 # export JAVA_HOME=${JAVA_HOME} export JAVA_HOME=/app/jdk
-
配置
core-site.xml
echo '<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/lbs/software/hadoop/hadoopDatas/tempDatas</value> </property> <!-- 缓冲区大小,实际工作中根据服务器性能动态调整 --> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> <!-- 开启hdfs的垃圾桶机制,删除掉的数据可以从垃圾桶中回收,单位分钟 --> <property> <name>fs.trash.interval</name> <value>10080</value> </property> </configuration>' > /home/lbs/software/hadoop/etc/hadoop/core-site.xml
-
配置
hdfs-site.xml
echo '<?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <!-- NameNode存储元数据信息的路径,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:50090</value> </property> <property> <name>dfs.namenode.http-address</name> <value>master:50070</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/lbs/software/hadoop/hadoopDatas/namenodeDatas</value> </property> <!-- 定义dataNode数据存储的节点位置,实际工作中,一般先确定磁盘的挂载目录,然后多个目录用,进行分割 --> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/lbs/software/hadoop/hadoopDatas/datanodeDatas</value> </property> <property> <name>dfs.namenode.edits.dir</name> <value>file:///home/lbs/software/hadoop/hadoopDatas/dfs/nn/edits</value> </property> <property> <name>dfs.namenode.checkpoint.dir</name> <value>file:///home/lbs/software/hadoop/hadoopDatas/dfs/snn/name</value> </property> <property> <name>dfs.namenode.checkpoint.edits.dir</name> <value>file:///home/lbs/software/hadoop/hadoopDatas/dfs/nn/snn/edits</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.permissions</name> <value>false</value> </property> <property> <name>dfs.blocksize</name> <value>134217728</value> </property> <!--hdfs web端ui取消ip限制--> <property> <name>dfs.namenode.http-address</name> <value>0.0.0.0:50070</value> </property> </configuration>' > /home/lbs/software/hadoop/etc/hadoop/hdfs-site.xml
-
配置
mapred-site.xml
echo '<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.job.ubertask.enable</name> <value>true</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>0.0.0.0:19888</value> </property> </configuration>' > /home/lbs/software/hadoop/etc/hadoop/mapred-site.xml
-
配置
yarn-site.xml
<?xml version="1.0"?> <configuration> <!-- 节点管理器可用的 CPU 核心总数 --> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>12</value> </property> <!-- 调度器可以分配给一个容器的最大 vcore 数 --> <property> <name>yarn.scheduler.maximum-allocation-vcores</name> <value>4</value> </property> <!-- 调度器可以分配给一个容器的最小 vcore 数 --> <property> <name>yarn.scheduler.minimum-allocation-vcores</name> <value>1</value> </property> <!-- 节点管理器可用的内存总量(MB) --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>34000</value> </property> <!-- 调度器可以分配给一个容器的最大内存量(MB) --> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>34000</value> </property> <!-- 调度器可以分配给一个容器的最小内存量(MB) --> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>1024</value> </property> <!-- 资源管理器的主机名 --> <property> <name>yarn.resourcemanager.hostname</name> <value>one</value> </property> <!-- 节点管理器的辅助服务(例如 MapReduce Shuffle) --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 资源管理器 Web 界面的访问地址 --> <property> <name>yarn.resourcemanager.webapp.address</name> <value>0.0.0.0:8088</value> </property> </configuration>
-
配置
slaves
echo 'master node1 node2' > /home/lbs/software/hadoop/etc/hadoop/slaves
-
创建所需目录
mkdir -p /home/lbs/software/hadoop/hadoopDatas/tempDatas mkdir -p /home/lbs/software/hadoop/hadoopDatas/namenodeDatas mkdir -p /home/lbs/software/hadoop/hadoopDatas/datanodeDatas mkdir -p /home/lbs/software/hadoop/hadoopDatas/dfs/nn/edits mkdir -p /home/lbs/software/hadoop/hadoopDatas/dfs/snn/name mkdir -p /home/lbs/software/hadoop/hadoopDatas/dfs/nn/snn/edits
-
分发
/home/lbs/software/hadoop
文件夹到集群中的其他两台机器xsync /home/lbs/software/hadoop
-
分别登录到集群中三台机器,都配置
hadoop
到环境变量中sudo vim /etc/profile # Hadoop export HADOOP_HOME=/home/lbs/software/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin # 最后重新加载环境变量 source /etc/profile
启动集群
-
首先格式化hdfs(仅第一次启动时需要!后续启动请勿重复执行)
hdfs namenode -format
-
依次启动
hdfs
、yarn
、historyserver
注意:下面的三条命令逐一执行,而不是一下全部执行
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
集群验证
-
首先验证各节点Java进程情况
[me@master bin]$ xcall jps ================current host is master================= --> execute command "jps" 25985 JobHistoryServer 24419 DataNode 26261 Jps 24219 NameNode 25292 ResourceManager 25437 NodeManager 24750 SecondaryNameNode Command executed successfully on master ================current host is node1================= --> execute command "jps" 3545 DataNode 3690 NodeManager 3948 Jps Command executed successfully on node1 ================current host is node2================= --> execute command "jps" 3609 DataNode 3754 NodeManager 4013 Jps Command executed successfully on node2 All commands executed successfully!
如果发现
namenode
进程没有出现,可以到文章最后查看解决方法 -
查看
web
管理页面名称 地址 hdfs http://master:50070 yarn http://master:8088 jobHistory http://master:19888
关闭集群
关闭服务器之前最好提前手动关闭
hadoop
集群,防止出现集群异常的情况
mr-jobhistory-daemon.sh stop historyserver
stop-yarn.sh
stop-dfs.sh
问题解决
启动集群后发现namenode
进程没有启动,怎么办?
- 首先停止集群
mr-jobhistory-daemon.sh stop historyserver stop-yarn.sh stop-dfs.sh
- 清理配置在
core-site.xml
中<name>hadoop.tmp.dir</name>
配置项所指向的目录下的所有内容(不需要删除目录本身,只需要删除下面的内容即可) - 重新执行初始化
hdfs
的命令hadoop namenode -format
- 最后再次启动hadoop集群
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
- 如果还是没有解决问题,需要进入到
hadoop
根目录的logs
目录下,查看hadoop-admin-namenode-master.log
日志。是否是端口被占用了,还是其他问题。