11.apache hadoop 伪分布式搭建

通过伪分布式来回顾前面的知识,并通过演示来帮大家实验前面的知识点,然后初步带领大家了解hadoop配置文件,使我们对hadoop的认知不仅仅停留在理论基础上。

当然这篇文仅仅是初步实验,后面我们会采用5台设备搭建真正的Hadoop集群,同时博主正在做500台Hadoop集群的搭建工作,我们会拿出100台来为大家展示大规模CDH集群的搭建及维护细节

apache hadoop版本选择

http://hadoop.apache.org/releases.html
可以看出目前
25 January, 2016: Release 2.7.2 (stable) available
A point release for the 2.7 line.
Please see the Hadoop 2.7.2 Release Notes for the list of 155 bug fixes and patches since the previous release 2.7.1.
但是因为目前生产环境中大部分仍使用2.6版本,固我们本次课程演示Hadoop2.6的安装与维护
28 October, 2015: Release 2.6.2 available
Apache Hadoop 2.6.2 is a point release in the 2.6.x release line, and fixes a few critical issues in 2.6.1.
Please see the Hadoop 2.6.2 Release Notes for details.
所以我们使用hadoop 2.6.2

安装java

首先 java -version  检查本机有无java,如果有,检查是否为openjdk,如果是请卸载,安装oracle JDK 
以下是安装过程
mkdir -p /app/zpy/java
tar zxvf jdk-8u51-linux-x64.tar.gz -C /app/zpy/java  > /dev/null 2>&1
echo '# JAVA-8u51' >> /etc/profile
echo 'JAVA_HOME=/app/zpy/java/jdk1.8.0_51' >> /etc/profile
echo 'JAVA_BIN=/app/zpy/java/jdk1.8.0_51/bin' >> /etc/profile
echo 'PATH=$PATH:$JAVA_BIN' >> /etc/profile
echo 'CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar' >> /etc/profile
echo 'export JAVA_HOME JAVA_BIN PATH CLASSPATH' >> /etc/profile
source  /etc/profile
echo " please open other session to test java "
请使用 jdk 8 或以上版本 

下载hadoop 源码包并解压:

cd /app/zpy 
wget https://dist.apache.org/repos/dist/release/hadoop/common/hadoop-2.6.2/hadoop-2.6.2.tar.gz
tar zxvf hadoop-2.6.2.tar.gz
mv hadoop-2.6.2  hadoop

hadoop 目录说明

  • bin:Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
  • etc:Hadoop配置文件所在的目录,包括core-site.xml、hdfs-site.xml、mapred-site.xml等从Hadoop1.0继承而来的配置文件和yarn-site.xml等Hadoop2.0新增的配置文件。
  • include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce程序。
  • lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
  • libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息。
  • sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
  • share:Hadoop各个模块编译后的jar包所在的目录。

配置环境变量

vim /etc/profile.d/hadoop.sh
添加
export HADOOP_PRIFIX=/app/zpy/hadoop
export PATH=$PATH:${HADOOP_PRIFIX}/bin:${HADOOP_PRIFIX}/sbin
export HADOOP_YARN_HOME=${HADOOP_PRIFIX}
export HADOOP_MAPPERD_HOME=${HADOOP_PRIFIX}
export HADOOP_COMMON_HOME=${HADOOP_PRIFIX}
export HADOOP_HDFS_HOME=${HADOOP_PRIFIX}

创建hadoop 目录,并创建hadoop的数据和日志目录

useradd hadoop
mkdir -pv /data/hadoop/hdfs/{nn,snn,dn}    ##说明:nn:namenode  dn:datanode  snn:second namenode 
mkdir -pv /data/hadoop/logs 

修改属主,属组
chown -R  hadoop:hadoop /data/hadoop/
chown -R  hadoop:hadoop /app/zpy/hadoop

修改 core-site.xml

core-site.xml 文件包含了NAMEnode主机地址以及其监听的RPC端口信息,对于伪分布式模型的安装来说,其主机地址为localhost。
NameNode默认使用的RPC端口为8020.

RPC的解释:
RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不
需要了解底层网络技术的协议。
RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。

我们打开后发现配置文件如下:
<configuration>
</configuration>
↑其实这两行就是一个闭合标签,我们应该在这两个闭合标签内部增加一个或者多个属性(property)标签

