HDFS安装配置

大数据作为目前最主要的业务领域之一,对数据中心硬件的软件生态发展有着重要意义,因此也吸引了众多开发者的重点关注。Hadoop作为开源大数据领域的最核心项目,也成为了各公司重点投入的方向。经过半年的开发和推动,

本文将记录实际安装步骤以及过程中发现的问题,安装完成后将运行几个常见的任务,验证功能性。

hadoop 中,基于 Linux 命令可以给 hdfs 创建文件和文件夹,或者删除文件和文件夹

创建文件的命令为:

hadoop fs -touch /file.txt

创建文件夹的命令为:

hadoop fs -mkdir /filename

删除文件的命令为:

hadoop fs -rm -r /file.txt

删除文件夹的命令为:

hadoop fs -rm -r /filename

1. 下载

Hadoop 3.3.0版本发布后,在项目的下载页面(https://hadoop.apache.org/releases.html)增加了相应的连接,用户可以非常方便的进行下载:

我们的机器为ARM架构的鲲鹏920 CPU,因此下载binary-aarch64软件包:

P.S. util-linux需要升级到最新版本才lscpu功能才能够正常解析CPU具体信息,否则以编码形式呈现

下载:

解压:

tar -xzvf hadoop-3.3.0-aarch64.tar.gz

cd hadoop-3.3.0/

2. 配置Hadoop Core和HDFS

Hadoop支持多种部署方式,我们这里使用伪分布式(Pseudo-Distributed)模式进行部署,以便完整的验证HDFS、YARN、Mapreduce三个部分的功能。

首先修改Hadoop-core和HDFS的配置文件:

etc/hadoop/core-site.xml:
    <configuration>
        <property>
            <name>fs.defaultFS</name>
            <value>hdfs://localhost:9000</value>
        </property>
    </configuration>
etc/hadoop/hdfs-site.xml:
    <configuration>
        <property>
            <name>dfs.replication</name>
            <value>1</value>
        </property>
    </configuration>

虽然是伪集群式部署模式,各组件间的交互仍然是会使用SSH调用的,为了能够正常相互访问,需要配置本机自己的免密SSH访问:

      ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
      cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      chmod 0600 ~/.ssh/authorized_keys

通过下面命令检查是否配置成功:

ssh localhost

首先导入JAVA_HOME环境变量,具体路径需要根据自己系统的实际情况进行配置,同时通过Hadoop自带脚本启动Hadoop服务时要将环境变量导入到相应的脚本中:

    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64/
    echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-arm64/" >> etc/hadoop/hadoop-env.sh

初始化文件系统:

 bin/hdfs namenode -format

启动Namenode和Datanode服务:

 sbin/start-dfs.sh

在HDFS中创建文件目录:

    bin/hdfs dfs -mkdir /user
    bin/hdfs dfs -mkdir /user/<username>

2.配置YARN

经过上面的配置,以及能够在本地运行MapReduce任务了,为了完整的验证功能,我们还需要配置YARN。

首先,对下面的这些文件进行配置:

etc/hadoop/mapred-site.xml:
    <configuration>
        <property>
            <name>mapreduce.framework.name</name>
            <value>yarn</value>
        </property>
        <property>
            <name>mapreduce.application.classpath</name>
            <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
        </property>
    </configuration>
 etc/hadoop/yarn-site.xml:
    <configuration>
        <property>
            <name>yarn.nodemanager.aux-services</name>
            <value>mapreduce_shuffle</value>
        </property>
        <property>
            <name>yarn.nodemanager.env-whitelist</name>
            <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
        </property>
    </configuration>

启动ResourceManager和NodeManager守护进程:

sbin/start-yarn.sh

至此,整个安装配置就完成了,可以从 http://localhost:9870/http://localhost:8088/ 查看HDFS和YARN的管理界面。

3.测试

接下来我们进行一些简单的测试,验证一下Hadoop在ARM架构上的基本功能是否能够正常使用:

1)Wordcount

wordcount是大数据领域的Hello World,运行一个统计文件中单词出现次数的程序,可以用来验证Hadoop集群的基本功能。

首先,在HDFS中创建input命令:

​bin/hadoop fs -mkdir /input

可以通过 bin/hadoop fs -ls / 检查上面命令的结果:

统计单词出现的频率需要一个文档作为输入,本目录下的LICENSE.txt就是一个很适合作为输入的文本文件,我们将它上传到HDFS系统中:

bin/hadoop fs -put LICENSE.txt /input

可以通过 bin/hadoop fs -ls /input 检查上面命令的结果:

接下来使用Hadoop自带的wordcount示例程序来计算其中单词的出现频率:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar wordcount /input /output

具体结果如下:

...

通过 bin/hadoop fs -ls / 命令可以看到,HDFS系统中多了 /output 和 /tmp 目录

打开/output命令可以看到有两个文件

打开part-r-00000查看结果:

可以看到,wordcount成功运行了。

2)TeraSort

