转载于https://dxysun.com/2018/04/16/centosForHadoop/
10.4.20.181 spark01
10.4.20.48 spark02
系统均为centos7
参考我的另一篇博客centos7下卸载自带的java安装jdk8
建议创建一个单独的用户spark以从Unix文件系统隔离Hadoop文件系统
1 2 3 4 |
|
授权 root 权限,在root下面加一条hadoop的hadoop ALL=(ALL) ALL,用root用户执行如下命令
1 |
|
添加如下内容
1 2 |
|
参考我的另一篇博客CentOs7搭建hadoop spark集群之ssh免密登录
我在本地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文件同理
集群/分布式模式需要修改 /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 |
|
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 |
|
注意修改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 |
|
注意修改master节点名
修改 yarn-site.xml
1 |
vim yarn-site.xml |
修改内容如下
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
注意修改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 |
修改(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进程,
在slave节点可以看到DataNode 和 NodeManager 进程
缺少任一进程都表示出错。如果进程都启动成功说明hadoop集群搭建成功
另外还需要在 Master 节点上通过命令 hdfs dfsadmin -report 查看 DataNode 是否正常启动,如果 Live datanodes 不为 0 ,则说明集群启动成功。
也可以通过 Web 页面看到查看 DataNode 和 NameNode 的状态:http://spark01:50070/。如果不成功,可以通过启动日志排查原因。
访问http://spark01:8088,查看yarn的工作状态
首先创建 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 的内存配置解决。
运行结果如下图所示
同样可以通过 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集群搭建成功