01-Hadoop 安装(Linux 集群)
1、准备工作
1.1、安装java
1 |
|
系统环境变量中增加 JAVA_HOME
、PATH
,方式有很多种,如在 ~/.bashrc
文件最后加入下面的内容
1 |
|
使内容生效
1 |
|
报错:JAVA_HOME is not set and could not be found
可能是因为 JAVA_HOME
环境没配置正确,还有一种情况是即使各结点都正确地配置了JAVA_HOME,但在集群环境下还是报该错误,解决方法是显示地重新声明一遍JAVA_HOME
检查JAVA_HOME是否配置正确(伪分布式环境)
输入
java –version
,查看jdk是否安装成功,未成功需要安装1
2
3java version "1.8.0_131"
Java(TM) SE Runtime Environment (build 1.8.0_131-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.131-b11, mixed mode)输入 export,查看jdk环境变量是否设置成功,未成功需要配置
1
2declare -x JAVA_HOME="/home/fenglepeng/package/jdk1.8"
declare -x LANG="en_US.UTF-8"
`在集群环境下,即使各结点都正确地配置了JAVA_HOME,也会报如下错误
1
2
3
4
5
6Starting namenodes on [Master.Hadoop]
Master.Hadoop: starting namenode, logging to /usr/local/hadoop/logs/fenglepeng26670918.out
Slave2.Hadoop: Error: JAVA_HOME is not set and could not be found.
Slave1.Hadoop: datanode running as process 69632. Stop it first.
Starting secondary namenodes [Master.Hadoop]
Master.Hadoop: starting secondarynamenode, logging to /usr/local/hadoop/logs/fenglepeng26670918.out解决方法:在hadoop-env.sh中,再显示地重新声明一遍JAVA_HOME
1
2
3# hadoop-env.sh 文件
# export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/fenglepeng/package/jdk1.8
1.2、ssh 服务
SSH是Secure Shell的缩写,SSH由客户端和服务端构成,服务端是一个守护进程,在后台运行并相应来自客户端的请求,客户端包含远程复制scp、安全文件传输sftp,远程登录slogin等运用程序。
Hadoop并没有提供SSH密码登录的形式,所以需要将所有机器配置为无密码登录。
1.2.1、安装 ssh 服务
如果没有安装ssh服务,需要使用如下命令进行安装:
1 |
|
1.2.2、添加解析记录
在每台主机的 /etc/hosts
中添加,根据自己的实际情况添加
1 |
|
1.2.3、主机间的无密码登录
2、HADOOP 安装
2.1、环境
服务器ip:
- 主机 master:
*.*.*.1
- 从机 slave0:
*.*.*.2
- 从机 slave1:
*.*.*.3
每一个节点的安装与配置是相同的,在实际工作中,通常在master节点上完成安装和配置后,然后将安装目录复制到其他节点就可以,不需要把所有节点都配置一遍。
Hadoop的安装包括3中模式:
- 单机模式:只在一台机器上运行,存储采用本地文件系统,没有采用分布式文件系统HDFS。
- 伪分布式模式:存储采用分布式文件系统HDFS,但是HDFS的节点和数据节点都在同一节点。
- 分布式模式:存储采用分布式文件系统HDFS,而且HDFS的节点和数据节点位于不同机器上。
本文采用分布式模式。
2.2、安装 Hadoop
下载、解压hadoop并移动到 /usr/local/hadoop
- Hadoop官网:http://hadoop.apache.org/
- Hadoop下载地址:http://archive.apache.org/dist/hadoop/
- Hadoop-common:是指支持 Hadoop 模块的常用实用程序和库。
- Hadoop-core:与 Hadoop-common 相同,根据 https://hadoop.apache.org/ 它于2009年7月更名为 Hadoop-common。
1 |
|
修改配置
所有的配置文件均在 etc/hadoop
子目录下。
配置
hadoop-env.sh
中的JAVA_HOME
1
2
3
4
5cd etc/hadoop/
vi hadoop-env.sh
# 将 export JAVA_HOME=${JAVA_HOME}
# 改为 export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64,这个地址是你自己的 java 地址。配置核心组件文件
core-site.xml
1
2
3
4
5
6
7
8
9
10
11<configuration>
<property>
<name>hadoop.tmp.dir</name> // 用于保存临时文件,如果没有配置这个参数,则默认使用的临时目录为/tmp/hadoo-hadoop,这个目录在Hadoop重启后会被系统清理掉。
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name> // 用于指定HDFS的访问地址
<value>hdfs://Master.Hadoop:9000</value>
</property>
</configuration>配置文件系统
hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>Master.Hadoop:50090</value>
</property>
<property>
<name>dfs.replication</name> // 指定副本数量,在分布式文件系统中,数据通常会被冗余的存储多份,以保证可靠性和安全性
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name> // 设定名称节点元数据的保存目录,名称节点和数据节点必须设定
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> // 设定数据节点的数据保存目录,名称节点和数据节点必须设定
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>【注意】:Hadoop的运行方式是由配置文件决定的,如果想从伪分布式模式切换回单机模式,只需删除
core-site.xml
文件中的配置项即可配置Yarn的站点配置文件
yarn-site.xml
文件1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>Master.Hadoop:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>Master.Hadoop:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>Master.Hadoop:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>Master.Hadoop:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>Master.Hadoop:8088</value>
</property>
</configuration>配置MapReduce计算框架文件
mapred-site.xml
。目录里有一个mapred-site.xml.template
文件,我们需要将其复制并改名,位置不变。1
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
修改如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# vim etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master.Hadoop:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>Master.Hadoop:19888</value>
</property>
</configuration>配置master的slaves文件。slaves文件给出了Hadoop集群的slave节点列表,该文件十分的重要,因为启动Hadoop的时候,系统总是根据当前slaves文件中的slave节点名称列表启动集群,不在列表中的slave节点便不会被视为计算节点。修改如下
1
2
3
4# vi etc/hadoop/slaves
Slave1.Hadoop
Slave2.Hadoop注意:删除 slaves 文件中原来localhost那一行!
复制 master 上的 Hadoop 到 slave 节点
通过复制 master 节点上的 Hadoop,能够大大提高系统部署效率,复制命令如下:
1 |
|
配置 HADOOP 环境变量
最后把以下代码追加到文件 /etc/profile
或 ~/.bash_profile
的尾部:
1 |
|
保存退出后,执行命令 source ~/.bash_profile
命令使上述配置生效
1 |
|
2.3、启动 Hadoop
初始化HDFS系统
执行格式化文件系统命令:
1 |
|
输出如下:
1 |
|
启动 dfs
进入安装主目录,执行命令:
1 |
|
输出如下
1 |
|
执行命令后,系统提示 ”Are you sure want to continue connecting(yes/no)”,输入yes,之后系统即可启动。
注意:可能会有些慢,千万不要以为卡掉了,然后强制关机,这是错误的。
如果要关闭 Hadoop 集群,可以使用命令:
1 |
|
下次启动Hadoop时,无须NameNode的初始化,只需要使用start-dfs.sh命令即可,然后接着使用start-yarn.sh启动Yarn。
实际上,Hadoop建议放弃(deprecated)使用start-all.sh和stop-all.sh一类的命令,而改用start-dfs.sh和start-yarn.sh命令。
hadoop启动的时候报错:running as process 6410. Stop it first.
这是因为你还没有正确关闭就再次启动
解决方法有两种:
- 进程已经在运行中了,先停止再重启,先执行stop-all.sh下,然后再执行start-all.sh,问题解决
- kill -9 相关pid
启动yarn
1 |
|
输出如下
1 |
|
验证Hadoop集群是否启动成功
读者您可以在终端执行jps命令查看Hadoop是否启动成功。
在master节点,执行:
1 |
|
然后分别在slave节点下执行命令:
1 |
|
随便打开 firefox 浏览器,输入http://你的ip:8088