如果在你在网上搜Hadoop伪分布式环境搭建的教程,结果可谓五花八门,有的甚至漏洞百出,很难找到一篇非常详细的文章,能把它的搭建全过程讲的清清楚楚,今天潘老师给大家整理了一套完整详尽的图文教程,并且亲自测试保证能正常运行hadoop,只要你跟着步骤耐心加细心地一步步操作,肯定不会出问题,而且能让你快速入门大数据开发,体会大数据的魅力。

安装Vmware的教程之前在一篇博文中专门写过,请参考文章:
从事Java开发或者Hadoop大数据开发,免不了要和Linux系统打交道,而VMware Workstati […]
1、使用虚拟机一定要学会配置网络,因为基于虚拟机的很多任务都是需要网络支持或者需要你远程访问的,因此我们打开虚拟机的编辑,找到虚拟网络编辑器并打开

2、这里就用到我们刚才的配置,我们选择的是NAT网络,一般是Vment8,然后下面的界面就会显示他的各种配置情况,我们首先设置它的ip地址和子网掩码(如果已有,一般默认即可),也可以自己设置ip,但要保证和电脑ip在同一个网段(设置后新建的虚拟机的ip就会在该网段内自动生成),因为如果我们搭建集群将需要很多虚拟机,每台都应该是在这个网段里面的,设置的ip方便自己记住就可以。

3、点击NAT设置,设置网关,前面部分和ip地址一样,最后一位是2,确定关闭即可。


安装虚拟机的教程之前在一篇博文中专门写过,请参考文章:
Linux操作系统在实际Java学习和Hadoop大数据开发中,用的非常广泛,而入门最方便的方式就是在Vmwa […]
1.以root权限登录系统,我们可以输入如下指令可以查找到对应的网卡名称,由于我们之前修改过网卡命名为eth0,所以这里截图为eth0,如果没修改,名称可能是ens33
ip addr

2、接着输入如下指令(如果你的是ens33文件名就是ifcfg-ens33),打开eth0文件。
vi /etc/sysconfig/network-scripts/ifcfg-eth0
按enter继续,然后按 i 进入编辑模式,修改和添加配置参数。查看结果如图:

3、部分修改和添加的代码如下(具体设置及说明见图,有个地方需修改为static):
IPADDR="192.168.217.100" GATEWAY="192.168.217.2" NETMASK="255.255.255.0" DNS1="192.168.217.2" DNS2="114.114.114.114"
修改后结果如图:

4、按esc,输入:wq保存退出。
5、执行如下指令重启网络服务。
service network restart
一定记着运行该指令,重启你的网络服务,让我们的配置生效,否则上面的配置都是白用功,也可以重启虚拟机,但是太麻烦了,显示OK就可以了。

6、重新运行ip addr查看我们配置是否成功

7、执行如下指令测试网络情况 ,然后ctrl+c停止。
ping www.baidu.com
1、使用xshell连接到master主机,执行如下格式指令,在这里我们修改master的主机名为master(新主机名也可以为域名格式,比如www.panziye.com),
hostnamectl set-hostname master
修改完后在再执行如下指令查看新主机名是否成功设置。
hostname
vi /etc/hosts
添加如下配置,配置格式为 ip 主机名,在这里我们是192.168.217.100 master

3、重启master,xshell重新连接主机,发现主机名改变。

1、执行如下指令查看防火墙状态,发现状态为running。
firewall-cmd --state
systemctl disable firewalld.service

3、永久关闭selinux,selinux是Linux一个子安全机制,学习环境可以将它禁用。执行如下指令打开文件。
vi /etc/selinux/config

4、将SELINUX=enforcing改为SELINUX=disabled,然后esc,执行:wq保存退出

5、最后重启虚拟机使之生效。
1、在master上使用如下命令来创建hadoop用户:
adduser hadoop
再使用如下指令设置hadoop用户密码,这里我们设置为123456(注意会提示输入两遍,两次要相同)。
passwd hadoop

2、使用如下指令查看用户信息,发现已经有了hadoop用户。
cat /etc/passwd

3、使用如下指令把hadoop用户加入到hadoop用户组,前面一个hadoop是组名,后面一个hadoop是用户名。
usermod -a -G hadoop hadoop
接着用如下指令查看结果。
cat /etc/group |grep hadoop

4、使用如下命令编辑,把hadoop用户赋予root权限,让他可以使用sudo命令。
vi /etc/sudoers
添加内容如下:
root ALL=(ALL) ALL
hadoop ALL=(root) NOPASSWD:ALL
修改前截图:

修改后截图:

5、最后按esc,执行:wq!强制保存退出。
1、通过xshell,使用hadoop用户重新登录master虚拟机。
2、使用ssh方式测试登录本机,执行如下指令,发现需要正确输入密码才能正常登录。
ssh master

3、如果输入密码后成功登录了,执行exit指令退出,我们现在想使用SSH公私钥对方式实现免密登录。
4、使用如下指令生成公私钥对(这里使用的dsa加密算法,使用rsa也可以),执行后~/.ssh目录下会生成私钥和公钥的键值对 id_dsa 和 id_dsa.pub。
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

