• ubuntu20单主机安装hadoop,python的简单操作


    简单介绍

    • Hadoop是Apache基金会开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    • Hadoop框架最核心技术包括:Common、HDFS、MapReduce和YARN。HDFS为海量的数据提供了分布式存储,MapReduce为海量的数据提供分布式计算,YARN为海量的数据提供分布式资源调度框架。

    common(工具类):包括Hadoop常用的工具类,由原来的Hadoopcore部分更名而来。主要包括系统配置工具Configuration、远程过程调用RPC、序列化机制和Hadoop抽象文件系统FileSystem等。它们为在通用硬件上搭建云计算环境提供基本的服务,并为运行在该平台上的软件开发提供了所需的API。
    Hadoop Distributed File System(HDFS):Hadoop实现了一个分布式的文件系统,HDFS为海量的数据提供了存储。HDFS是基于节点的形式进行构建的,里面有一个父节点NameNode,他在机器内部提供了服务,NameNode本身不干活,NameNode将数据分成块,只是把数据分发给子节点,交由子节点来进行存储,由于只存在一个父节点,所以这是HDFS的一个缺点,单点失败。以及n个子节点dataNode,dataNode在机器内部提供了数据块,存储在HDFS的数据被分成块,然后将这些块分到多个计算机(dataNode)中,这与传统的RAID架构大有不同。块的大小(通常为64MB)和复制的块数量在创建文件时由客户机决定。NameNode可以控制所有文件操作。
    MapReduce:基于YARN的大型数据集并行处理系统。是一种计算模型,用以进行大数据量的计算。Hadoop的MapReduce实现,和Common、HDFS一起,构成了Hadoop发展初期的三个组件。MapReduce将应用划分为Map和Reduce两个步骤,其中Map对数据集上的独立元素进行指定的操作,生成键-值对形式中间结果。Reduce则对中间结果中相同“键”的所有“值”进行规约,以得到最终结果。MapReduce这样的功能划分,非常适合在大量计算机组成的分布式并行环境里进行数据处理。
    YARN:分布式集群资源管理框架,管理者集群的资源(Memory,cpu core)
    合理调度分配给各个程序(MapReduce)使用
    主节点:resourceManager 掌管集群中的资源
    从节点:nodeManager 管理每台集群资源
    在这里插入图片描述

    一、安装hadoop

    1,安装Java,我的ununtu系统没有自带

    qing@qing-Inspiron-3437:/lib$ java
    
    Command 'java' not found, but can be installed with:
    
    sudo apt install default-jre              # version 2:1.11-72, or
    sudo apt install openjdk-11-jre-headless  # version 11.0.15+10-0ubuntu0.20.04.1
    sudo apt install openjdk-16-jre-headless  # version 16.0.1+9-1~20.04
    sudo apt install openjdk-17-jre-headless  # version 17.0.3+7-0ubuntu0.20.04.1
    sudo apt install openjdk-8-jre-headless   # version 8u312-b07-0ubuntu1~20.04
    sudo apt install openjdk-13-jre-headless  # version 13.0.7+5-0ubuntu1~20.04
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    使用如下命令安装
    sudo apt install openjdk-11-jre-headless
    验证安装
    java -version

    2,增加hadoop用户

    sudo useradd -m hadoop -s /bin/bash
    sudo passwd hadoop
    sudo adduser hadoop sudo
    
    • 1
    • 2
    • 3

    切换为hadoop用户
    su hadoop

    3,安装SSH和配置SSH无密码登录

    sudo apt-get install openssh-server
    
    
    • 1
    • 2

    安装后,可使用以下命令登录本机:
    ssh localhost
    输入 yes 与用户密码,就可以登录到本机,详细输出如下:
    退出登录
    exit
    配置无密码登录

    cd ~/.ssh/
    ssh-keygen -t rsa
    
    
    • 1
    • 2
    • 3

    注意这里第二步要你输入文件名时不用输入,直接一路 Enter 选择默认值就好了!
    cat ./id_rsa.pub >> ./authorized_keys

    4,安装hadoop

    到官网下载 https://hadoop.apache.org/,下载速度慢的话,搜索清华镜像
    找到下载的文件,打开终端,解压和重命名

     sudo tar -zxf hadoop-3.3.3.tar.gz -C /usr/local
     sudo mv hadoop-3.3.3/ hadoop
    
    • 1
    • 2

    给与这个文件夹权限

    cd /usr/local
    sudo chown -R hadoop ./hadoop/
    
    • 1
    • 2

    5,配置hadoop

    首先运行命令查看Java的路径:

    $ update-alternatives --config java
    链接组 java (提供 /usr/bin/java)中只有一个候选项:/usr/lib/jvm/java-11-openjdk-amd64/bin/java
    无需配置。
    
    • 1
    • 2
    • 3
    $vim ~/.bashrc
    #
    export JAVA_HOME=/lib/jvm/java-1.11.0-openjdk-amd64
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    export HADOOP_INSTALL=/usr/local/hadoop
    export PATH=$PATH:$HADOOP_INSTALL/bin
    export PATH=$PATH:$HADOOP_INSTALL/sbin
    export HADOOP_MAPRED_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_HOME=$HADOOP_INSTALL
    export HADOOP_HDFS_HOME=$HADOOP_INSTALL
    export YARN_HOME=$HADOOP_INSTALL
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INSTALL/lib/native
    export HADOOP_OPTS="-Djava.library.path=$HADOOP_INSTALL/lib/native"
    #HADOOP VARIABLES END
    $ source ~/.bashrc
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    修改hadoop-env.sh文件
    文件的路径为:/usr/local/hadoop/etc/hadoop/hadoop-env.sh,找到对应的行,将内容改为:

    export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64

    修改core-site.xml文件
    在修改这个文件之前,我们需要使用超级用户创建一个目录,并给予hduser该目录的权限:

    $ sudo mkdir -p /app/hadoop/tmp
    $ sudo chown hadoop:hadoop /app/hadoop/tmp
    
    • 1
    • 2

    修改配置文件,文件路径:/usr/local/hadoop/etc/hadoop/core-site.xml,使用VIM,将配置改为:

    
    
      hadoop.tmp.dir
      /app/hadoop/tmp
      A base for other temporary directories.
    
    
    
      fs.default.name
      hdfs://localhost:54310
      The name of the default file system.  A URI whose
      scheme and authority determine the FileSystem implementation.  The
      uri's scheme determines the config property (fs.SCHEME.impl) naming
      the FileSystem implementation class.  The uri's authority is used to
      determine the host, port, etc. for a filesystem.
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    修改mapred-site.xml

    使用VIM打开,修改配置如下:

    
    
      mapred.job.tracker
      localhost:54311
      The host and port that the MapReduce job tracker runs
      at.  If "local", then jobs are run in-process as a single map
      and reduce task.
      
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    修改hdfs-site.xml文件
    在修改之前,创建需要用到的目录:

    $ sudo mkdir -p /usr/local/hadoop_store/hdfs/namenode
    $ sudo mkdir -p /usr/local/hadoop_store/hdfs/datanode
    $ sudo chown -R hadoop:hadoop /usr/local/hadoop_store
    
    • 1
    • 2
    • 3

    修改配置文件:/usr/local/hadoop/etc/hadoop/hdfs-site.xml,改为:

    
    
      dfs.replication
      1
      Default block replication.
      The actual number of replications can be specified when the file is created.
      The default is used if replication is not specified in create time.
      
    
    
       dfs.namenode.name.dir
       file:/usr/local/hadoop_store/hdfs/namenode
    
    
       dfs.datanode.data.dir
       file:/usr/local/hadoop_store/hdfs/datanode
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    6.格式化HDFS

    $ hadoop namenode –format

    如果发现hadoop这个命令不认识,那是因为环境变量没有载入,最简单办法就是登出,然后再登入hduser就可以了。这个命令会删掉所有已经存在的数据,所以如果已经有数据的情况下,慎用这个命令。

    7.启动Hadoop

    首先启用无密码的ssh。不然接下来启动的时候会不断的提示输入密码,很烦人。

    ssh-keygen -t rsa

    默认位置,无密码生成密钥。

    chmod 755 ~/.ssh
    
    cd ~/.ssh
    
    cat id_rsa.pub >> authorized_keys
    
    • 1
    • 2
    • 3
    • 4
    • 5

    接下来我们试一下使用ssh连接本地,看能连接成功不:

    ssh localhost

    接下来是启动Hadoop的服务。

    hadoop@qing-Inspiron-3437:~/.ssh$ start-all.sh
    WARNING: Attempting to start all Apache Hadoop daemons as hadoop in 10 seconds.
    WARNING: This is not a recommended production deployment configuration.
    WARNING: Use CTRL-C to abort.
    Starting namenodes on [localhost]
    Starting datanodes
    Starting secondary namenodes [qing-Inspiron-3437]
    Starting resourcemanager
    resourcemanager is running as process 10368.  Stop it first and ensure /tmp/hadoop-hadoop-resourcemanager.pid file is empty before retry.
    Starting nodemanagers
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    8.关闭Hadoop
    运行命令:

    $ stop-all.sh

    可以登录http://localhost:9870,来查看hadoop是否已经在运行。

    二、常用命令

    创建文件夹,列出文件

    hadoop@qing-Inspiron-3437:~$ hdfs dfs -mkdir /zqh
    hadoop@qing-Inspiron-3437:~$ hdfs dfs -ls /
    
    
    • 1
    • 2
    • 3

    上传,查看,下载文件

    hdfs dfs -put doc_word.doc /zqh
    hdfs dfs -cat /zqh/doc_word.doc
    hdfs dfs -get /zqh/doc_word.doc ./
    
    • 1
    • 2
    • 3

    python操作

    # pip install hdfs
    from hdfs import Client
    
    client = Client('http://localhost:9870', root='/')
    print(client.list('/'))
    print(client.list('/zqh'))
    """
    如果遇到以下错误
    hdfs.util.HdfsError: Permission denied: user=dr.who, access=WRITE, inode="/":hadoop:supergroup:drwxr-xr-x
    修改配置文件
    vim /usr/local/hadoop/etc/hadoop/hdfs-site.xml
    增加
    
        dfs.permissions.enabled
        false
    
    重启hadoop
    """
    client.makedirs('/test')
    with client.read('zqh/doc_word.doc') as f_hdf:
        print(f_hdf.read())
    
    # 上传和下载文件
    client.upload('hdfs_folder', 'local_file')
    client.download('hdfs_file', 'local_folder')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
  • 相关阅读:
    会计科目分类
    SpringBoot整合Mybatis方式1:使用XML方式整合Mybatis
    各种语言如何连接到 OceanBase
    深入理解JavaScript——执行上下文与调用栈
    项目实战:Qt监测操作系统物理网卡通断v1.1.0(支持windows、linux、国产麒麟系统)
    六月集训(29)分治
    电脑重装系统后安全中心有个黄色感叹号如何处理
    GNU gold链接器 - target.cc 实现特定目标架构的支持
    【Postman&JMeter】使用Postman和JMeter进行signature签名
    用C语言实现ping命令
  • 原文地址:https://blog.csdn.net/qq_22808061/article/details/126392497