如下所示
<configuration>
 <property>
  内容1。。。
 </property>

<property>
  内容2。。。
 </property>

</configuration>

最终配置文件修改如下:
<configuration>
 <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:8020</value>
        <final>true</final>
 </property>
</configuration>

hdfs-site.xml文件配置案例

hdfs-site.xml主要用于配置HDFS的相关属性,例如数据块的副本数、NN和DN用于存储数据的目录等。
数据块的副本数对于伪分布式的HADOOP来说应该是1
NN和DN用于存储数据的目录为前面设置的路径

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

    <property>
        <name>dfs.namenode.name.dir</name>
        <value>file:///data/hadoop/hdfs/nn</value>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>file:///data/hadoop/hdfs/dn</value>
    </property>

    <property>
        <name>fs.checkpoint.dir</name>
        <value>file:///data/hadoop/hdfs/snn</value>
    </property>

    <property>
        <name>fs.checkpoint.edits.dir</name>
        <value>file:///data/hadoop/hdfs/snn</value>
    </property> 
</configuration>
注意: 如果需要其他用户对HDFS有写入的权限,还需要再hdfs-site.xml中添加一项属性定义
    <property>
        <name>dfs.permissions</name>
        <value>false</value>
    </property>

修改mapred-site.xml

mapred-site.xml文件用于配置集群的MapReduce framework ,此处应该指定使用yarn,另外可用的值还有
local和classic。
mapred-site.xml 默认是不存在的,但有模块文件mapred-site.xml.template ,只需要将其复制为mapred-site.xml即可 
cp mapred-site.xml.template  mapred-site.xml

修改配置文件:
<configuration>
 <property>
  <name>mapreduce.framework.name</name>
  <value>yarn</value>
 </property>
</configuration>

配置yarn-site.xml

yarn-site.xml 用于配置YARN进程及YARN的相关属性,首先需要指定ResourceManager守护进程的主机及监听的端口,
对于伪分布式模型来讲,其主机为localhost,默认的端口为8032;
其次需要指定ResourceManager使用的scheduler(调度器),以及NodeManager的辅助服务
一个简要的配置实例如下所示:

<configuration>
 <property>
  <name>yarn.resourcemanager.address</name>
  <value>localhost:8032</value>
 </property>
 
 <property>
  <name>yarn.resourcemanager.scheduler.address</name>
  <value>localhost:8030</value>
 </property>

 <property>
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>localhost:8031</value>
 </property>
 
 <property>
  <name>yarn.resourcemanager.admin.address</name>
  <value>localhost:8033</value>
 </property>
 
 <property>
  <name>yarn.resourcemanager.webapp.address</name>
  <value>localhost:8088</value>
 </property>

 <property>
  <name>yarn.nodemanager.aux-services</name>
  <value>mapreduce_shuffle</value>
 </property>
 

 <property>
  <name>yarn.nodemanager.auxservices.mapreduce_shuffle.class</name>
  <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>

 
 <property>
  <name>yarn.resourcemanager.scheduler.class</name>
 <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
 </property>
</configuration>

配置hadoop-env.sh 和 yarn.env.sh

HADOOP的守护进程依赖于JAVA_HOME环境变量,如果有类似于前面步骤中通过/etc/profile.d/java.sh全局配置定义的JAVA_HOME变量即可正常使用
不过,如果想为HADOOP定义依赖到的特定JAVA环境,也可以编辑这两个脚本文件,为JAVA_HOME取消注释并配置合适的值即可。
此外hadoop大多数守护进程默认使用的堆大小为1GB,但是显示应用中,可能对其各类进程的堆内存大小做出调整,这只需要编辑这两个文件中的相关
环境变量即可,例如HADOOP_HEAPSIZE,HADOOP_JOB_HISTORY_HEAPSIZE,JAVA_HEAP_SIZE和YARN_HEAP_SIZE等

配置 slaves 文件

slaves文件存储了当前集群的所有slave节点的列表,对于伪分布式模型,其文件内容应该仅为localhost,这也是这个文件的默认内容
因此伪分布式模型中,此文件的内容保持一致即可

格式化HDFS

在HDFS的NN启动之前需要先初始化其用于存储数据的目录,如果hdfs-site.xml中的dfs.namenode.name.dir 属性指定的目录不存在,格式化命令会自动创建;
如果事先存在,请确保其权限设置正确,此时格式化操作会清除其内部所有数据并重新建立一个新的文件系统。

