02hadoop伪分布式搭建

3. 环境安装

3.1 安装方式

  • 单机模式

    只能启动MapReduce

  • 伪分布式

    能启动HDFS、MapReduce 和 YARN的大部分功能

  • 完全分布式

    能启动Hadoop的所有功能

3.2 安装JDK

3.2.1 JDK安装步骤

下载JDK安装包(下载Linux系统的 .tar.gz 的安装包)

https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html

sh 复制代码
[root@vm ~]# tar -xf jdk-8u251-linux-x64.tar.gz -C /usr/local/
[root@vm ~]# cd /usr/local/
[root@vm local]# mv jdk1.8.0_251/ jdk8
[root@vm local]# cd
[root@vm ~]# vim .bashrc
...
export JAVA_HOME=/usr/local/jdk8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=.:$JAVA_HOME/bin:$PATH

[root@vm ~]# source .bashrc
[root@vm ~]# java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)

3.3 安装Hadoop并配置伪分布式

3.3.1 Hadoop安装配置步骤
  1. 配置免登录认证,避免使用Hadoop时的权限问题

    sh 复制代码
    [root@vm ~]# ssh-keygen -t rsa
    [root@vm ~]# cd ~/.ssh;cat id_rsa.pub >> authorized_keys
    [root@vm .ssh]# ssh localhost
    [root@vm ~]# exit

    下载Hadoop 2.10(374M)

    https://archive.apache.org/dist/hadoop/common/hadoop-2.10.0/hadoop-2.10.0.tar.gz

  2. 解压到 /usr/local 目录中,并将文件夹重命名为 hadoop,

    sh 复制代码
    [root@vm ~]# tar xf hadoop-2.10.0.tar.gz -C /usr/local/
    [root@vm ~]# cd /usr/local
    [root@vm local]# mv hadoop-2.10.0/ hadoop2.10
    #非root用户可能需要执行 chown -R user:user  hadoop2.10
    [root@vm local]# cd /usr/local/hadoop2.10/bin
    [root@vm bin]# ./hadoop version
    Hadoop 2.10.0
    Subversion ssh://git.corp.linkedin.com:29418/hadoop/hadoop.git -r e2f1f118e465e787d8567dfa6e2f3b72a0eb9194
    Compiled by jhung on 2019-10-22T19:10Z
    Compiled with protoc 2.5.0
    From source with checksum 7b2d8877c5ce8c9a2cca5c7e81aa4026
    This command was run using /usr/local/hadoop2.10/share/hadoop/common/hadoop-common-2.10.0.jar
  3. 设置JAVE_HOME环境变量

    sh 复制代码
    [root@vm bin]# vim  /usr/local/hadoop2.10/etc/hadoop/hadoop-env.sh
    export JAVA_HOME=/usr/local/jdk8 #修改前JAVA_HOME=${JAVA_HOME}
  4. 设置Hadoop环境变量

    sh 复制代码
    [root@vm bin]# cd
    [root@vm ~]# vim .bashrc
    #在末尾追加
    export HADOOP_HOME=/usr/local/hadoop2.10
    export CLASSPATH=.:{JAVA_HOME}/lib:${HADOOP_HOME}/sbin:$PATH
    export PATH=.:${HADOOP_HOME}/bin:${HADOOP_HOME}/sbin:$PATH
    
    [root@vm ~]# source .bashrc
  5. 伪分布式配置,修改2个配置文件(core-site.xml 和 hdfs-site.xml)

    补充如下内容

    html 复制代码
    [root@vm ~]# vim /usr/local/hadoop2.10/etc/hadoop/core-site.xml
    <configuration>
        <property>
            <!--数据目录配置参数-->
            <name>hadoop.tmp.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp</value>
        </property>
        <property>
            <!--文件系统配置参数-->
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
    html 复制代码
    [root@vm ~]# vim /usr/local/hadoop2.10/etc/hadoop/hdfs-site.xml
    <configuration>
        <property>
            <!--副本数量-->
            <name>dfs.replication</name>
            <value>1</value>
        </property>
        <property>
            <!--namenode数据目录-->
            <name>dfs.namenode.name.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp/dfs/name</value>
        </property>
        <property>
            <!--datanode数据目录-->
            <name>dfs.datanode.data.dir</name>
            <value>file:/usr/local/hadoop2.10/tmp/dfs/data</value>
        </property>
    </configuration>
    
    
    #/usr/local/hadoop2.10/tmp/dfs/name/current/VERSION记录clusterid,与 /usr/local/hadoop2.10/tmp/dfs/data/current/VERSION记录clusterid 必须是相同的,否则启动失败
  6. 配置YARN,修改mapred-site.xml、yarn-site.xml

    补充如下配置

    html 复制代码
    [root@vm ~]# cd /usr/local/hadoop2.10/etc/hadoop
    [root@vm hadoop]# cp mapred-site.xml.template mapred-site.xml
    [root@vm hadoop]# vim mapred-site.xml
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
    html 复制代码
    [root@vm hadoop]# vim yarn-site.xml
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value> #计算方式
        </property>
  7. 执行NameNode格式化

    sh 复制代码
    [root@vm hadoop]# cd /usr/local/hadoop2.10/bin
    [root@vm bin]# ./hdfs namenode -format
    
    出现 Storage directory /usr/local/hadoop2.10/tmp/dfs/name has been successfully formatted 则表示格式化成功
  8. 启动Hadoop所有组件

    sh 复制代码
    [root@vm bin]# cd /usr/local/hadoop2.10/sbin
    [root@vm sbin]# ./start-all.sh
    启动时可能会出现警告,直接忽略即可,不影响正常使用
    [root@vm sbin]# jps #查看Hadoop相关组件进程
    14513 DataNode
    14882 NodeManager
    14643 SecondaryNameNode
    14789 ResourceManager
    14425 NameNode
    14921 Jps

