搭建伪分布式hadoop

前言

学习hadoop的第一课,先搭建好伪分布式环境。

hadoop是什么,能干什么?

解决问题:

  • 海量数据的存储(HDFS),分布式存储系统
  • 海量数据的分析(MapReduce),分布式计算模型

能干什么?
大数据存储,大数据分析

hadoop2.x

提供了YERN(资源调度系统),可以运行各种计算模型。
可以运行自家的MapReduce(处理离线数据),也可以运行Storm、Spark等处理实时数据。

基础理论

HDFS架构

主节点,只有一个:namenode,2.0版本之后有多个,相当于老大,作用:

  • 接收用户操作请求
  • 维护文件系统的目录结构
  • 管理文件与block之间关系、block与datanode之间关系

从节点,有很多个:datanodes,作用:

  • 存储文件,文件被分成block存储在磁盘上
  • 为保证数据安全,文件会有多个副本
部署方式
  • 本地模式
  • 伪分布式模式
  • 集群模式

安装步骤:

  1. 准备工作(关防火墙,改ip、hostname)
  2. 安装(JDK、hadoop)
  3. 启动测试(ssh免登陆等)

准备工作

改ip、hostname

先查看下ip和主机名:

1
2
ifconfig
hostname

修改ip有三种方式:

  1. 图形界面修改。设置IPv4 method为Manual,这样每次启动后虚拟机的IP不会改变。
  2. setup命令。(redhat旗下专属)
  3. 修改配置文件。

修改配置:

1
vim /etc/sysconfig/network-scripts/ifcfg-eth0

修改BOOTPROTO=”static”,增加

1
2
3
4
5
6
IPADDR="192.168.8.88"
NETMASK="255.255.255.0"
GATEWAY="192.168.8.1"
# 上网DNS
DNS1="8.8.8.8"
DNS2="8.8.4.4"

修改主机名:

1
2
vim /etc/sysconfig/network
HOSTNAME=zc01 ###

修改IP与主机名的映射关系(host文件):

1
2
vim /etc/hosts
192.168.8.88 zc01

为了确保主机能与虚拟机进行通信,虚拟机的配置应使用hostonly模式:


VM01

设置网络配置的vmnetcfg.exe和VW启动的exe在同一目录。

设置里面也要进行配置:


VM02

设置Win10的IP就是走VMnet1这个网卡,需要设置Win10的IP:


VM03

虚拟机的IP为192.168.8.88,Win10的IP为192.168.8.100。
设置完成后相互能ping通,说明可以通信。

关闭防火墙

为了集群之间能更好的通信。

查看一下防火墙状态:

1
service iptables status

有信息说明是开启的。
关闭服务:

1
service iptables stop

这样只是暂时关闭了!不能保证机器重启时防火墙服务依然开启。那么应该查看启动状态:

1
chkconfig iptables --list

打印出:

1
2
[root@localhost Desktop]# chkconfig iptables --list
iptables 0:off 1:off 2:on 3:on 4:on 5:on 6:off

可以看到当启动状态为2~5时(之前的基础知识)服务会启动,因此我们要防止此服务在启动linux时自动开启。

关闭防火墙开机启动:

1
chkconfig iptables off

再次查看系统状态就发现都是off了。

都配置完后reboot重启一下机器。

安装

JDK

安装JDK,这是经常操作了,过一遍就行。

  1. 创建新文件夹mkdir /usr/java,这个一个好习惯。
  2. 下载、解压tar -zxvf xxx等。
  3. 环境变量。
1
2
3
4
vim /etc/profile
# 在文件最后添加
export JAVA_HOME=/usr/java/jdk1.8.0_171
export PATH=$PATH:$JAVA_HOME/bin

最后使配置生效source /etc/profile,我安装的1.8版本的JDK。

安装hadoop

根目录下新建/hadoop目录,下载二进制包到此目录下。
解压tar -zxvf hadoop-2.8.4.tar.gz

下载地址,我是下载的2.8.4版本的二进制包。

修改配置文件,一个是修改5个:

以下配置文件都是在一个目录下:

1
2
3
4
5
6
7
8
9
10
11
12
[root@zc01 etc]# cd /hadoop/hadoop-2.8.4/etc/hadoop/
[root@zc01 hadoop]# 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
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

都是用vim直接编辑修改,在Linux基础博客有讲到vim。

hadoop-env.sh

修改JAVA_HOME变量:

1
2
3
#第27行
export JAVA_HOME=/usr/java/jdk1.8.0_171
`

core-site.xml
1
2
3
4
5
6
7
8
9
10
<!-- 指定HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.8.88:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/hadoop-2.8.4/tmp</value>
</property>
hdfs-site.xml
1
2
3
4
5
<!-- 指定HDFS副本的数量(包括自己,集群时默认为3) -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
mapred-site.xml

此文件不存在,先重命名一下:

1
2
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml

1
2
3
4
5
<!-- 指定mr运行在yarn上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml
1
2
3
4
5
6
7
8
9
10
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定YARN的老大ResourceManager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>zc01</value>
</property>

最后将hadoop添加到环境变量中:

1
2
3
4
vim /etc/profile
export HADOOP_HOME=/hadoop/hadoop-2.8.4
export PATH=$PATH:$HADOOP_HOME/bin
source /etc/profile

至此,已经完成了hadoop的安装工作。

启动hadoop

初始化HDFS(namenode)第一次使用时要格式化:
hadoop namenode -format,打印出如下说明格式化成功:

1
18/07/04 19:47:06 INFO common.Storage: Storage directory /hadoop/hadoop-2.8.4/tmp/dfs/name has been successfully formatted.

启动hadoop,先启动HDFS,cd /hadoop/hadoop-2.8.4切换到hadoop目录:
sbin/start-dfs.sh启动DFS,sbin/start-yarn.sh再启动YARN。

也可以直接启动全部:sbin/start-all.sh(过时)

判断是否启动成功?
命令jps打印出Java进程,共有如下进程:

1
2
3
4
5
6
6624 SecondaryNameNode
7042 NodeManager
6394 DataNode
6301 NameNode
6766 ResourceManager
7070 Jps

说明启动成功!

也可以在Windows的浏览器直接访问:

1
2
http://192.168.8.88:50070 (HDFS管理界面)
http://192.168.8.88:8088 (MR管理界面)

如图:


hadoop1-1

hadoop1-2

说明hadoop伪分布式环境搭建完成!

解决输入多次密码的问题

在启动和停止hadoop的指令中,需要输入多次密码,一台机器还是可以忍受的。

如果是很多机器,每次输入密码太麻烦了,如何免密码启动?

解决:配置ssh免登陆:
/root目录下有隐藏的.ssh目录,先cd到这个目录,生成秘钥:
ssh-keygen -t rsa -C "zhang0chao0@gmail.com"
一路回车即可。

设置自己对自己免登陆,一行命令:
cp id_rsa.pub authorized_keys即可。

拓展:
想免登录密码登录其它的机器,一行命令ssh-copy-id [IP地址],把自己的公钥拷贝到要登录的机器上即可免秘钥登录。

启动过程中的异常

可以查看日志来解决。
cd /hadoop/hadoop-2.8.4/logs,相关的日志都在这个文件夹中。