logo头像
Snippet 博客主题

Hadoop伪分布式搭建

** Hadoop伪分布式搭建:** <Excerpt in index | 首页摘要>

​ 大数据(Big Data),指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
​ 大数据的定义是4Vs:数据量大、处理速度快、数据源多样、真实性。用中文简单描述就是大、快、多、真。

<The rest of contents | 余下全文>

1.1Hadoop简介

1.1.1Hadoop创始人

​ 1985年,Doug Cutting毕业于美国斯坦福大学。他并不是一开始就决心投身IT行业的,在大学时代的头两年,Cutting学习了诸如物理、地理等常规课程。因为学费的压力,Cutting开始意识到,自己必须学习一些更加实用、有趣的技能。这样,一方面可以帮助自己还清贷款,另一方面,也是为自己未来的生活做打算。因为斯坦福大学座落在IT行业的“圣地”硅谷,所以学习软件对年轻人来说是再自然不过的事情了。 1997年底,Cutting开始以每周两天的时间投入,在家里试着用Java把这个想法变成现实,不久之后,Lucene诞生了。作为第一个提供全文文本搜索的开源函数库,Lucene的伟大自不必多言。

Doug Cutting是Lucence,Nutch,Hadoop的创始人。

1.1.2Hadoop起源

​ 2004年,Cutting和同为程序员出身的Mike Cafarella决定开发一款可以代替当时的主流搜索产品的开源搜索引擎,这个项目被命名为Nutch。Nutch基于Lucence实现的搜索引擎,能够从互联网上抓取网页数据。抓取来的海量数据的存储问题。但是,这些海量数据都是非结构化数据,不能存在关系型数据库里。如果连数据的存储和管理都解决不了化,就谈不上后续为用户提供搜索服务,包括通过算法去优化检索速度。那时的Cutting正处在Freelancer的生涯 中,所以他希望自己的项目能通过一种低开销的方式来构建网页中的大量算法。幸运的是,Google这时正好发布了一项研究报告,报告中介绍了两款Google为支持自家的搜索引擎而开发的软件平台。这两个平台一个是GFS(Google File System),用于存储不同设备所产生的海量数据;另一个是MapReduce,它运行在GFS之上,负责分布式大规模数据。

​ 2006年cutting根据《Google File System》设计了Nutch的HDFS,hadoop distributed file system。

Hadoop最开始是nutch的子项目,目的是解决nutch的海量数据存储问题。在nutch 0.8版本之后,Hadoop独立处理,成为一个独立的项目。后来,又根据《Google MapReduce》设计了基于HDFS的MapRedce计算框架。

2006年之后,cutting带着Hadoop去了雅虎,当时有100多人的团队共同帮cutting完善hadoop。后来yahoo把Hadoop贡献了Apache。所以,现在Hadoop是Apache的顶级项目。

2.1Hadoop搭建

Hadoop的三种运行模式

  1. 独立(本地)运行模式:无需任何守护进程,所有的程序都运行在同一个JVM上执行。在独立模式下调试MR程序非常高效方便。所以一般该模式主要是在学习或者开发阶段调试使用 。

  2. 伪分布式模式: Hadoop守护进程运行在本地机器上,模拟一个小规模的集群,换句话说,可以配置一台机器的Hadoop集群,伪分布式是完全分布式的一个特例。

  3. 完全分布式模式:Hadoop守护进程运行在一个集群上。

3.1 单机伪分布模式

​ 只支持MapReduce,不支持HDFS。这种模式一般用于调试MapReduce任务用的。

3.1.1 准备Linux环境,最低的工作内存1G

内容详见:Vmware安装Centos6.9文档

3.1.2 关闭防火墙

临时关闭防火墙:service iptables stop

1
service iptables stop

永久关闭防火墙:chkconfig iptables off

1
chkconfig iptables off

注意:永久修改防火墙需要重启,永久和临时同时执行,可以不用重启。

3.1.3 配置主机名

查询主机名称:hostname

1
hostname

临时修改主机名:hostname

1
hostname <name>

永久修改主机名:vim /etc/sysconfig/network

1
vim /etc/sysconfig/network

注意:

1.永久修改主机名需要重启,永久和临时同时执行,可以不用重启。

2.主机名里不能有下滑线,或者特殊字符 #$,不然会找不到主机导致无法启动。

注意:

1.永久修改主机名需要重启,永久和临时同时执行,可以不用重启。

2.主机名里不能有下滑线,或者特殊字符 #$,不然会找不到主机导致无法启动。

3.1.4 配置hosts文件

执行: vim /etc/hosts

1
vim /etc/hosts

注意:

  1. 不要删除前两行内容。
  2. IP在前,主机名在后。

3.1.5 配置免密码登录