启动成功后,可访问Web页面查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件 http://localhost:50070

  1. 测试 - 将本地文件上传至hdfs

    sh 复制代码
    [root@vm ~]# hadoop fs -put jdk-8u251-linux-x64.tar.gz /
    [root@vm ~]# hadoop fs -ls /
    Found 1 items
    -rw-r--r--   1 root supergroup  195132576 2024-03-10  /jdk-8u251-linux-x64.tar.gz
    #也可以在浏览器中Utilities->Browse the file system查看,及上传下载删除操作

4. HDFS Shell操作

sh 复制代码
hadoop fs -ls / 	#查看HDFS系统目录
hadoop fs -mkdir -p 绝对路径		#创建文件夹
hadoop fs -put    本地文件     HDFS目录		#上传文件
hadoop fs  -get   HDFS文件    本地目录		#下载文件
hadoop fs -rm -r 目录		#删除文件或目录
haddop fs -text 文件绝对路径		#查看文件内容
hadoop fs -mv 源文件 目标目录
hadoop fs -cp 源文件  目标目录

5. MapReduce详解

5.1 MapReduce概述

5.1.1 MapReduce定义
  1. MapReduce是Hadoop提供的一套进行分布式计算的框架,用于大规模数据集(大于1TB)的并行运算
  2. MapReduce将计算过程拆分为2个阶段:Map(映射)阶段和Reduce(规约)阶段
5.1.2 MapReduce编程模型
  • MapReduce分而治之思想

    【示例1】
        需要在一堆扑克牌(张数未知)中统计四种花色的牌有多少张
        思路:需要找几个人(比如说四个人),每人给一堆,数出来四种花色的张数,然后汇总
        
    【示例2】
        一堆钞票,请查找出各种面值的钞票分别有多少张?
        思路:每个人分一部分钞票,数出各种面值的分别有多少张,然后再汇总
    
  • 统计文件中每个单词出现的次数原理图

5.2 MapReduce编程实现

5.2.1 相关库安装
sudo pip3 install mrjob
5.2.2 Python实现wordcount案例(了解)
  1. 新建words.txt,并写入如下内容

    sh 复制代码
    hello world
    hello tarena
    I am world and tarena
    I love tarena world
  2. python代码实现wordcount

    python 复制代码
    from mrjob.job import MRJob
    
    class WordCount(MRJob):
    #重写mapper   reducer  方法 完成自己的需求, hive可以实现sql转方法的实现
    
        def mapper(self, _, line):
        #def mapper(self, key, line):
            # _: key,每行行首的偏移量,一般不使用,这里写成_
            # line: 每行的内容
            
            #重写功能
            for word in line.split():
                yield word, 1
    
        # shuffle 和 sort 过程不用关注,hadoop自动去做,看不到
        # hi 1 1
        # hello 1 1 1 1
        # world 1
    
        def reducer(self, key, values):
            # key: map shuffle和sort之后的单词
            # values: 每个单词出现次数的序列
            yield key, sum(values)
    
    if __name__ == '__main__':
        WordCount.run()
  3. 运行MapReduce程序的两种方式

    sh 复制代码
    [1]本地模式(一次启动多个进程)
        python3 wordCount.py -r local word.txt #本地运行-r local,不会排序
        
    [2]Hadoop模式 (比较消耗内存)
        python3 wordCount.py -r hadoop word.txt	#会排序
        
    "I"     2
    "am"    1
    "and"   1
    "hello" 2
    "love"  1
    "tarena"        3
    "world" 3
    sh 复制代码
    [1]本地模式(一次启动多个进程)
        python3 wordCount.py -r local word.txt #本地运行-r local,不会排序
        
    [2]Hadoop模式 (比较消耗内存)
        python3 wordCount.py -r hadoop word.txt	#会排序
        
    "I"     2
    "am"    1
    "and"   1
    "hello" 2
    "love"  1
    "tarena"        3
    "world" 3
相关推荐
活跃的煤矿打工人15 分钟前
【星海saul随笔】Ubuntu基础知识
linux·运维·ubuntu
北京智和信通1 小时前
云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力
运维·虚拟化·云平台·虚拟机监控
fasewer1 小时前
第五章 linux实战-挖矿 二
linux·运维·服务器
楚灵魈1 小时前
[Linux]从零开始的网站搭建教程
linux·运维·服务器
小小不董1 小时前
《Linux从小白到高手》理论篇:深入理解Linux的网络管理
linux·运维·服务器·数据库·php·dba
DY009J2 小时前
深度探索Kali Linux的精髓与实践应用
linux·运维·服务器
什么鬼昵称3 小时前
Pikachu- Over Permission-垂直越权
运维·服务器
码农小白3 小时前
linux驱动:(22)中断节点和中断函数
linux·运维·服务器
4647的码农历程3 小时前
Linux网络编程 -- 网络基础
linux·运维·网络
醉颜凉4 小时前
银河麒麟桌面操作系统V10 SP1:取消安装应用的安全授权认证
运维·安全·操作系统·国产化·麒麟·kylin os·安全授权认证