共计 4523 个字符,预计需要花费 12 分钟才能阅读完成。
前言
因为比赛的限制是使用 Hadoop2.7.2,估在此文章下面的也是使用 Hadoop2.7.2, 具体下载地址为 Hadoop2.7.2
开始的准备
目前在我的实验室上有三台 Linux 主机,因为需要参加一个关于 spark 数据分析的比赛,所以眼见那几台服务器没有人用,我们团队就拿来配置成集群。具体打算配置如下的集群
主机名 | IP 地址(内网) |
---|---|
SparkMaster | 10.21.32.106 |
SparkWorker1 | 10.21.32.109 |
SparkWorker2 | 10.21.32.112 |
首先进行的是 ssh 免密码登录的操作
具体操作在 http://www.linuxidc.com/Linux/2017-08/146213.htm 已经写到了,在此不再详细说。
配置 Java 环境
因为我那三台电脑也是配置好了 JDK 了,所以在此也不详细说。
配置好 Java 的机子可以使用
java -version
来查看 Java 的版本
下载 Hadoop2.7.2
因为我最后的文件是放在 /usr/local
下面的,所以我也直接打开 /usr/local
文件夹下。直接
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.7.2/hadoop-2.7.2.tar.gz
安装 Hadoop 以及配置 Hadoop 环境
解压
tar -zxvf hadoop-2.7.2.tar.gz
删除
rm -rf hadoop-2.7.2.tar.gz
解压删除之后打开 hadoop-2.7.2 文件夹,在 etc/hadoop/hadoop-env.sh
中配置 JDK
的信息
先查看本机的 jdk 目录地址在哪里
echo $JAVA_HOME
vi etc/hadoop/hadoop-env.sh
将
export JAVA_HOME=${JAVA_HOME}
改为
export JAVA_HOME=/usr/java/jdk1.8.0_131
为了方便我们以后开机之后可以立刻使用到 Hadoop 的 bin 目录下的相关命令,可以把 hadoop
文件夹下的 bin
和sbin
目录配置到 /etc/profile
文件中。
vi /etc/profile
添加
export PATH=$PATH:/usr/local/hadoop-2.7.2/bin:/usr/local/hadoop-2.7.7/sbin
按一下 esc
, 按着shift
+ 两次z
键保存
使用
source /etc/profile
使得命令配置信息生效, 是否生效可以通过
hadoop version
查看
配置 Hadoop 分布式集群
前言
考虑是为了建立
spark
集群,所以主机命名为SparkMaster
SparkWorker1
SparkWorker2
修改主机名
vi /etc/hostname
修改里面的名字为 SprakMaster
, 按一下esc
, 按着shift
+ 两次z
键保存。
设置 hosts 文件使得主机名和 IP 地址对应关系
vi /etc/hosts
配置主机名和 IP 地址的对应关系。
Ps: 其他两台 slave 的主机也修改对应的 SparkWorker1 SparkWorker2,如果修改完主机名字之后户籍的名字没有生效,那么重启系统便可以。三台机子的 hostname 与 hosts 均要修改
在 == 三台 == 机子的总的 hadoop-2.7.2 文件夹下建立如下四个文件夹
- 目录 /tmp,用来存储临时生成的文件
- 目录 /hdfs,用来存储集群数据
- 目录 hdfs/data,用来存储真正的数据
- 目录 hdfs/name,用来存储文件系统元数据
mkdir tmp hdfs hdfs/data hdfs/name
配置 hadoop 文件
在此先修改 SparkMaster 的配置文件,然后修改完毕后通过
rsync
命令复制到其他节点电脑上。
修改 core-site.xml
vi etc/hadoop/core-site.xml
具体修改如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://SparkMaster:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop-2.7.2/tmp</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
变量 fs.defaultFS 保存了 NameNode 的位置,HDFS 和 MapReduce 组件都需要它。这就是它出现在 core-site.xml 文件中而不是 hdfs-site.xml 文件中的原因。
修改 marpred-site.xml
具体修改如下
首先我们需要的是将 marpred-site.xml 复制一份:
cp etc/hadoop/marpred-site.xml.template etc/hadoop/marpred-site.xml
vi etc/hadoop/marpred-site.xml.template
此处修改的是
marpred-site.xml
,不是marpred-site.xml.template
。
具体修改如下
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>SparkMaster:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>SparkMaster:19888</value>
</property>
</configuration>
修改 hdfs-site.xml
vi etc/hadoop/hdfs-site.xml
具体修改如下
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop-2.7.2/hdfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop-2.7.2/hdfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>SparkMaster:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
PS:变量 dfs.replication 指定了每个 HDFS 数据块的复制次数,即 HDFS 存储文件的副本个数. 我的实验环境只有一台 Master 和两台 Worker(DataNode),所以修改为 2。
配置 yarn-site.xml
vi etc/hadoop/yarn-site.xml
具体配置如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>SparkMaster:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>SparkMaster:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>SparkMaster:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>SparkMaster:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>SparkMaster:8088</value>
</property>
</configuration>
修改 slaves 的内容
将 localhost
修改成为SparkWorker1
、SparkWorker2
将 SparkMaster
节点的 `hadoop-2.7.2/etc/ 下面的文件通过以下方式放去其他节点
rsync -av /usr/local/hadoop-2.7.2/etc/ SparkWorker1:/usr/local/hadoop-2.7.2/etc/
rsync -av /usr/local/hadoop-2.7.2/etc/ SparkWorker1:/usr/local/hadoop-2.7.2/etc/
完成之后可以查看 SparkWorker1
、SparkWorker2
下面的文件是否变了
启动 hadoop 分布式集群
在 SparkMaster
节点格式化集群的文件系统
输入
hadoop namenode -format
启动 Hadoop 集群
start-all.sh
查看各个节点的进程信息
使用
jps
查看各节点的进程信息
可以看到
此时分布式的 hadoop 集群已经搭好了
在浏览器输入
SparkMaster_IP:50070
SparkMaster_IP:8088
看到以下界面代表 Hadoop 集群已经开启了
结言
到此 Hadoop 的分布式集群就搭好了。这个 Spark 运行的基础。
dd
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-08/146212.htm