『HDFS』伪分布式Hadoop集群

博客引流

本文是『Hadoop』MapReduce 处理 日志log(单机版)的旭文, maybe还有后续

在搭建环境的时候发现很难搜到合适的教程,所以这篇应该会有一定受众

伪分布式就是假分布式,假在哪里,假就假在他只有一台机器而不是多台机器来完成一个任务,
但是他模拟了分布式的这个过程,所以伪分布式下Hadoop也就是你在一个机器上配置了hadoop的所有节点

但伪分布式完成了所有分布式所必须的事件

伪分布式Hadoop和单机版最大的区别就在于需要配置HDFS

HDFS

HDFS = Hadoop Distributed File System

当数据量超过单个物理机器上存储的容量,管理跨越机器的网络存储特定操作系统被称为分布式文件系统,HDFS就是这样一种系统

HDFS集群主要由 NameNode 管理文件系统 Metadata 和从机 DataNodes 存储的实际数据

NameNode = Hadoop Master, DataNodes = Hadoop Slave

  • NameNode: NameNode即系统的主站
    • 其维护所有系统中存在的文件和目录的文件系统树和元数据
  • DataNode : DataNodes作为从机,每台机器位于一个集群中,并提供实际的存储,它负责为客户读写请求服务

HDFS中的读/写操作运行在一个个块中,块作为独立的单元存储

之前我们提到这些块都是逻辑上划分的,只是用一个索引记录块的始末,并未真正的划分块

在Hadoop 1.x中block默认size=64M,而Hadoop 2.x中默认size改为128M

如果想重新定义block.size

$ vim etc/hadoop/hdfs-site.xml

# add
    <property>
        <name>dfs.block.size</name>
        <value>20971520</value> # 其中该值为字节B数,且需要满足>1M=1048576=1024×1024, 且能被512整除
    </property>

HDFS是可容错的,可伸缩的,易于扩展,高可用的

HDFS读操作

HDFS这个系统除了主机和从机之外,还包括client端,file system

当客户端想读取一个文件的时候,客户端需要和NameNode节点进行交互,因为它是唯一存储数据节点元数据的节点

NameNode规定奴隶节点的存储数据的地址跟位置

客户端通过NameNode找到它需要数据的节点,然后直接在找到DataNode中进行读操作

考虑到安全和授权的目的,NameNode给客户端提供token,这个token需要出示给DateNote进行认证,认证通过后,才可以读取文件

由于HDFS进行读操作的时候需要需要访问NameNode节点,所以客户端需要先通过接口发送一个请求,然后NameNode节点在返回一个文件位置

在这个过程中,NameNode负责检查,该客户端是否有足够的权限去访问这组数据?

如果拥有权限,NameNode会将文件储存路径分享给该客户端,与此同时,namenode也会将用于权限检查的token分享给客户端

当该客户端去数据节点读文件的时候,在检查token之后,数据节点允许客户端读特定的block. 一个客户端打开一个输入流开始从DataNode读取数据,然后,客户端直接从数据节点读取数据

如果在读取数据期间datanodes突然废了,这个客户端会继续访问Namenode, 这是NameNode会给出这个数据节点副本的所在位置

HDFS写操作

image

我们知道读取文件需要客户端访问Namenode. 相似的写文件也需要客户端与NameNode进行交互,NameNode需要提供可供写入数据的奴隶节点的地址

当客户端完成在block中写数据的操作时,这个奴隶节点开始复制自身给其他奴隶节点,直到完成拥有n个副本(这里的n为副本因子数)

当复制完成后,它会给客户端发一个通知,同样的这个授权步骤也和读取数据时一样

当一个客户端需要写入数据的时候,它需要跟NameNode进行交互,客户端发送一个请求给NameNode, NameNode同时返回一个可写的地址给客户端

然后客户端与特定的DataNode进行交互,将数据直接写入进去。当数据被写入和被复制的过程完成后,Datanode发送给客户端一个通知,告知数据写入已经完成

当客户端完成写入第一个block时,第一个数据节点会复制一样的block给另一个DataNode, 然后在这个数据节点完成接收block之后,它开始复制这些blocks给第三个数据节点

第三个数据节点发送通知给第二个数据节点,第二个数据节点在发送通知给第一个数据节点,第一个数据节点负责最后通知客户端

不论副本因子是多少,客户端只发送一个数据副本给DataNode, DataNode完成后续所有任务的复制工作

所以,在Hadoop中写入文件并不十分消耗系统资源,因为它可以在多个数据点将blocks平行写入

HDFS 配置

# 修改为主机名
$ vim etc/hadoop/slaves
# 添加主机名
$ vim /etc/hosts
# create folder
$ mkdir -p /usr/local/hadoop/tmp
# 修改temp地址
$ vim etc/hadoop/core-site.xml

    <property>
        <name>hadoop.tmp.dir</name>
        <value>file:/usr/local/hadoop/tmp</value>
        <description>Abase for other temporary directories.</description>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value> ## localhost填主机名->主机名也是一个坑
    </property>
# create folder
$ mkdir -p /usr/local/hadoop/dfs/name
$ mkdir -p /usr/local/hadoop/dfs/data
# 修改分布式储存配置
$ vim etc/hadoop/hdfs-site.xml
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>10</value> ## node数
    </property>
    <property>
        <name>dfs.block.size</name>
        <value>20971520</value> ## block.size
    </property>
   <property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///usr/local/hadoop/dfs/name</value>
   </property>
   <property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///usr/local/hadoop/dfs/data</value>
   </property>
   <property>
    <name>dfs.permissions</name>
    <value>false</value>
   </property>
