Hadoop 部署文档
本文档中的集群包含 192.168.105.10/11/12 三台机器。三台机器的 hostname 分别设为 ivic10/ivic11/ivic12,其中第一台机器作为 master,后两台作为 slaves。
1 先决条件
在开始安装 Hadoop 之前,请确认集群的每台机器上均已安装 JDK1.8(注意是 SunJDK 而不是 OpenJDK),并且已经配置好密钥登陆(服务器两两之间可以无密码SSH登陆)。
除此之外还需要在三台机器的 /etc/hosts 文件中写入以下内容(需要root权限)
192.168.105.10 ivic10
192.168.105.11 ivic11
192.168.105.12 ivic12
配置好以后,在任意一台机器上可以用 hostname 无密码 SSH 登陆到另外两台机器上
#在ivic10上操作
ssh ivic11
#如果一切正常,应该可以直接登陆到ivic11上
2 下载二进制文件
在Hadoop的 release 页面中有数个版本可以选择,因为后续要在 Hadoop 集群上部署其他应用,所以这里选择兼容性最好的 2.7.7 版本。
mkdir ~/bigdata
cd ~/bigdata
#Apache网站上的镜像太慢,从清华镜像下载
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
#解压到当前文件夹
tar -xzvf hadoop-2.7.7.tar.gz -C .
3 修改配置文件
首先在 ~/.profile
中添加环境变量
export HADOOP_HOME=/home/ivic/bigdata/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin
用 source
命令让环境变量立即生效
source ~/.profile
然后切换到 Hadoop 的配置文件目录下,开始修改 Hadoop 的配置文件 cd ~/bigdata/hadoop-2.7.7/etc/hadoop
3.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ivic10:9000/</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/tmp/hadoop-2.7.7</value>
</property>
</configuration>
通过fs.defaultFS
指定 NameNode 的 IP 地址和端口号,通过hadoop.tmp.dir
指定临时文件存放路径
3.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/ivic/bigdata/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/ivic/bigdata/hdfs/data</value>
</property>
</configuration>
dfs.replication
指定备份数目为 3,dfs.name.dir
指定 NameNode 的文件存储路径,dfs.data.dir
指定 DataNode 的文件存储路径。
3.3 mapred-site.xml
#将mapred-site.xml.template复制一份
cp mapred-site.xml.template mapreduce-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
3.4 yarn.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>ivic10</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>Whether virtual memory limits will be enforced for containers</description>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>4</value>
<description>Ratio between virtual memory to physical memory when setting memory limits for containers</description>
</property>
</configuration>
配置后两项是因为在部署 Flink on Yarn 的过程中出现了 FlinkYarnSession 无法启动的问题,从 StackOverflow 得知应该在此处加上这两项配置,否则虚拟内存占用会超出限制导致 Flink 无法启动。
3.5 slaves
ivic11
ivic12
3.6 hadoop-env.sh
export JAVA_HOME=/usr/local/jdk1.8.0_201
4 将配置好的 Hadoop 分发到其他节点
#需要先在11/12节点上建立 /homne/ivic/bigdata/ 文件夹
scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.11:/home/ivic/bigdata/hadoop-2.7.7
scp -r /home/ivic/bigdata/hadoop-2.7.7 192.168.105.12:/home/ivic/bigdata/hadoop-2.7.7
然后分别在其他节点上配置环境变量 HADOOP_HOME
和 PATH
。
5 启动集群
5.1 格式化 HDFS
cd ~/bigdata/hadoop-2.7.7
hdfs namenode -format
注意:此命令只有在第一次启动前需要执行,目的是格式化 NameNode
5.2 启动集群
#启动 HDFS
./sbin/start-dfs.sh
#启动 YARN
./sbin/start-yarn.sh
#以上两条命令也可以用 ./sbin/start-all.sh 代替
#关闭集群 ./sbin/stop-all.sh
使用 jps 命令查看服务运行情况
#master节点中运行的服务
25928 SecondaryNameNode
25742 NameNode
26387 Jps
26078 ResourceManager
#slave节点中运行的服务
24002 NodeManager
23899 DataNode
24179 Jps
6 提交示例任务
如果一切顺利,现在可以向 Hadoop 提交任务了。这里我们使用 Hadoop 自带的实例程序运行 wordcount 任务,以此验证 Hadoop 是否部署成功。
cd ~/bigdata/hadoop-2.7.7
#把当前路径下的 LICENSE.txt 文件复制到 HDFS 中
hadoop fs -put ./LICENSE.txt /wordcount/input
#提交任务,最后两个参数分别指定任务的输入和输出
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.7.jar wordcount /wordcount/input /wordcount/output
#查看输出路径
hadoop fs -ls /wordcount/output
#如果一切正常,该路径下包含两个文件
#第一个文件是空文件,表示任务运行成功
/wordcount/output/_SUCCESS
#第二个文件是输出文件,统计了 LICENSE.txt 中每个单词出现的次数
/wordcount/output/part-r-00000
7 坑
7.1 hostname 配置
之前部署 Hadoop 的时候都是在 192.168.7.x 的机器上,那些机器的 hostname 和 hosts 都已经配置好了,直接用就行。但是 192.168.105.x 的这几台机器并没有配好,每台机器的 hostname 都是 ivic。
一开始嫌麻烦就没配,在配置文件里直接填了 IP 地址,结果最后启动集群以后就出现了一个很奇怪的现象————用 jps 命令查看每个节点的服务,一切正常,但在 web ui 里看不到可用的 DataNode,总可用空间是 0。后来看 DataNode 上的日志文件才发现是 hostname 无法解析,不知道为什么 Hadoop 把 IP 地址当作 hostname 了。于是重新配置 hostname,配好以后再重启 Hadoop,问题解决。
hostname 的 配置过程如下(这几台机器上装的是 Ubuntu 18.04,不同系统的配置过程略有区别)
#将该文件中的内容修改为想要的hostname,比如ivic10
sudo vim /etc/hostname
#让修改立即生效
hostname ivic10
7.2 format 命令
在排查上一个问题的过程时,我曾经尝试把 Hadoop 集群停掉然后用 hdfs namenode -format
命令格式化 NameNode,达到“恢复出厂设置”的效果。然而这样做以后再启动 hdfs,原本能启动的 DataNode 现在也启动不了了。浏览 NameNode 的日志发现问题出在 DataNode 的 cluster id 和 NameNode 不一致,所以无法启动。原来 format 命令会为 NameNode 生成一个新的 cluster id,而 DataNode 的 cluster id 信息存储在 dfs.datanode.data.dir
中,并没有发生变化,因此会产生冲突。解决方案是在执行 format 命令之后删除所有 DataNode 的 dfs.datanode.data.dir
,也就是 /home/ivic/bigdata/hdfs/data
文件夹。
7.3 日志
Hadoop 的日志系统很完善,出了问题在日志里都能找到原因。如果 NameNode 启动不了,就去看 NameNode 的日志,DataNode 启动不了,就去看 DataNode 的日志。日志文件路径为 $HADOOP_HOME/logs
7.4 配置文件的同步
如果集群用的是 nfs,改一台机器的配置文件其他机器上就全部同步修改好了(不过要注意不要把 dfs.namenode.name.dir
和 dfs.datanode.data.dir
配置到网络文件系统上)。
如果没有 nfs 该怎么办呢,难道每次都要手动修改所有机器上的配置文件吗?不是滴,这时候就需要祭出神器 rsync 了,只要用一条命令就可以把修改推送到其他机器上。
举个例子,比如你刚在 ivic10 上修改了 $HADOOP_HOME/etc/hadoop/
路径下的 core-site.xml,hdfs-site.xml,yarn.xml 三个文件,如何把修改同步到 ivic11 和 ivic12 呢?
cd $HADOOP_HOME/etc
for ip in 11 12; do rsync -r hadoop ivic@ivic${ip}:/home/ivic/bigdata/hadoop-2.7.7/etc; done
搞定。
8 参考
Hadoop 部署文档的更多相关文章
- Flink 部署文档
Flink 部署文档 1 先决条件 2 下载 Flink 二进制文件 3 配置 Flink 3.1 flink-conf.yaml 3.2 slaves 4 将配置好的 Flink 分发到其他节点 5 ...
- hadoop2.6.0汇总:新增功能最新编译 32位、64位安装、源码包、API下载及部署文档
相关内容: hadoop2.5.2汇总:新增功能最新编译 32位.64位安装.源码包.API.eclipse插件下载Hadoop2.5 Eclipse插件制作.连接集群视频.及hadoop-eclip ...
- HP DL160 Gen9服务器集群部署文档
HP DL160 Gen9服务器集群部署文档 硬件配置=======================================================Server Memo ...
- HDFS NameNode HA 部署文档
简介: HDFS High Availability Using the Quorum Journal Manager Hadoop 2.x 中,HDFS 组件有三个角色:NameNode.DataN ...
- PPTP部署文档
PPTP部署文档 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入:高级运维工程师之路 598432640 前言:这款VPN部署起来特别简单,想对OPENVON配 ...
- supervisor 部署文档
supervisor 部署文档 supervisor 需要Python支持,如果不用系统的supervisor,单独安装python python 安装 #依赖 yum install python- ...
- centos6 Cacti部署文档
centos6 Cacti部署文档 1.安装依赖 yum -y install mysql mysql-server mysql-devel httpd php php-pdo php-snmp ph ...
- Sqlserver2008安装部署文档
Sqlserver2008部署文档 注意事项: 如果你要安装的是64位的服务器,并且是新机器.那么请注意,你需要首先需要给64系统安装一个.net framework,如果已经安装此功能,请略过这一步 ...
- CDH简易离线部署文档
CDH 离线简易部署文档 文档说明 本文为开发部署文档,生产环境需做相应调整. 以下操作尽量在root用户下操作,避免权限问题. 目录 文档说明 2 文档修改历史记录 2 目录 3 ...
随机推荐
- 【爬坑】Python 3.6 在 Socket 编程时出现类型错误 TypeError: a bytes-like object is required, not 'str'
1. 问题描述 Python 3.6 在 Socket 编程时出现错误如下 Traceback (most recent call last): File "F:/share/IdeaPro ...
- Spark 基本概念 & 安装
1. Spark 基本概念 1.0 官网 传送门 1.1 简介 Spark 是用于大规模数据处理的快如闪电的统一分析引擎. 1.2 速度 Spark 可以获得更高的性能,针对 batch 计算和流计算 ...
- $Gauss$消元
$Gauss$消元 今天金牌爷来问我一个高消的题目,我才想起来忘了学高消... 高斯消元用于解线性方程组,也就是形如: $\left\{\begin{matrix}a_{11}x_1+a_{12}x_ ...
- OpenCV——距离变换与分水岭算法的(图像分割)
C++: void distanceTransform(InputArray src, OutputArray dst, int distanceType, int maskSize) 参数详解: I ...
- HDU 1203 I NEED A OFFER!(01背包+简单概率知识)
I NEED A OFFER! Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Sub ...
- CUDA2.4-原理之性能优化及浮点运算
本部分来自于<大规模并行处理器编程实战>第六章.第七章.打算不再看这本书了,准备看<programming massively parallel processors 2nd> ...
- 虚函数指针sizeof不为sizeof(void*)
ref:http://bbs.csdn.net/topics/360249561 一个继承了两个虚基类又增加了自己的一个虚函数pif的类,sizeof(指向pif的指针)竟然是8(X86).我是从这里 ...
- Luence
Luence 是Apache软件基金会的一个项目,是一个开发源码的全文检索引擎工具包,是一个全文检索引擎的一个架构.提供了完成的查询引擎和检索引擎,部分文本分析引擎. 全文检索程序库,虽然与搜索引擎相 ...
- static成员函数不能调用non-static成员函数
1 一般类静态成员函数不能调用非静态成员函数 2 static成员函数可以调用构造函数吗? 答案是肯定的,由于static成员函数没有this指针,所以一般static成员函数是不能访问non-sta ...
- 2017-2018-1 20155202 张旭 嵌入式C语言——时钟提取时分秒
2017-2018-1 20155202 张旭 嵌入式C语言--时钟提取时分秒 任务要求: 在作业本上完成附图作业,要认真看题目要求. 提交作业截图 作弊本学期成绩清零(有雷同的,不管是给别人传答案, ...