【Hadoop和Spark伪分布式安装与使用】

本文详细介绍了如何在Hadoop中进行伪分布式安装,包括HDFS用户目录创建、XML配置文件操作、MapReduce作业运行以及YARN的配置与启动。重点讲解了YARN对资源管理和任务调度的影响,以及注意事项和常见问题解决方法。
摘要由CSDN通过智能技术生成

Hadoop和Spark伪分布式安装与使用(第三期)
接第二期继续,温馨提示,如果第二期结束后关闭了终端,再次登录需要重启Hadoop:./sbin/start-dfs.sh,注意要进入到Hadoop目录下。

14、运行Hadoop伪分布式实例

上面的单机模式,grep 例子读取的是本地数据,伪分布式读取的则是 HDFS 上的数据。要使用 HDFS,首先需要在 HDFS 中创建用户目录:

./bin/hdfs dfs -mkdir -p /user/hadoop

(扩展)hdfs有三种shell命令方式:
hadoop fs适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs只能适用于HDFS文件系统
hdfs dfs跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

接着将 ./etc/hadoop 中的 xml 文件作为输入文件复制到分布式文件系统中,即将/usr/local/hadoop/etc/hadoop 复制到分布式文件系统中的/user/hadoop/input 中。我们使用的是 hadoop 用户,并且已创建相应的用户目录/user/hadoop ,因此在命令中就可以使用相对路径如 input,其对应的绝对路径就是/user/hadoop/input:

./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input

复制完成后,可以通过如下命令查看文件列表:

./bin/hdfs dfs -ls input

在这里插入图片描述

伪分布式运行 MapReduce 作业的方式跟单机模式相同,区别在于伪分布式读取的是HDFS中的文件(可以将单机步骤中创建的本地 input 文件夹,输出结果 output 文件夹都删掉来验证这一点)。

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

在这里插入图片描述

查看运行结果的命令(查看的是位于 HDFS 中的输出结果):

./bin/hdfs dfs -cat output/*

结果如下,注意到刚才我们已经更改了配置文件,所以运行结果不同。

在这里插入图片描述

我们也可以将运行结果取回到本地:

rm -r ./output    # 先删除本地的 output 文件夹(如果存在)
./bin/hdfs dfs -get output ./output     # 将 HDFS 上的 output 文件夹拷贝到本机
cat ./output/*

Hadoop 运行程序时,输出目录不能存在,否则会提示错误"org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/user/hadoop/output already exists",因此若要再次执行,需要执行如下命令删除 output 文件夹(建议先执行一下):

./bin/hdfs dfs -rm -r output    # 删除 output 文件夹

(扩展)运行程序时,输出目录不能存在:运行Hadoop 程序时,为了防止覆盖结果,程序指定的输出目录(如 output)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下Java代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:

Configuration conf = new Configuration();
Job job = new Job(conf);
 
/* 删除输出目录 */
Path outputPath = new Path(args[1]);
outputPath.getFileSystem(conf).delete(outputPath, true);

若要关闭 Hadoop,则运行

./sbin/stop-dfs.sh

注意:下次启动 hadoop 时,无需进行 NameNode 的初始化,只需要运行./sbin/start-dfs.sh 就可以!

15、配置YARN环境

伪分布式不启动 YARN 也可以,一般不会影响程序执行

新的版本 Hadoop 启动后,没有出现JobTracker 和 TaskTracker,这是因为新版的 Hadoop 使用了新的 MapReduce 框架(MapReduce V2,也称为 YARN,Yet Another Resource Negotiator)。

YARN 是从 MapReduce 中分离出来的,负责资源管理与任务调度。YARN 运行于 MapReduce之上,提供了高可用性、高扩展性。

上述通过 ./sbin/start-dfs.sh 启动 Hadoop,仅仅是启动了 MapReduce 环境,我们可以启动 YARN ,让
YARN 来负责资源管理与任务调度。

首先修改配置文件 mapred-site.xml,使用 gedit 编辑:

cd /usr/local/hadoop/etc/hadoop
gedit mapred-site.xml
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

接着修改配置文件 gedit yarn-site.xml:

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
        </property>
</configuration>

回到/usr/local/hadoop路径下,再进行之后的操作。

cd ..
cd ..

这两个命令可以在当前情况下回到上面的目录。

然后就可以启动 YARN 了(需要先执行过 ./sbin/start-dfs.sh):

./sbin/start-yarn.sh      # 启动YARN
./sbin/mr-jobhistory-daemon.sh start historyserver  # 开启历史服务器,才能在Web中查看任务运行情况

开启后通过 jps 查看,可以看到多了 NodeManager 和 ResourceManager 两个后台进程,如下图所示。