5、我们需要将公钥写入认证文件中,执行cd ~/.ssh 进入目录,在执行ls查看成的公私钥文件,最后执行如下命令将公钥写入认证文件authorized_keys中。
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

6、执行如下指令修改master主机下的authorized_keys权限为600,否则无法免密登录。
chmod 600 authorized_keys

7、再次使用ssh master指令登录(注意:部分第一次可能还需要密码,输入登录后再次退出重试第二次就不需要了,这取决于know_hosts中是否纪录),发现无需密码,直接登录成功。

参考:
1、去ORACLE官网下载Linux系统的JDK,这里我们使用版本为jdk-8u111-linux-x64.t […]
1、下载Hadoop,这里我们使用hadoop-3.2.1版本,官方下载地址:点击直达官方下载

2、参考安装jdk步骤,在/usr目录下新建hadoop目录,将hadoop安装包上传至usr的hadoop目录。

3、执行如下命令将其解压到当前文件夹,然后ls查看。
sudo tar -zxvf hadoop-3.2.1.tar.gz

4、配置环境变量,执行sudo vi /etc/profile 添加如下环境变量:
export HADOOP_HOME="/usr/hadoop/hadoop-3.2.1" export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
这里建议和JAVA_HOME合并着写,如图:

5、保存退出后,执行source /etc/profile使修改生效,接着执行echo $PATH查看path。

6、执行hadoop version看是否正常运行,能看到版本号说明配置成功。


7、执行cd /usr/hadoop/hadoop-3.2.1/etc/hadoop/进入配置文件的所在目录,然后ls查看。

8、修改hadoop-env.sh 配置运行环境变量,默认情况下,该文件没有任何配置,执行如下命令在文件末添加配置然后保存退出:
sudo vi hadoop-env.sh
配置如下:
export JAVA_HOME=/usr/java/jdk1.8.0_111 export HDFS_NAMENODE_USER=hadoop export HDFS_DATANODE_USER=hadoop export HDFS_SECONDARYNAMENODE_USER=hadoop export YARN_RESOURCEMANAGER_USER=hadoop export YARN_NODEMANAGER_USER=hadoop
注意:如果是root用户如下全部指定为root即可!
HDFS_NAMENODE_USER:指定操作NameNode进程的用户
HDFS_DATANODE_USER:指定操作DataNode进程的用户
HDFS_SECONDARYNAMENODE_USER:指定操作 Secondary NameNode进程的用户,我们这里指定的用户是hadoop,具体应用时,据实际情况而定。
这三个配置是hadoop3.x为了提升安全性而引入的。
日志信息默认在${HADOOP_HOME}/logs中,也可以自行配置目录。

9、执行sudo vi core-site.xml修改core-site.xml,在configuration中添加如下配置:(如果为了让Windows浏览器能访问到,可以写虚拟机ip,无须windows访问可以使用master主机名,我们这使用主机名)。
<property> <name>fs.defaultFS</name> <value>hdfs://master:9820</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/usr/hadoop/hadoopdata</value> </property>
fs.defaultFs 指NameNode所在节点,value这里配置master;端口9820;hdfs指协议
hadoop.tmp.dir 指配置元数据存放的位置,默认值为”/tmp/hadoop-${user.name}”。Linux操作系统重启后,这个目录会被清空,这可能导致数据丢失,因此需要修改,
value这里配置为/usr/hadoop/hadoopdata, 后续如果查看fsiamge和edits文件,可以在这个目录下找
10、执行sudo vi hdfs-site.xml配置hdfs-site.xml,添加如下代码:
<property> <name>dfs.replication</name> <value>1</value> </property>
注意一下这两个默认配置:


11、执行sudo vi mapred-site.xml配置mapred-site.xml ,添加如下代码:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
12、执行sudo vi yarn-site.xml配置yarn-site.xml ,添加如下代码:
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CL ASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
1、执行如下指令将/usr/hadoop目录赋予777权限,否则后面HDFS格式化会出错,提示无法创建目录。
sudo chmod -R 777 /usr/hadoop
cd /usr/hadoop/hadoop-3.2.1
bin/hdfs namenode -format
sbin/start-all.sh
jps
有如下进程,说明Hadoop正常启动。

7、在浏览器中输入:http://192.168.217.100:8088/cluster 即可看到YARN的ResourceManager的界面。

8、namenode查看地址:http://192.168.217.100:9870

9、datanode查看地址:http://192.168.217.100:9864

10、执行sbin/stop-all.sh停止hadoop,下次启动只需进入hadoop-3.2.1目录直接执行sbin/start-all.sh即可。
不得不说,Hadoop伪分布式环境搭建是很复杂的一个过程,对于第一次尝试搭建的同学,整个过程搭建起来起码需要几个小时甚至更久,而且还需要绝对的耐心与细心,只要一步走错,可能启动就失败了,这是很令人抓狂的事情,但作为一名合格的程序员,这些磨炼都是必须的呢!




