chown -R hadoop:hadoop /data/hadoop
chown -R hadoop:hadoop /app/zpy/hadoop
su hadoop
以hadoop用户执行:
hdfs namenode -format

看格式化是否成功,应该找到这样一句话
17/04/17 10:07:17 INFO common.Storage: Storage directory /data/hadoop/hdfs/nn has been successfully formatted.

检测data/hadoop/hdfs/nn/发现多了一个current

/data/hadoop/hdfs/nn/current
[hadoop@localhost current]$ ll
total 16
-rw-rw-r-- 1 hadoop hadoop 353 Apr 14 09:57 fsimage_0000000000000000000
-rw-rw-r-- 1 hadoop hadoop  62 Apr 14 09:57 fsimage_0000000000000000000.md5
-rw-rw-r-- 1 hadoop hadoop   2 Apr 14 09:57 seen_txid
-rw-rw-r-- 1 hadoop hadoop 202 Apr 14 09:57 VERSION

至此格式化成功

启动hadoop 说明(以下命令暂不执行)

hadoop2 的启动操作可通过其sbin路径下的专用脚本进行启动

例如:

hadoop-daemon.sh(start|stop)namenode  --这是启动namenode的
hadoop-daemon.sh(start|stop)datanode  --这是启动datanode的
hadoop-daemon.sh(start|stop)secondarynamenode  --这是启动secondarynamenode的
yarn-daemon.sh(start|stop)resourcemanager
yarn-daemon.sh(start|stop)nodemanager

启动HDFS相关

HDFS有三个守护进程,namenode、datanode、和secondarynamenode.他们都可以通过hadoop-daemon.sh 脚本启动或者停止。
以hadoop用户执行相关的命令即可,如下所示:

[hadoop@localhost sbin]$ hadoop-daemon.sh start namenode 
starting namenode, logging to /app/zpy/hadoop/logs/hadoop-hadoop-namenode-localhost.out

ok,那么namenode启动起来了,进入提示的日志文件目录发现其中两个文件

hadoop-hadoop-namenode-localhost.log
hadoop-hadoop-namenode-localhost.out
实际上日志文件是.log结尾的,而非提示的.out

jps命令检查是否启动成功:

[hadoop@localhost logs]$ jps
27449 Jps
27214 NameNode
jps -v 可以看详细的信息

启动secondarynamenode

hadoop-daemon.sh start secondarynamenode
starting secondarynamenode, logging to /app/zpy/hadoop/logs/hadoop-hadoop-secondarynamenode-localhost.out

启动datanode节点
ps:正常生产环境中,我们是不会把datanode与namenode放在一起的,因为这个实验是伪分布式集群

hadoop-daemon.sh start datanode
结果:starting datanode, logging to /app/zpy/hadoop/logs/hadoop-hadoop-datanode-localhost.out

用jps 检查所有启动结果

[hadoop@localhost logs]$ jps
39282 SecondaryNameNode
38979 NameNode
39531 Jps
39423 DataNode

现在我们HDFS启动完成,我们要看看HDFS的使用方式,详见
apache hadoop 伪分布式搭建-part2-HDFS简单命令

启动yarn

启动resourcemanager :

yarn-daemon.sh start resourcemanager 
结果:starting resourcemanager, logging to /app/zpy/hadoop/logs/yarn-hadoop-resourcemanager-localhost.out
jps命令检查是否启动成功

启动nodemanager:

yarn-daemon.sh start nodemanager 

使用jps命令查看

[hadoop@bogon root]$ jps
39282 SecondaryNameNode
3490 Jps
38979 NameNode
3275 NodeManager
2926 ResourceManager
39423 DataNode

WEBUI

HDFS和YARN ResourceManager 各自提供了一个web接口,通过这些接口可以检查HDFS集群以及YARN集群的相关状态信息。
他们的访问接口分别为如下所示,具体使用中,需要将Namenode和RresourceManagerHost分别修改其相应的主机地址

HDFS-NameNode WEBUI

访问方式:
http://10.0.140.81:50070

namedode WEBUI

可以看出很多有用的信息
Configured Capacity: 279.72 GB
DFS Used: 44 KB
Non DFS Used: 17.88 GB
DFS Remaining: 261.84 GB
DFS Used%: 0%
DFS Remaining%: 93.61%
Live Nodes 1 (Decommissioned: 0)
Dead Nodes 0 (Decommissioned: 0)
Decommissioning Nodes 0