在这里插入图片描述

如果没有ResourceManager 和NodeManager则,修改/usr/local/hadoop/etc/hadoop/yarn-env.sh 文件添加如下配置(记得保存退出):

cd /usr/local/hadoop/etc/hadoop
export YARN_RESOURCEMANAGER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"
export YARN_NODEMANAGER_OPTS="--add-opens java.base/java.lang=ALL-UNNAMED"

在这里插入图片描述

重新启动yarn,jps查看是否启动成功

如果没有JobHistoryServer,而且有警告的话,则用下面命令启动MR JobHistory守护程序:

mapred --daemon start historyserver

启动 YARN 之后,运行实例的方法还是一样的,仅仅是资源管理方式、任务调度不同。观察日志信息可以发现,不启用 YARN 时,是"mapred.LocalJobRunner"在跑任务,启用 YARN 之后,是"mapred.YARNRunner"在跑任务。启动 YARN 有个好处是可以通过 Web 界面查看任务的运行情况:如下图所示。
在这里插入图片描述
但 YARN 主要是为集群提供更好的资源管理与任务调度,然而这在单机上体现不出价值,反而会使程序跑得稍慢些。因此在单机上是否开启 YARN 就看实际情况了。

不启动 YARN 需重命名 mapred-site.xml:如果不想启动 YARN,务必把配置文件 mapred-site.xml 重命名,改成mapred-site.xml.template,需要用时改回来就行。否则在该配置文件存在,而未开启 YARN 的情况下,运行程序会提示"Retrying connect to server:0.0.0.0/0.0.0.0:8032"的错误,这也是为何该配置文件初始文件名为 mapred-site.xml.template。

cd /usr/local/hadoop/etc/hadoop/
mv mapred-site.xml mapred-site.xml.template

关闭 YARN 的脚本如下(注意:启动Hadoop或者YARN都需要到/usr/local/hadoop目录下,否则会找不到目录或文件):

./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver

和上面要配套使用。

mapred --daemon start historyserver

附录一:在yarn上运行mapreduce程序如果报错

在yarn上运行mapreduce程序如果报错:找不到或无法加载主类org.apache.hadoop.mapreduce.v2.app.MRAppMaster,则终端执行

hadoop classpath    

查询出来的路径复制代替下面value部分,其余按格式添加到yarn-site.xml文件中,下面给出的是完整格式,但你打开的文件里已经有了这部分了,所以只需复制除其之外的部分即可。一定要注意格式,不要添加错了,配置文件出错会导致很多错误,所以在配置每一个文件时都必须小心。

<configuration>
    <property>
        <name>yarn.application.classpath</name>
        <value>/usr/local/hadoop/etc/hadoop:/usr/local/hadoop/share/hadoop/common/lib/*:/usr/local/hadoop/share/hadoop/common/*:/usr/local/hadoop/share/hadoop/hdfs:/usr/local/hadoop/share/hadoop/hdfs/lib/*:/usr/local/hadoop/share/hadoop/hdfs/*:/usr/local/hadoop/share/hadoop/mapreduce/*:/usr/local/hadoop/share/hadoop/yarn:/usr/local/hadoop/share/hadoop/yarn/lib/*:/usr/local/hadoop/share/hadoop/yarn/*</value>
    </property>
</configuration>

附录二:配置PATH环境变量

配置 PATH 这个环境变量(可执行echo $PATH命令查看,当中包含了多个目录)。例如我们在主文件夹 ~ 中执行ls这个命令时,实际执行的是*/bin/ls这个程序,而不是~/ls*这个程序。系统是根据 PATH 这个环境变量中包含的目录位置,逐一进行查找,直至在这些目录位置下找到匹配的程序(若没有匹配的则提示该命令不存在)。

上面的命令中,我们都是先进入到*/usr/local/hadoop目录中,再执行sbin/hadoop*,实际上等同于运行/usr/local/hadoop/sbin/hadoop。我们可以将 Hadoop 命令的相关目录加入到 PATH 环境变量中,这样就可以直接通过 start-dfs.sh 开启 Hadoop,也可以直接通过 hdfs 访问 HDFS 的内容,方便平时的操作。

那么我们选择在~/.bashrc 中进行设置(sudo vim ~/.bashrc,与 JAVA_HOME 的设置相似),在文件最前面加入如下单独一行:

export PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

添加后执行 source ~/.bashrc 使设置生效,生效后,在任意目录中,都可以直接使用 hdfs 等命令了,比如你可以试试这句命令:hdfs dfs -ls input,虽然但是,要启动Hadoop或者YARN还是都需要到/usr/local/hadoop目录下才能启动。

哎呀呀,写着写着电脑没电了,那就下期继续吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值