TeraSort是Hadoop中的的一个排序作业,经常被用来进行性能比拼等测试。TeraSort源码包含很多个java文件,其中可以分为三个部分:TeraGen, TeraSort和TeraValidate。 TeraGen负责生成排序所需的随机数据,TeraSort负责进行排序作业,TeraValidate用来验证排序结果。下面我们就在我们的集群上进行TeraSort测试。

首先,我们用TeraGen生成5GB的测试数据作为输入,由于TeraSort内部以行为单位进行数据生成,每一行的大小为100B,因此需要提前计算好所需要的行数,然后使用Hadoop自带的TeraGen生成相应的测试数据:

rows=$((5*1024*1024*1024/100))

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar teragen -Dmapred.map.tasks=100 ${rows} terasort/tera1-input

通过 bin/hadoop fs -ls /user/kevin/terasort 命令查看结果

接下来对测试数据进行排序:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar terasort -Dmapred.reduce.tasks=50 terasort/tera1-input terasort/tera1-output

通过 bin/hadoop fs -ls /user/kevin/terasort/tera1-output 命令查看结果

最后,通过TeraValidate来来检验排序输出结果是否是有序的:

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.0.jar teravalidate terasort/tera1-output terasort/tera1-validate

4.总结

Hadoop 3.3.0版本提供了ARM版本的软件包,用户从项目官网上下载后只需要经过简单的配置,就可以完成部署,运行Wordcount,TeraSort等实例程序没有出现问题。后续会继续进行更复杂的业务测试以及性能测试。

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes

错误描述:

解决方法:

方法一:

方法二、(推荐)

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation. Starting datanodes

在这里插入图片描述

错误描述:

Starting namenodes on [localhost]

ERROR: Attempting to operate on hdfs namenode as root

ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.

Starting datanodes

ERROR: Attempting to operate on hdfs datanode as root

ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.

Starting secondary namenodes [localhost]

ERROR: Attempting to operate on hdfs secondarynamenode as root

ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.

2021-01-13 22:30:38,582 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Starting resourcemanager

ERROR: Attempting to operate on yarn resourcemanager as root

ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.

Starting nodemanagers

ERROR: Attempting to operate on yarn nodemanager as root

ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation.

解决方法:

方法一:

在Hadoop安装目录下找到sbin文件夹

在里面修改四个文件

1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数:

#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

1

2

3

4

5

在这里插入图片描述

2、对于start-yarn.sh和stop-yarn.sh文件,添加下列参数:

#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root

1

2

3

4

WARNING: HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER. Using value of HADOOP

修改配置文档即可:

vim /usr/local/hadoop-3.3.0/sbin/start-dfs.sh
(stop-dfs.sh)
vim /usr/local/hadoop-3.3.0/sbin/start-yarn.sh
(stop-yarn.sh)
    HDFS_DATANODE_USER=root
    HDFS_DATANODE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root

重新开始start…就可以。

方法二、(推荐)

The root cause of this problem,

hadoop install for different user and you start yarn service for different user. OR

in hadoop config's hadoop-env.sh specified HDFS_NAMENODE_USER and HDFS_DATANODE_USER user is something else.

1

2

Hence we need to correct and make it consistent at every place. So a simple solution of this problem is to edit your hadoop-env.sh file and add the user-name for which you want to start the yarn service. So go ahead and edit $HADOOP_HOME/etc/hadoop/hadoop-env.sh by adding the following lines

cd /usr/soft/hadoop/hadoop-3.3.0/etc/hadoop/

1

vim hadoop-env.sh

1

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

1

2

3

4

5

在这里插入图片描述

Now save and start yarn, hdfs service and check that it works.

我们在hadoop-env.sh文件中也可以找到如下的描述

To prevent accidents, shell commands be (superficially) locked to only allow certain users to execute certain subcommands.

为了防止发生意外,仅(部分)锁定shell命令以仅允许某些用户执行某些子命令。

It uses the format of (command)_(subcommand)_USER.For example, to limit who can execute the namenode command,export HDFS_NAMENODE_USER=hdfs

使用“命令_子命令_用户”,例如,通过使用export HDFS_NAMENODE_USER=hdfs来限制哪个用户可以执行namenode命令。

参考stackoverflow上的相关讨论

四、运行Hadoop

1.首先你需要初始化HDFS系统

在hadop3.1.1目录下使用如下命令:

bin/hdfs namenode -format

表示已经初始化完成。

2.开启NameNode和DataNode守护进程

在hadop3.1.1目录下使用如下命令:

sbin/start-dfs.sh

3.查看进程信息

在hadop3.1.1目录下使用如下命令:

jps

4.查看Web UI

在浏览器中输入http://localhost:50070,即可查看相关信息。但是有些同学可能出现访问不了50070端口的问题。你可以在终端使用

netstat -ntlp

查看一下服务器启动的端口。

以后关机在启动hadoop只需要执行sbin/start-all.sh就可以启动hadoop了

sbin/start-all.sh

然后一个个尝试,我最终找到的HDFS nameNode 的登陆端口是9870

最后如果局域网内其他电脑需要登录网站 需先在电脑hosts上映射服务器名称或ip

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值