Hadoop学习——简单介绍及单点配置步骤(2018012-10补充)

Hadoop介绍

Hadoop是一个开源的、可靠的、可扩展的系统架构,可利用分布式架构来存储海量数据,以及实现分布式的计算Doug Cutting是创始人,同时也联合开发了LucenceNutch

Hadoop作用简概

  1. 存储海量数据。
  2. 计算海量数据。
nutch到Hadoop的发展

  nutchApache的一个搜索引擎。搜索引擎必然离不开爬虫,爬虫分为聚焦爬虫和通用爬虫。而爬虫得来的数据是没有结构的,存储到传统的关系型数据库中必然不可行。后来Cutting基于Google的一篇论文《Google File System》设计了NDFS

  并在nutch 0.8之后,将NDFS模块独立出来,重命名Hadoop

  Hadoop包含1. HDFS (Hadoop Distributed File System)存储模块。2. MapReduce,基于Google《Google MapReduce》文章开发。

  2008年Cutting带着Hadoop去了Yahoo,在Yahoo供职期间,又创立了Hive pigHbase

  后来又贡献给了Aapche

Hadoop简单架构

Flume收集web中的数据,并存储到HDFS(hadoop分布式文件存储系统),通过MapReduce计算海量数据。选择将数据存储到MysqlHbaseHbase可以做到低延迟的查询。

如下图:
在这里插入图片描述

Hadoop在国内的应用

  1. 百度使用Hadoop构建数据处理平台,Hadoop集群节点数超过20000个,每天处理数据量可达到20PB
(1)做网页内容的分析处理。
(2)做用户访问行为的分析处理,可以借此建立用户画像。(根据用户定向推送)。
(3)用户推荐系统的数据分析和处理。
(4)在线广告的点击分析和流量分析。可以分析出用户的点击热力图,按照用户的点击位置来重新规划页面。
(5)定向推送广告。根据地区、爱好。
  1. 淘宝在2008年用Hadoop构建了数据平台,做商铺信息的存储,商品信息、用户信息、交易信息。

Hadoop版本介绍

   1.0时,只包含存数据的HDFS和算数据的MapReduce。在2.0时,又加入了YARNOthers
在这里插入图片描述

   Yarn是资源调度框架,实现了对资源的细粒度封装,引入Yarn之后,Hadoop的计算框架不只是MapReduce,还可以引入Spark等等。

文件存储方法

  对于大文件存储,传统上,大致分为两种方式。

纵向扩展

  在一台服务器做硬件的扩展,比如加内存条,搭磁盘阵列,这种扩展方式有上限,硬件瓶颈。

横向扩展

   用分布式思想,即多台机器来处理,先将文件切块,然后各个机器分别存储。切块存储是分布式文件系统存储的特点。
   hadoophdfs即是按照这种方式存储的。

hadoop分布式存储的结构

  hadoop分为两种节点

  1. namenode: 首先,管理整个分布式文件系统的元数据信息,比如文件名,文件多大,文件被切成几块,每个块多大,每个块的存储位置,块id等;此外,通过RPC心跳机制(datanode发来的数据包),来监测datanode节点的状态。
  2. datanode :存储分块的文件。向namenode发送心跳数据包,与namenode交互,并接收客户端的数据上传下载请求等。

  为了实现数据存储的可靠性,引入副本冗余机制,副本数量不易过多,因为副本数量越多,整个集群的磁盘利用率越低。一般有三个副本。

  datanode在分块存储时,多个副本的存在,以及存储在不同机架上,可以保证在某个节点挂掉以后系统的稳定性。

   namenode作为管理者,也需要有备份,通过zookeeper集群监听namenode的状态,一旦namenode挂掉后,它对应的临时节点也会删掉,zookeeper集群马上就会重新选举出一个leader,让整个分布式文件系统的集群正常运行。

在这里插入图片描述

   HDFS之所以能够存储海量数据,原因是它是一个分布式的可扩展的架构,而且是可靠的。

Hadoop安装配置

1、关闭防火墙

   如果是centos 6.x,则输入service iptables stop。如果是centos 7.x,则输入systemctl stop filewall.service

2、配置主机名
临时生效

  通过hostname查看主机名,如果为localhost需要更改。可以临时设置,直接输入hostname hadoop1即可。

永久生效

  永久生效,需要首先,找到etc/sysconfig/network,将HOSTNAME改名。如下:

NETWORKING=yes
HOSTNAME=hadoop1
NOZEROCONF=yes

  然后,找到etc/hosts文件中,配置hadoop集群节点的别名,留下类似的如下内容,其中192.168.1.4为当前机器的内网ip,即通过ifconfig看到的ip地址即可:

127.0.0.1 localhost
::1       localhost
192.168.1.4 hadoop1
192.168.1.5 hadoop2
192.168.1.6 hadoop3

  如果是centos 7,还要修改/etc/hostname文件中,改成hadoop1,即主机名。

  上述配置,曾经在自己阿里云ESC服务器上配置成了外网ip时,namenode没有启动成功。后来改成了阿里云的内网ip才成功。

  如果为伪分布式,那只会有一个,即当前机器的ip别名,然后保存退出。

  最后重启机器,有人说是重启网卡,貌似我重启网卡无效。reboot即可。

3、设置免密登录

   输入ssh-keygen然后一直回车。

   输入ssh-copy-id root@hadoop1将密码发送给自己,首次发送需要密码验证,验证成功后,可以使用ssh不需要密码登录服务器了。

4、配置jdk环境

  hadoop运行需要jdk环境,需要配置jdk,下载下jdk包后解压,配置etc/profile文件环境变量如下:

