ubuntu下Hadoop以及Spark的伪分布式安装:二

6 安装hadoop(报错解决方法见6.3):

6.1 单节点安装步骤

6.1.1 修改/etc/hostname

hadoop01

6.1.2 修改主机名解析文件/etc/hosts

比如:

192.168.0.1      hadoop01

6.1.3 建立hadoop用户,并给出默认shell

sudo useradd -m hadoop -s /bin/bash

6.1.4 修改hadoop密码:

sudo passwd hadoop

6.1.5 增加hadoop用户的管理员权限

sudo adduser hadoop sudo

6.1.6 下载hadoop

wget https://downloads.apache.org/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz

#如果wget下载速度慢,可以使用mget

如果没有mget,使用snap install mget

6.1.7 安装hadoop

sudo tar -zxf ~/Downloads/hadoop-3.3.6.tar.gz -C /usr/local    # 解压到/usr/local中

cd /usr/local/

sudo mv ./hadoop-3.3.6/ ./hadoop            # 将文件夹名改为hadoop

sudo chown -R hadoop ./hadoop       # 修改文件权限

6.1.8 添加hadoop环境变量

修改.bashrc,

vim .bashrc

在.bashrc文件后面添加内容

export HADOOP_HOME=/usr/local/hadoop

export PATH=$PATH:$HADOOP_HOME/bin

export PATH=$PATH:$HADOOP_HOME/sbin

6.1.9 修改/usr/local/hadoop/etc/hadoop下的hadoop-env.sh与yarn-env.sh文件

在最后添加

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

其实,如果已经设置过,则无需再次设置

6.1.10 测试单机模式

cd /usr/local/hadoop

hadoop fs -mkdir -p ./wordcount/input 或者 mkdir ./wordcount/input

hadoop fs -mkdir -p ./wordcount/output 或者 mkdir ./wordcount/output

sudo cp ./etc/hadoop/*.xml ./wordcount/input   # 将配置文件作为输入文件

sudo ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount ./wordcount/input ./wordcount/output/1

sudo cat ./wordcount/output/1/*

6.2 Hadoop伪分布式安装

Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。

注:Hadoop 的配置文件位于/usr/local/hadoop/etc/hadoop/中,伪分布式需要修改2个配置文件core-site.xml 和 hdfs-site.xml。

6.2.1 修改配置文件 core-site.xml,在<configuration></configuration>中添加如下内容

<configuration>

    <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>

    </property>

    <property>

        <name>hadoop.http.staticuser.user</name> #解决web端无法删除上传文件

        <value>hadoop</value>

    </property>

</configuration>

注:上面的localhost可以改成具体的ip地址

6.2.2 修改配置文件hdfs-site.xml,如上所示

<configuration>

    <property>

        <name>dfs.replication</name>

        <value>1</value>

    </property>

    <property>

        <name>dfs.namenode.name.dir</name>

        <value>file:/usr/local/hadoop/tmp/dfs/name</value>

    </property>

    <property>

        <name>dfs.datanode.data.dir</name>

        <value>file:/usr/local/hadoop/tmp/dfs/data</value>

    </property>

</configuration>

注.Hadoop配置文件说明:

Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。

按照官方教材:伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行,不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为/tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。

6.2.3 配置完成后,执行 NameNode 的格式化,如上xml设置一样自动创建tmp目录等:

cd /usr/local/hadoop

./bin/hdfs namenode -format

6.2.4 开启 NameNode 和 DataNode 守护进程

cd /usr/local/hadoop

./sbin/start-dfs.sh

6.3 报错问题及解决

6.3.1 hadoop可能报错如下:

#there is no HDFS_NAMEnODE_USER defined等错误

#则需要在start-dfs.sh和stop-dfs.sh文件中添加如下几行

#!/usr/bin/env bash      #在此行后粘贴入下面4行即可

HDFS_DATANODE_USER=root

HDFS_DATANODE_SECURE_USER=hdfs

HDFS_NAMENODE_USER=root

HDFS_SECONDARYNAMENODE_USER=root

6.3.2 如果再次运行任然报错如下:

./sbin/start-dfs.sh

Starting namenodes on [localhost]

localhost: root@localhost: Permission denied (publickey,password).

Starting datanodes

localhost: root@localhost: Permission denied (publickey,password).

Starting secondary namenodes [hadoop01]

hadoop01: root@hadoop01: Permission denied (publickey,password).

#此问题是因为没有设置ssh登录免密导致,按照如下设置

注:因为在ubuntu中,默认是不允许root登录的

首先修改sshd_config文件

将PermitRootLogin prohibie-password 修改为:PermitRootLogin yes

将PasswordAuthentication 后修改为yes

免密登录ssh,详见第5节

然后再修改sshd_config文件,见上

运行jps,查看是否运行成功

root@hadoop01:/usr/local/hadoop# jps

10803 Jps

10423 DataNode

10268 NameNode

10639 SecondaryNameNode

可通过web访问

http://localhost:9870/dfshealth.html#tab-overview

6.3.3 运行start-dfs.sh或者start-all.sh后,找不到DataNode进程的问题

问题分析:

在启动Hadoop之前,进行了多次格式化,导致DataNode的ID发生了变化。

问题解决:

删除tmp目录下所有的文件及文件夹,然后重新格式化

hadoop namenode -format 和 hdfs namenode -format

上面第一条命令支持普通模式和hdfs模式,第二条命令只支持hdfs模式,会互相覆盖VERSION文件的namespaceID值

所以只需要做一次即可。切记切记

6.4 运行伪分布式Hadoop实例:

6.4.1 说明

hdfs有三种shell命令方式:

hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统

hadoop dfs只能适用于HDFS文件系统

hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

6.4.2 命令提示

hdfs dfs -mkdir -p /user/root #为root用户创建一个hdfs根文件夹

hdfs dfs -mkdir input    #创建一个hdfs的输入文件夹,这是使用的相对目录,等于在root下建立input目录

hdfs dfs -put ./etc/hadoop/*.xml input #将多个xml文件复制到input

hdfs dfs -ls input    #查看这些文件

#下面这条指令是在这些xml文件中查找有多少以dfs开头的记录

./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+'

#查看结果

./bin/hdfs dfs -cat output/*

1   dfsadmin

1   dfs.replication

1   dfs.namenode.name.dir

1   dfs.datanode.data.dir

6.4.3 将结果复制到普通文件夹

hdfs dfs -get output ./output #将output中的结果复制到普通的本地output文件夹中,output是刚生成的

注:

output一旦生成,不会被删除,所有再次计算的时候需要先删除output目录

hdfs dfs -rm -r output

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值