ResourceManager WEBUI

访问方式:
http://10.0.140.81:8088

注意: 在yarn-site.xml文件中yarn.resourcemanager.webapp.address属性的值如果定义为"localhost:8088",则其WEBUI 仅监听于127.0.0.1地址上的8088端口

也可以通过ss -tnl来看:50070是所有地址,8088是本地地址

ss -tnl
LISTEN      0      128                                                                     127.0.0.1:8020 
LISTEN      0      128                                                                             *:50070    
LISTEN      0      128                                                              ::ffff:127.0.0.1:8088   

所以我们修改配置文件yarn-site.xml

 <property>
   <name>yarn.resourcemanager.webapp.address</name>
   <value>10.0.140.81:8088</value>
 </property>

重启:
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh start resourcemanager

resource manager WEBUI

向HADOOP 提交mapreduce 程序

ok,现在我们HDFS搭建完毕了,YARN也搭建完毕了,现在我们想在YARN上跑一个mapreduce程序。我又不会写map和reduce程序,怎么办?

hadoop为我们提供了测试包
hadoop-YARN 自带了很多样例程序,他们位于hadoop安装路径下的
share/hadoop/mapreduce/目录里,其中hadoop-mapreduce-examples-2.6.2.jar 就可以作为mapreduce的程序测试!

执行测试

yarn jar hadoop-mapreduce-examples-2.6.2.jar

提示如下:

An example program must be given as the first    argument. (必须要跟一个程序名)
Valid program names are:
  aggregatewordcount: An Aggregate based map/reduce program that counts the words in the input files.
  aggregatewordhist: An Aggregate based map/reduce program that computes the histogram of the words in the input files.
  bbp: A map/reduce program that uses Bailey-Borwein-Plouffe to compute exact digits of Pi.
  dbcount: An example job that count the pageview counts from a database.
  distbbp: A map/reduce program that uses a BBP-type formula to compute exact bits of Pi.
  grep: A map/reduce program that counts the matches of a regex in the input.
  join: A job that effects a join over sorted, equally partitioned datasets
  multifilewc: A job that counts words from several files.
  pentomino: A map/reduce tile laying program to find solutions to pentomino problems.
  pi: A map/reduce program that estimates Pi using a quasi-Monte Carlo method.(求π值的)
  randomtextwriter: A map/reduce program that writes 10GB of random textual data per node.
  randomwriter: A map/reduce program that writes 10GB of random data per node.
  secondarysort: An example defining a secondary sort to the reduce.
  sort: A map/reduce program that sorts the data written by the random writer.
  sudoku: A sudoku solver.
  teragen: Generate data for the terasort
  terasort: Run the terasort
  teravalidate: Checking results of terasort
  wordcount: A map/reduce program that counts the words in the input files.
  wordmean: A map/reduce program that counts the average length of the words in the input files.
  wordmedian: A map/reduce program that counts the median length of the words in the input files.
  wordstandarddeviation: A map/reduce program that counts the standard deviation of the length of the words in the input files.

yarn jar hadoop-mapreduce-examples-2.6.2.jar wordcount 
Usage: wordcount <in> [<in>...] <out> 

备注:in 与 out 都是指HDFS文件,而非本地文件

ok,那我们再修改一下:

yarn jar hadoop-mapreduce-examples-2.6.2.jar wordcount /dailiang/fstab /test/wordcount 

ps:/test/wordcount 必须是目录,会自动在该目录下创建一个文件,并将结果存在此文件

然后程序执行过程中,可以访问yarn的web界面,可以看到application程序正在运行:


图片.png

查看结果

hdfs dfs -cat /test/wordcount/part-r-00000

我们发现每个词语的数量都被统计出来了

#       7
'/dev/disk'     1
/       1
/boot   1
/etc/fstab      1
0       6
2017    1
21:19:01        1
5       1
Accessible      1
Created 1
Jul     1
See     1
UUID=1a1736eb-defa-49fc-9cfe-c5207f038338       1
UUID=7477064f-a3bd-4d8c-b6d3-0d9ee8c50297       1
UUID=9712c227-d80b-4c87-87b7-b6d674d8811b       1

ok。。这就是整个伪分布式集群的搭建过程

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容