Centos7搭建hadoop spark集群之hadoop集群搭建

转载于https://dxysun.com/2018/04/16/centosForHadoop/

准备工作及环境

两台主机

10.4.20.181 spark01
10.4.20.48 spark02

系统均为centos7

jdk已经装好

参考我的另一篇博客centos7下卸载自带的java安装jdk8

创建用户

建议创建一个单独的用户spark以从Unix文件系统隔离Hadoop文件系统

1

2

3

4

useradd hadoop

passwd hadoop

New password:

Retype new password:

授权 root 权限,在root下面加一条hadoop的hadoop ALL=(ALL) ALL,用root用户执行如下命令

1

vim /etc/sudoers

添加如下内容

1

2

root ALL=(ALL) ALL

spark ALL=(ALL) ALL

SSH 免秘钥

参考我的另一篇博客CentOs7搭建hadoop spark集群之ssh免密登录

hadoop集群搭建

下载hadoop2.7.5并解压到相应目录

我在本地window已经下好了hadoop-2.7.5.tar.gz的压缩包,并使用xftp将其上传到了主机spark01的/home/spark/download目录下
在用户spark的主目录下(即/home/spark)创建app文件夹,用于安装hadoop和spark,将hadoop-2.7.5解压到app目录下

1

2

mkdir /home/spark/app

tar -zxf /home/spark/download/hadoop-2.7.5.tar.gz -C /home/spark/app

 

进入app目录并修改hadoop-2.7.5的文件名

1

2

cd /home/spark/app

mv hadoop-2.7.5 hadoop

 

环境变量

如果是对所有的用户都生效就修改vim /etc/profile 文件
如果只针对当前用户生效就修改 vim ~/.bahsrc 文件

1

sudo vim /etc/profile

 

在文件末尾添加以下内容

1

2

3

4

#hadoop

HADOOP_HOME=/home/spark/app/hadoop/

PATH=$HADOOP_HOME/bin:$PATH

export PATH HADOOP_HOME

 

使环境变量生效,运行下面的命令使/etc/profile文件生效

1

source /etc/profile

 

~/.bahsrc文件同理

配置Hadoop

集群/分布式模式需要修改 /home/spark/app/hadoop/etc/hadoop 中的5个配置文件,更多设置项可点击查看官方说明,这里仅设置了正常启动所必须的设置项: slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml。
进入hadoop 配置文件目录

1

cd /home/spark/app/hadoop/etc/hadoop/

 

编辑 hadoop-env.sh 文件,找到 JAVA_HOME 改为 JDK 的安装目录

1

2

vim hadoop-env.sh

export JAVA_HOME=/usr/java

 

这里我的jdk安装目录为/usr/java

修改 core-site.xml
打开 core-site.xml文件并对其进行编辑,如下图所示。

1

vim core-site.xml

 

修改内容如下

1

2

3

4

5

6

7

8

9

10

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://spark01:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>file:/home/spark/app/hadoop/tmp</value>

</property>

</configuration>

 

spark01是我的master节点名,你可以将spark01换成你的master节点名,hadoop.tmp.dir属性也要换成自己的

修改 hdfs-site.xml
打开hdfs-site.xml文件并对其进行编辑,如下图所示。

1

vim 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>spark01:50090</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/home/spark/app/hadoop/tmp/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/home/spark/app/hadoop/tmp/dfs/data</value>

</property>

</configuration>

 

注意修改master节点名,我的是spark01,dfs.namenode.name.dir和dfs.datanode.data.dir这两个属性

修改 mapred-site.xml
目录下么没有这个文件,这有一个模板,我们需要先拷贝一份

1

2

cp mapred-site.xml.template mapred-site.xml

vim mapred-site.xml

修改内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

14

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>spark01:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>spark01:19888</value>

</property>

</configuration>

 

注意修改master节点名

修改 yarn-site.xml

1

vim yarn-site.xml

修改内容如下

1

2

3

4

5

6

7

8

9

10

11

12

13

<configuration>

 

<!-- Site specific YARN configuration properties -->

 

     <property>

             <name>yarn.resourcemanager.hostname</name>

                      <value>spark01</value>

     </property>

     <property>

              <name>yarn.nodemanager.aux-services</name>

                      <value>mapreduce_shuffle</value>

     </property>

</configuration>

 

注意修改master节点名

配置集群

复制节点
将spark01的hadoop文件夹重打包后复制到其他子节点

1

2

3

cd /home/spark/app

tar zcf hadoop.tar.gz hadoop

scp hadoop.tar.gz spark@spark02:/home/spark/app

在其他子节点 解压

1

tar -zxf hadoop.tar.gz

 

配置slaves文件

修改(Master主机)spark01的/home/spark/app/hadoop/etc/hadoop/slaves文件
该文件指定哪些服务器节点是datanode节点。删除locahost,添加所有datanode节点的主机名

1

2

cd /home/spark/app/hadoop/etc/hadoop/

vim slaves

 

删除localhost,添加节点主机名,这里我将master节点也作为datanode节点使用

1

2

spark01

spark02

 

关闭防火墙

CentOS系统需要关闭防火墙
CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。
在 CentOS 6.x 中,可以通过如下命令关闭防火墙:

1

2

sudo service iptables stop # 关闭防火墙服务

sudo chkconfig iptables off # 禁止防火墙开机自启,就不用手动关闭了

 

若用是 CentOS 7,需通过如下命令关闭(防火墙服务改成了 firewall):

1

2

systemctl stop firewalld.service # 关闭firewall

systemctl disable firewalld.service # 禁止firewall开机启动

 

启动集群操作

首次启动需要先在 Master 节点执行 NameNode 的格式化:

1

hdfs namenode -format # 首次运行需要执行初始化,之后不需要

 

接着可以启动 hadoop 了,启动需要在 Master 节点上进行:

1

2

3

start-dfs.sh

start-yarn.sh

mr-jobhistory-daemon.sh start historyserver

 

通过命令 jps 可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 、datanode进程,
master节点jps进程
在slave节点可以看到DataNode 和 NodeManager 进程
slave节点jsp进程
缺少任一进程都表示出错。如果进程都启动成功说明hadoop集群搭建成功
另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。
Live datanodes
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://spark01:50070/。如果不成功,可以通过启动日志排查原因。
spark01
访问http://spark01:8088,查看yarn的工作状态
spark01

执行分布式实例

首先创建 HDFS 上的用户目录:

1

hdfs dfs -mkdir -p /user/spark

 

将 /home/spark/app/hadoop/etc/hadoop 中的配置文件作为输入文件复制到分布式文件系统中

1

2

hdfs dfs -mkdir input

hdfs dfs -put /home/spark/app/hadoop/etc/hadoop/*.xml input

 

接着就可以运行 MapReduce 作业了:

1

hadoop jar /home/spark/app/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

 

可能会有点慢,但如果迟迟没有进度,比如 5 分钟都没看到进度,那不妨重启 Hadoop 再试试。若重启还不行,则很有可能是内存不足引起,建议增大虚拟机的内存,或者通过更改 YARN 的内存配置解决。

运行结果如下图所示
MapReduce
同样可以通过 Web 界面查看任务进度 http://spark01:8088/cluster
任务进度
执行如下命令查看执行完毕后的输出结果:

1

hdfs dfs -cat output/*

输出结果
输出结果

关闭 Hadoop 集群也是在 Master 节点上执行的:

1

2

3

stop-yarn.sh

stop-dfs.sh

mr-jobhistory-daemon.sh stop historyserver

 

至此,hadoop集群搭建成功

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值