</configuration>
# yarn 配置,注意所有localhost为主机名,需保持一致
$ vim etc/hadoop/yarn-site.xml
<configuration>
   <property>
    <name>yarn.resourcemanager.admin.address</name>
    <value>localhost:8033</value>
   </property>
   <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
   </property>
   <property>
    <name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
   <property>
    <name>yarn.resourcemanager.resource-tracker.address</name>
    <value>localhost:8025</value>
   </property>
   <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>localhost:8030</value>
   </property>
   <property>
    <name>yarn.resourcemanager.address</name>
    <value>localhost:8050</value>
   </property>
   <property>
    <name>yarn.resourcemanager.scheduler.address</name>
    <value>localhost:8030</value>
   </property>
   <property>
     <name>yarn.resourcemanager.webapp.address</name>
     <value>localhost:8088</value>
   </property>
   <property>
    <name>yarn.resourcemanager.webapp.https.address</name>
    <value>localhost:8090</value>
   </property>
</configuration>

完成上述配置之后,需要对FS进行相应的格式化操作

hdfs namenode -format
hdfs getconf -namenodes

然后就可以启动hdfs了

$ bash sbin/start-all.sh

启动之后可以通过Jbs命令查看进程

也可以通过http://ip:50070进入HDFS的前端进行文件管理

报错FAQ

  1. Hadoop 3.1.1版本在bash sbin/start-dfs.sh会报bash v3.2+ is required. Sorry.

这个没法解决,搜了好多都没有答案,把包换成2.9.1就好了
PS: 记得把所有环境变量,软链接都改一遍

  1. bash sbin/start-dfs.sh报
Starting namenodes on [localhost]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

配置环境变量

$ vim ~/.zshrc
export HDFS_NAMENODE_USER="root"
export HDFS_DATANODE_USER="root"
export HDFS_SECONDARYNAMENODE_USER="root"
export YARN_RESOURCEMANAGER_USER="root"
export YARN_NODEMANAGER_USER="root"
$ source ~/.zshrc
  1. localhost: Error: JAVA_HOME is not set.
$ vim etc/hadoop/hadoop-env.sh
export JAVA_HOME=/etc/local/java/xxx ## 绝对路径
  1. command not found
$ vim ~/.zshrc
PATH=$PATH:/usr/local/hadoop/sbin
$ source ~/.zshrc
  1. Incorrect configuration: namenode address dfs.namenode.rpc-address is not configured
$ export HADOOP_CONF_DIR = $HADOOP_HOME/etc/hadoop
$ echo $HADOOP_CONF_DIR
$ hdfs namenode -format
$ hdfs getconf -namenodes
$ etc/hadoop/start-all.sh
  1. adoop Mapreduce Error Input path does not exist: hdfs://localhost:9000/user/log/input"

hdfs系统和外部文件系统不同步,需要手动把文件传进去, hdfs有一套类似于外部文件系统的fs命令

$ hadoop fs -mkdir -p /user/log/input
$ hadoop fs -put <datafile>  /user/log/input

文件也可以在http://ip:50070中查看

image
  1. hadoop fs 命令
$ hadoop fs -ls  /
$ hadoop fs -put < local file > < hdfs file >
$ hadoop fs -moveFromLocal  < local src > ... < hdfs dst >
$ hadoop fs -copyFromLocal  < local src > ... < hdfs dst >
$ hadoop fs -get < hdfs file > < local file or dir>

性能对比

单机版

    Reduce input groups=1
        Reduce shuffle bytes=14
        Reduce input records=1
        Reduce output records=1
        Spilled Records=2
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=33
        Total committed heap usage (bytes)=291282944
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=2977
    File Output Format Counters
        Bytes Written=18
spend:21559ms

伪分布-1节点,block.size=10M

        Map input records=180
        Map output records=180
        Map output bytes=1080
        Map output materialized bytes=14
        Input split bytes=106
        Combine input records=180
        Combine output records=1
        Reduce input groups=1
        Reduce shuffle bytes=14
        Reduce input records=1
        Reduce output records=1
        Spilled Records=2
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=31
        Total committed heap usage (bytes)=287883264
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=2941
    File Output Format Counters
        Bytes Written=6
spend:23277ms

伪分布-10节点,block.size=20M

ted successfully
18/10/07 22:51:57 INFO mapreduce.Job: Counters: 35
    File System Counters
        FILE: Number of bytes read=683924
        FILE: Number of bytes written=8139284
        FILE: Number of read operations=0
        FILE: Number of large read operations=0
        FILE: Number of write operations=0
        HDFS: Number of bytes read=281872252
        HDFS: Number of bytes written=181666
        HDFS: Number of read operations=181
        HDFS: Number of large read operations=0
        HDFS: Number of write operations=88
    Map-Reduce Framework
        Map input records=180
        Map output records=180
        Map output bytes=1080
        Map output materialized bytes=14
        Input split bytes=106
        Combine input records=180
        Combine output records=1
        Reduce input groups=1
        Reduce shuffle bytes=14
        Reduce input records=1
        Reduce output records=1
        Spilled Records=2
        Shuffled Maps =1
        Failed Shuffles=0
        Merged Map outputs=1
        GC time elapsed (ms)=39
        Total committed heap usage (bytes)=287825920
    Shuffle Errors
        BAD_ID=0
        CONNECTION=0
        IO_ERROR=0
        WRONG_LENGTH=0
        WRONG_MAP=0
        WRONG_REDUCE=0
    File Input Format Counters
        Bytes Read=2941
    File Output Format Counters
        Bytes Written=6
spend:24229ms

总的来说因为在一台机子上, 伪分布性能并没有提升

但跑起来 我那台破服务器 内存就跌零了 恐怖😱

image
image

不充钱怎么变得强大

参考

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

推荐阅读更多精彩内容