本博文是基于虚拟机(VMware)下安装的Linux(这里选择Ubuntu16.04)作为系统环境,然后在Ubuntu上安装Hadoop伪分布式。
前提条件:
1.安装好虚拟机VMware
2.VMware上安装好Ubuntu(服务器版参考:安装Ubuntu16.04(服务器版) 桌面版参考:安装Ubuntu16.04(桌面版))
安装步骤:
以下安装均在普通用户(即:非root用户)下进行,例如:用户名为hadoop的普通用户
1. 准备工作
1.1安装SSH
$ sudo apt-get install openssh-server
重启SSH服务
$ sudo /etc/init.d/ssh restart
1.2 映射ip与主机名
修改主机名称为node1
$ sudo nano /etc/hostname
将原有内容删除,添加如下内容,修改成新的主机名,例如:node1 ,
node1
保存退出。
重启Ubuntu,让新的主机名称生效
$ sudo reboot
映射ip与主机名
$ sudo nano /etc/hosts
把第二行127.0.1.1换成Ubuntu的IP地址,例如:
192.168.1.128 node1
2. 安装JDK
Hadoop是运行在jdk之上的软件,所以要先安装JDK
安装步骤参考:Ubuntu16.04下安装JDK1.8
3. 安装配置Hadoop
3.1 下载hadoop2.7.3的安装包
下载地址:http://archive.apache.org/dist/hadoop/common/hadoop-2.7.3/
3.2 解压安装包
将下载的hadoop-2.7.3.tar.gz文件通过WinSCP等工具上传到Ubuntu的~/soft目录下中,注意:WinSCP需要先安装,安装方法自行百度,上传成功后ls命令查看有hadoop-2.7.3.tar.gz
$ cd ~/soft #注意:soft目录如果不存在,需要先用mkdir ~/soft命令创建
$ ls
hadoop-2.7.3.tar.gz
解压安装包
$ tar -zxvf hadoop-2.7.3.tar.gz
解压后ls查看发现多了一个目录hadoop2.7.3
$ ls
hadoop-2.7.3.tar.gz hadoop-2.7.3
创建软链接,方便使用
$ ln -s hadoop-2.7.3 hadoop
3.3 配置Linux环境变量
$ nano ~/.bashrc
在文件末尾添加
export HADOOP_HOME=~/soft/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
让环境变量立即生效
$ source ~/.bashrc
3.4 设置免密码登录
Hadoop集群中各类节点的机器要进行通信,例如NameNode要与DataNode进行通信,如果每次都需要输入密码,非常繁琐,且不现实,所以需要设置免密登录。这里使用SSH技术来实现免密登录。
3.4.1 生成秘钥对
$ ssh-keygen -t rsa
连续敲击三次回车键后的输出内容
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hadoop/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/hadoop/.ssh/id_rsa.
Your public key has been saved in /home/hadoop/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+RqoRjhFaKq93po0BJ7nc10iMPNWLwF4PEV7+zhgDrg hadoop@node1
The key's randomart image is:
+---[RSA 2048]----+
| .o.oo |
| o..+. . |
|.o =. .+ . |
|o.. B . +.. |
|.+.= = =S+ |
|..* + *.=.o |
| oE ..o.o.. |
| ..++. o. |
| .+oo . |
+----[SHA256]-----+
运行以上命令后,连续敲击三次回车键,将会在~/.ssh中生成公钥(id_rsa.pub)和私钥(id_rsa)
$ ls ~/.ssh
id_rsa id_rsa.pub
3.4.2 追加公钥
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
3.4.3 验证免密登录
1.通过localhost验证
$ ssh localhost
$ exit
2.通过ip地址验证
$ ssh ip地址 #例如:$ ssh 192.168.1.128
$ exit
3.通过主机名称验证
$ ssh 主机名称 #例如:$ ssh node1
$ exit
注意:
a. 建议在~目录以外的目录(例如 ~/soft)执行ssh验证,执行前后路径的变化,执行前的路径为~/soft,执行后路径为~
hadoop@node1:~/soft$ ssh localhost
Welcome to Ubuntu 16.04.5 LTS (GNU/Linux 4.4.0-131-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
146 packages can be updated.
81 updates are security updates.
New release '18.04.2 LTS' available.
Run 'do-release-upgrade' to upgrade to it.
Last login: Sun Mar 24 20:36:36 2019 from 192.168.21.1
hadoop@node1:~$
b. 第一次执行ssh时需要输入密码注册knows_hosts,之后再次执行ssh命令时就不再需要密码了
c. 通过exit命令退出登录,返回免密登录前的位置
4. 配置成Hadoop伪分布式
Hadoop配置文件的路径在${HADOOP_HOME}/etc/hadoop目录下,总共需要配置6个文件,分别是: hadoop-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml、slaves。
首先切换到配置文件所在目录
cd ${HADOOP_HOME}/etc/hadoop
ls查看有哪些配置文件
$ ls
capacity-scheduler.xml httpfs-env.sh mapred-env.sh
configuration.xsl httpfs-log4j.properties mapred-queues.xml.template
container-executor.cfg httpfs-signature.secret mapred-site.xml.template
core-site.xml httpfs-site.xml slaves
hadoop-env.cmd kms-acls.xml ssl-client.xml.example
hadoop-env.sh kms-env.sh ssl-server.xml.example
hadoop-metrics2.properties kms-log4j.properties yarn-env.cmd
hadoop-metrics.properties kms-site.xml yarn-env.sh
hadoop-policy.xml log4j.properties yarn-site.xml
hdfs-site.xml mapred-env.cmd
4.1 配置hadoop-env.sh
$ nano hadoop-env.sh
找到含有export JAVA_HOME=${JAVA_HOME}一行,将等号后面的内容删除,换成JAVA_HOME的绝对路径,可用命令
$ echo $JAVA_HOME 查看JAVA_HOME的绝对路径
export JAVA_HOME=/home/hadoop/soft/jdk
4.2 配置core-site.xml
$ nano core-site.xml
在<configuration>与</configuration>之间添加配置内容
添加的配置如下:
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
<!-- 以上主机名node1要按实际情况修改 -->
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/soft/hadoop/tmp</value>
</property>
配置截图如下:
4.3 配置hdfs-site.xml
$ nano hdfs-site.xml
同样在<configuration>与</configuration>之间添加配置内容,配置内容如下:
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
伪分布式只有一台机器,所以副本数设置为1
4.4 配置mapred-site.xml
原来没有mapred-site.xml文件,由mapred-site.xml.template复制出mapred-site.xml
$ cp mapred-site.xml.template mapred-site.xml
配置 mapred-site.xml
$ nano mapred-site.xml
同样在<configuration>与</configuration>之间添加配置内容,配置内容如下:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
以上设置了mapreduce运行在yarn框架之上。
4.5 配置yarn-site.xml
$ nano yarn-site.xml
同样在<configuration>与</configuration>之间添加配置内容,配置内容如下:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node1</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
注意:node1为主机名,注意按实际修改。
配置截图如下:
4.6 配置slaves
nano slaves
将localhost修改为主机名,例如: node1
node1
5. 格式化Hadoop文件系统
$ hdfs namenode -format
执行以上命令后,输出若看到“Exiting with status 0”为格式化成功,否者可能哪个步骤出错,请再检查前面的设置。
注意:格式化只需要进行一次,以后启动hadoop前不需要再次格式化。
6. 启动Hadoop
启动HDFS
$ start-dfs.sh
jps查看进程,能看到除了jps之外有三个进程出现,分别是:NameNode、DataNode、SecondaryNameNode
$ jps
20096 DataNode
19956 NameNode
20379 Jps
20270 SecondaryNameNode
如果少了某个进程,解决思路是:进入Hadoop的logs目录下查看相应的log,
$ cd $HADOOP_HOME/logs
$ ls
hadoop-hadoop-datanode-node1.log hadoop-hadoop-secondarynamenode-node1.log
hadoop-hadoop-datanode-node1.out hadoop-hadoop-secondarynamenode-node1.out
hadoop-hadoop-namenode-node1.log SecurityAuth-hadoop.audit
hadoop-hadoop-namenode-node1.out
例如:没有NameNode进程,需要用cat命令 查看namenode相关的.log的文件,即:hadoop-hadoop-namenode-node1.log,
$ cat hadoop-hadoop-namenode-node1.log
执行以上命令后,找到error、exception、warn等包含错误的关键信息,得到错误原因,进而对症解决。
启动YARN
$ start-yarn.sh
jps查看进程,多出有2个进程出现,分别是:ResourceManager、NodeManager
$ jps
20096 DataNode
20723 Jps
19956 NameNode
20456 ResourceManager
20570 NodeManager
20270 SecondaryNameNode
如果少了其中任意一个进程,解决思路也是查看相应的log,找到问题原因,进而解决。
7. 查看Hadoop的Web监控页面
7.1访问HDFS Web监控页面
打开浏览器,在地址栏输入:
192.168.1.128:50070
或者
node1:50070 (需要先在windows映射Ubuntu ip与主机名)
Windows映射Ubuntu ip和主机名方法:
进入windows系统C:\Windows\System32\drivers\etc目录,修改hosts文件,添加如下映射语句:
192.168.1.128 node1
浏览器显示截图如下:
7.2 访问YARN的Web监控页面
打开浏览器,在地址栏输入:
192.168.1.128:8088
或者
node1:8088
完成! enjoy it!