3.1.5.1 免密登陆原理

  1. A机器生成公钥和私钥

  2. 机器A发送自己的公钥到机器B,这个时候机器B有了机器A的公钥

  3. 机器B发送一个随机的字符串向机器A

  4. 机器A利用自己的私钥把字符串加密

  5. 机器A把加密后的字符串再次发送给机器B

  6. 机器B利用公钥解密字符串,如果和原来的一样,则OK。

3.1.5.1 免密登陆实现

  1. 生成自己的公钥和私钥 ssh-keygen

    1
    ssh-keygen
  2. 把生成的公钥copy到远程机器上 ssh-copy-id root@hadoop01

    1
    ssh-copy-id root@hadoop01

注意:如果是单机的伪分布式环境,自己节点也需要配置免密登录。

3.1.6 安装和配置jdk

  1. 执行:

    1
    vim /etc/profile
  2. 在尾行添加

    1
    2
    3
    4
    5
    #Set Java ENV
    JAVA_HOME=/home/jdk1.8.0_65
    PATH=$JAVA_HOME/bin:$PATH
    CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME PATH CLASS_PATH

保存退出 :wq

  1. 命令行执行:

    1
    source /etc/profile
  2. java -version 查看JDK版本信息。

    1
    java -version

3.1.7 上传和安装hadoop

下载地址:http://hadoop.apache.org/releases.html

注意:

source表示源码

binary表示二级制包(安装包)

3.1.7.1 解压Hadoop文件包

执行:tar -zxvf hadoop-2.7.1_64bit.tar.gz

1
tar -zxvf hadoop-2.7.1_64bit.tar.gz

3.1.7.2 Hadoop目录说明

bin目录:命令脚本

etc/hadoop:存放hadoop的配置文件

lib目录:hadoop运行的依赖jar包

sbin目录:启动和关闭hadoop等命令都在这里

libexec目录:存放的也是hadoop命令,但一般不常用

注意:最常用的就是bin和etc目录。

3.1.8 配置hadoop配置文件

Hadoop目录下/home/hadoop-2.7.1/etc/hadoop/目录下6个文件

3.1.8.1 hadoop-env.sh

执行:vim hadoop-env.sh

1
vim hadoop-env.sh

修改:修改java_home路径和hadoop_conf_dir 路径 25行 33行

1
2
3
4
#25行
export JAVA_HOME=/home/jdk1.8.0_65
#33行
export HADOOP_CONF_DIR=/home/hadoop-2.7.1/etc/hadoop

然后执行:source hadoop-env.sh编译文件。

1
source hadoop-env.sh

3.1.8.2 core-site.xml

命令行执行:vim core-site.xml

1
vim core-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<!--用来指定hdfs的老大,namenode的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://tedu:9000</value>
</property>
<!--用来指定hadoop运行时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop-2.7.1/tmp</value>
</property>
</configuration>

3.1.8.3 hdfs-site .xml

命令行执行:vim hdfs-site.xml

1
vim hdfs-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<configuration>
<!--指定hdfs保存数据副本的数量,包括自己,默认值是3-->
<!--如果是伪分布模式,此值是1-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<!--设置hdfs的操作权限,false表示任何用户都可以在hdfs上操作文件-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>

3.1.8.4 mapred-site.xml

命令行执行:

1
2
3
cp mapred-site.xml.template mapred-site.xml

vim mapred-site.xml
1
2
3
4
5
6
7
<configuration>
<property>
<!--指定mapreduce运行在yarn上-->
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>

3.1.8.5 yarn-site.xml

命令行执行:vim yarn-site.xml

1
vim yarn-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<!--指定yarn的老大 resoucemanager的地址-->
<name>yarn.resourcemanager.hostname</name>
<value>tedu</value>
</property>
<property>
<!--NodeManager获取数据的方式-->
<name>yarn.nodemanager.aux- services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>

3.1.8.6 slaves

命令行执行:

1
vim slaves

修改主机名

3.1.9 配置hadoop的环境变量

  1. 文件最后追加文件

    HADOOP_HOME=/home/hadoop-2.7.1

    export HADOOP_HOME

  2. source /etc/profile 使更改的配置立即生效。

    1
    2
    3
    4
    5
    6
    #Set Java ENV
    JAVA_HOME=/home/jdk1.8.0_65
    HADOOP_HOME=/home/hadoop-2.7.1
    PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$JAVA_HOME/bin:$PATH
    CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
    export JAVA_HOME PATH CLASSPATH HADOOP_HOME

3.1.10 格式化Namenode

执行:hdfs namenode -format

1
hdfs namenode -format

如果不好使,可以重启linux

当出现:successfully,证明格式化成功。

3.1.11 启动Hadoop

在/home/hadoop-2.7.1/sbin目录下

执行:./start-all.sh

1
./start-all.sh

3.1.12 验证启动成功

可以访问网址: http://192.168.220.128:50070