JAVA_HOME=/home/software/jdk1.8
CLASSPATH=.
PATH=$JAVA_HOME/bin:$PATH
export JAVA_HOME PATH CLASSPATH
5、 配置hadoop环境变量

  由于执行hadoop环境变量必须要在bin或者sbin目录下,为了在任意目录下都可以执行hadoop命令,需要配置hadoop环境变量到系统中。

  再找到/etc/profile文件,补充HADOOP_HOME,具体如下内容:

JAVA_HOME=/home/software/jdk1.8
HADOOP_HOME=/home/software/hadoop-2.7.1
CLASSPATH=.
PATH=$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export JAVA_HOME PATH CLASSPATH HADOOP_HOME

  配置完之后,执行source /etc/profile ,使之生效。

6、配置hadoop

   下载hadoop-2.7.1并解压,binsbinhadoop的命令,libshare为安装包,etc/hadoop为配置文件。

  进入 etc/hadoop文件中,输入vim hadoop-env.sh,进入文件,修改JAVA_HOME路径,将该路径指向自己服务器jdk安装目录,配置如下:

export JAVA_HOME=/home/software/jdk1.8

  同样在该文件中,修改HADOOP_CONF_DIR 指向hadoop的安装包路径即可。配置完成后,保存退出。,配置如下:

HADOOP_CONF_DIR=/home/software/hadoop-2.7.1/etc/hadoop

  注意以上配置,必须要写明具体的路径,比如原本里边的$JAVA_HOME,是读不到这个环境变量的。配置完之后执行下边的命令,使配置文件生效

source hadoop-env.sh

  然后vim core-site.xml,在<configration>标签内加入如下内容:

<!--指定namenode服务器的ip地址和通信端口-->
<property>
<name>fs.default.name</name>
<value>hdfs://hadoop1:9000</value>
</property>

<!--指定namenode存放元数据的目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/software/hadoop-2.7.1/tmp</value>
</property>

  添加完之后,保存退出,注意上边的hdfs://hadoop1:9000,hadoop1即是前边配置的主机名,这里是hdfs的配置端口。

  然后vim hdfs-site.xml,还是找到<configration>标签内加入如下内容:

<!--用于配置副本数量,如果是伪分布式配置1,如果是真实分布式配置3-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>

  如果伪分布式,必须设置为1,否则会造成进入安全模式,一直无法结束,而且也没有意义,设置成多个副本。

  配置完之后保存退出,以上配置的core-site.xmlhdfs-site.xml相当于在配置namenode

  然后输入vim slavesslaves配置的是创建块的机器,即工作的节点,当为集群时,添加多个,但是如果为1个节点伪分布式配置,那就添加1个即可,添加如下内容:

hadoop1

  因为当前为伪分布式,只有一台机器,即配置一个。

&emsp: 再找到mapred-site.xml.template文件,然后将其重命名为mapred-site.xml,并打开,添加如下内容:

<!--指定mapreduce运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

&emsp: 最后,再打开yarn-site.xml配置文件,并添加如下内容:

<!--指定yarn的老大 resoucemanager的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop1</value>
</property>
<!--NodeManager获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

  然后回到bin目录下,输入如下命令格式化hadoop,当为新配置的hadoop集群时需要格式化集群。

sh hadoop namenode -format

   如果出现successfully formatted字样,表示格式化成功。
格式化后会看到tmp文件夹多出了一个dfs文件夹。如果没出现dfs文件夹说明配置有问题

7、hadoop启动命令

  启动命令在sbin目录下,进入sbin目录,输入如下命令启动hadoop,首次启动时会提示,输入yes即可:

sh start-all.sh

  如果前边已经配置了HADOOP_HOME,并且也source了,那可以在任意路径下直接输入执行start-all.sh命令即可。

  多补充一句,有些说是启动start-dfs.sh命令,它和start-all.sh是有区别的,前者仅仅启动三个,即namenodedatanodeSecondaryNameNode。后者是启动连yarnmapreduce一起启动的。

  启动日志打印完之后,输入jps,如果出现下面标识的进程,则表示启动成功:

28128 ResourceManager
27970 SecondaryNameNode
28456 Jps
27822 DataNode
27694 NameNode
28223 NodeManager

  启动成功后,通过浏览器访问http://192.168.1.4:50070也能访问到hadoop页面。

  上述启动命令是把所有hdfs相关的都启动了,如果想单独启动可以采用下边的命令。

hadoop-daemon.sh start namenode //启动namenode
hadoop-daemon.sh start datanode //启动datanode
hadoop-daemon.sh start secondarynamenode //启动secondarynamenode

  如果启动失败则需要把tmp文件夹删掉,重新建一下,然后格式化。注意格式化命令不能随便执行。会清掉元数据。

8、hadoop关闭命令

  同样在sbin目录下,输入如下命令,如果已经配置了HADOOP_HOME,则可以在任意路径下直接执行stop-dfs.sh即可。:

sh stop-dfs.sh

  如果想单独关闭某个可以使用下边这个命令:

hadoop-daemon.sh stop namenode|datanode|secondarynamenode

  当然一般使用最简单的kill -9杀死进程了,先jps看进程号,然后再kill -9

9、启动失败处理步骤

  启动过程中,会打印部分日志,其中包含日志文件的位置,还有抛出的异常,如果异常没有,则到日志文件中找日志,查看异常。

  如果日志和异常都没有,那首先停掉hadoop,然后找到上边配置的tmp文件夹,先查看tmp文件夹中是否有东西,如果它下边连dfs文件夹都没有,说明可能是hadoop-env.shcore-site.xml文件中配置有问题,查看一下;如果tmp中有内容,则将其删掉,然后再重新建一个该文件。

  最后回到bin目录下,输入格式化hadoop命令,即:

sh hadoop namenode -format

  如果不报错,则重新启动hadoop启动脚本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茁壮成长的凌大大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值