概述
本文主要思路参考了https://blog.csdn.net/u013457387/article/details/87856770的方法,但个人在配置过程中遇到过很多的问题,最终配置成功并在此总结。
本伪分布式是在vmware上建立的,centos版本为7.7,java版本是自带的openjdk1.8.0,hadoop版本为3.2.1
安装流程:
节点结构:
一、建立主机
VM上安装centos7的主机,设置初始内存为2G,硬盘为50G,安装成功后新建用户hadoop,设置hadoop的密码并授予hadoop用户sudo权限(不过后面主要还是用root操作)
[root@localhost ~]#useradd hadoop
[root@localhost ~]#passwd hadoop
[root@localhost ~]#chmod u + w /etc/sudoers
[root@localhost ~]#vim /etc/sudoers
#在root ALL=(ALL)ALL下添加hadoop ALL(ALL)ALL
[root@localhost ~]#chmod u - w /etc/sudoers
二、配置主机host名称及ip
配置主机host名称为master
[root@localhost ~]#hostnamectl sethostname master
#重启使得生效
[root@localhost ~]#reboot
配置固定ip
1.先通过ifconfig查看自己的ip和网卡名
[root@master ~]#ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.78.131 netmask 255.255.255.0 broadcast 192.168.78.255
ether 00:0c:29:dc:23:77 txqueuelen 1000 (Ethernet)
RX packets 31278 bytes 5193637 (4.9 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28144 bytes 2892499 (2.7 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
我的ip是192.168.78.131,网卡名为ens33
在vm的编辑->虚拟网络编辑器->更改设置->NAT设置上查得网关端口为192.168.78.2
那么修改网卡文件/etc/sysconfig/network-scripts/ifcfg-ens33,内容如下:
DEVICE="ens33"
BOOTPROTO="static"
IPADDR="192.168.78.131"
NETMASK="255.255.255.0"
GATEWAY="192.168.78.2"
ONBOOT="yes"
TYPE="Ethernet"
IPV6INIT="no"
DNS1="192.168.78.2"
2.修改/etc/sysconfig/network
NEWTORKING=YES
NETWORKING_IPV6=NO
HOSTNAME=master
3.修改DNS信息
修改/etc/resolv.conf
nameserver 192.168.78.2
三、建立分机
使用vm把主机克隆两份,默认选项点击下去即可
四、配置分机名称及ip
1.令分机1的ip地址为192.168.78.132,分机1host名为slave1;分机2的ip地址为192.168.78.133,分机2host名为slave2,同样按照master的方式修改3个文件,但ip要对应回自己的分机
2.修改master上的/etc/hosts
追加内容
192.168.78.131 master
192.168.78.132 slave1
192.168.78.133 slave2
3.将hosts文件复制到slave1和slave2
[root@localhost ~]#scp /etc/hosts root@slave1:/etc
[root@localhost ~]#scp /etc/hosts root@slave2:/etc
五、设置免密登录
1.在master上生成公钥
[root@localhost ~]#ssh-keygen -t rsa
将在/root/.ssh目录下生成公钥id_rsa.pub和私钥id_rsa
2.在slave1上生成密钥,产生的公钥写入authorized_keys上
[root@slave1 ~]#ssh-keygen -t rsa
[root@slave1 ~]#cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[root@slave1 ~]#chmod 0600 ~/.ssh/authorized_keys
传输公钥到主机
[root@slave1 ~]#ssh-copy-id -i master
对slave2进行同样操作
3.然后在master上授权
[root@master .ssh]# chmod 0600 authorized_keys
[root@master .ssh]# scp authorized_keys slave1:/root/.ssh/
[root@master .ssh]# scp authorized_keys slave2:/root/.ssh/
4.测试master和slave1、master和slave2之间是否能ssh互通
六、下载解压hadoop
在master上切换到/usr/local目录,下载并解压hadoop 3.2.1.tar.gz(是已经编译好的)
[root@master local]#wget https://mirrors.cnnic.cn/apache/hadoop/common/hadoop-3.2.1/hadoop-3.2.1.tar.gz
[root@master local]#tar -xzvf hadoop-3.2.1.tar.gz
七、配置文件(对master、slave1和slave2)
提醒:配置master的话不妨先把虚拟机内存调到4G
1.配置jps
jps类似于ps命令,但是用于仅查看java进程。由于centos自带的java是openjdk版本,没有jps命令,故需要安装另一个包
[root@master local]#yum install java-1.8.0-openjdk-devel.x86_64
2.配置java环境变量
安装jsp完毕后寻找java的安装路径
[root@master local]# which java
/usr/bin/java
[root@master local]# ls -lrt /usr/bin/java
lrwxrwxrwx. 1 root root 22 Aug 5 16:38 /usr/bin/java -> /etc/alternatives/java
[root@master local]# ls -lrt /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 Aug 5 16:38 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre/bin/java
所以这个java路径为/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre(注意这里千万不要把/bin或者/bin/java带上,只到jre就可以了)
然后配置java路径
[root@master local]#vim /etc/profile
之后在最下面填写并保存
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin
使其生效
[root@master local]#source /etc/profile
3.配置hadoop-env.sh
去到刚才解压的文件夹里,进入到/etc/hadoop下,编辑hadoop-env.sh文件最下面,写入并保存:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.252.b09-2.el7_8.x86_64/jre
4.编辑core-site.xml文件
注意:三台机器上的core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml的配置内容要完全一致,地址全部都是master,不因分机而改变host名
在<configuration>
节点内加入配置
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
5.配置hdfs-site.xml
在<configuration>
内加入配置
<property>
<name>dfs.name.dir</name>
<value>/root/hadoop/dfs/name</value>
<description>Path on the local filesystem where theNameNode stores the namespace and transactions logs persistently.</description>
</property>
<property>
<name>dfs.data.dir</name>
<value>/root/hadoop/dfs/data</value>
<description>Comma separated list of paths on the localfilesystem of a DataNode where it should store its blocks.</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>true</value>
<description>need not permissions</description>
</property>
6.配置mapred-site.xml
在<configuration>
节点内加入配置
<property>
<name>mapred.job.tracker</name>
<value>master:49001</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/root/hadoop/var</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
7.配置yarn-site.xml
在<configuration>
节点内加入配置
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The https adddress of the RM web application.</description>
<name>yarn.resourcemanager.webapp.https.address</name>
<value>${yarn.resourcemanager.hostname}:8090</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
<discription>每个节点可用内存,单位MB,默认8182MB</discription>
</property>
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.1</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
8.修改workers
在master节点的workers文件内把localhost删除,加入
slave1
slave2
保存
在slave1节点的workers文件内把localhost删除,加入
master
slave2
保存
在slave2节点的workers文件内把localhost删除,加入
master
slave1
保存
9.在/root下新增如下目录
[root@master ~]#mkdir /root/hadoop
[root@master ~]#mkdir /root/hadoop/tmp
[root@master ~]#mkdir /root/hadoop/var
[root@master ~]#mkdir /root/hadoop/dfs
[root@master ~]#mkdir /root/hadoop/dfs/name
[root@master ~]#mkdir /root/hadoop/dfs/data
八、初始化
也即格式化,在master节点进入到/usr/local/hadoop-3.2.1/bin目录然后执行
[root@master bin]# ./hadoop namenode -format
九、启动hadoop
切换到目录/usr/local/hadoop-3.2.1/sbin
在start-dfs.sh 、stop-dfs.sh两个文件开头位置添加如下配置
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
在start-yarn.sh 、stop-yarn.sh两个文件开头位置添加如下配置
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=root
YARN_NODEMANAGER_USER=root
在/usr/local/hadoop-3.2.1/sbin下,执行
[root@master sbin]#./start-all.sh
使用浏览器访问192.168.78.131:9870,可以进入到overview界面
使用在master节点使用jps可以看到自己的namenode,secondarynamenode进程,在slave1和slave2节点用jps可以看到自己的datanode进程
十、在master节点上启动resourcemanager
在/usr/local/hadoop-3.2.1/sbin下,执行
[root@master sbin]#./yarn-daemon.sh start resourcemanager
再使用jps可以看到resourcemanager进程
此时可以通过192.168.78.131:8088端口访问cluster界面了
十一、在slave节点上启动nodemanager
在/usr/local/hadoop/3.2.1/sbin下,执行
[root@slave1 sbin]#./yarn-daemon.sh start nodemanager
使用jps可以看到自己的nodemanager进程已启动
若要关闭的话,需先在master节点执行
[root@master sbin]#./stop-all.sh
[root@master sbin]#./yarn-daemon.sh stop resourcemanager
关闭节点和resourcemanager
然后在slave节点执行
[root@slave1 sbin]#./yarn-daemon.sh stop nodemanager
关闭nodemanager
(存在一点疑问就是,为什么start-all.sh是不包括resourcemanager的呢?)
至此已成功搭建伪分布式。
几点总结:
1.遇到bug一定要多看日志(logs下面的log文件),报错了可以搜一搜
2.之前8088无法启动,可能的解决方法如下:
(1)修改yarn-env.sh
(2)修改yarn-site.xml的hostname(一般来说意义不大)
(3)修改yarn-site.xml的内存(一般用2048M)或者cpu(一般为1核)
(4)查看端口8088是否被占用,有lsof -i:port及netstat -nltp|grep port查看
(5)防火墙(一般与此无关系)
(6)重新格式化,先删除logs下所有文件后,再删除/root/hadoop自身及所属目录,然后重新建回/root/hadoop等6个目录后再./hadoop namenode -format
关于nodemanager及resourcemanager各自的功能意义,可以参考以下blog:
https://www.cnblogs.com/tyxuanCX/p/9979749.html
https://blog.csdn.net/qq_33734225/article/details/79655156
最后
以上就是细腻鸭子为你收集整理的centos7安装hadoop3详细过程及步骤(新手向)的全部内容,希望文章能够帮你解决centos7安装hadoop3详细过程及步骤(新手向)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复