单机安装Hadoop环境

本文详细介绍了如何在单机上安装Hadoop,包括安装SSH无密码登录、配置Java环境、下载安装Hadoop 2.9,以及进行伪分布式配置。重点讲解了配置core-site.xml和hdfs-site.xml的过程,以及启动、检查和运行Hadoop实例的步骤。在配置过程中,强调了可能遇到的问题及解决方案,如设置HADOOP_HOME环境变量。

单机安装Hadoop环境

1.安装SSH、配置SSH无密码登陆

集群、单节点模式都需要用到 SSH 登陆(类似于远程登陆,你可以登录某台 Linux 主机,并且在上面运行命令),Ubuntu 默认已安装了 SSH client,此外还需要安装 SSH server:

sudo apt-get install openssh-server
ssh localhost

之后退出ssh:

exit                                             # 退出刚才的 ssh localhost

配置无密码登录:

cd ~/.ssh/                                      # 若没有该目录,请先执行一次ssh localhost
ssh-keygen -t rsa                            # 会有提示,都按回车就可以
cat ./id_rsa.pub >> ./authorized_keys     # 加入授权

2.安装Java环境

sudo mv jdk-9.0.1 java
sudo mv java /usr/local/
cd /usr/local
sudo gedit ~/.bashrc           #修改当前用户环境变量

添加如下信息

export JAVA_HOME=/usr/local/java
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/bin

source ~/.bashrc

sudo gedit /etc/environment #修改系统环境变量

JAVA_HOME=”/usr/local/java”
CLASSPATH=”.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib”
PATH=”/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin:/usr/local/hadoop/sbin:/usr/local/hadoop/bin”

source /etc/environment 
java -version   #查看安装好的java版本,如下图

java版本

3.安装 Hadoop 2.9

download link: http://mirror.bit.edu.cn/apache/hadoop/common/

tar -zxvf hadoop-2.9.0.tar.gz 
sudo mv ./hadoop-2.9.0 ./hadoop
sudo chown -R hadoopp ./hadoop 
sudo mv hadoop /usr/local/

hadoop version       #环境变量已经在上一步设置PATH一起设置了,这里不再赘述

hadoop版本

4.Hadoop单机配置(非分布式)

cd /usr/local/hadoop
mkdir ./input
cp ./etc/hadoop/*.xml ./input        # 将配置文件作为输入文件
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep ./input ./output 'dfs[a-z.]+'        #运行成功:
cat ./output/*                       # 查看运行结果

运行结果

rm -r ./output       #删除结果,避免下次使用报错

5.Hadoop伪分布式配置

       Hadoop 可以在单节点上以伪分布式的方式运行,Hadoop 进程以分离的 Java 进程来运行,节点既作为 NameNode 也作为 DataNode,同时,读取的是 HDFS 中的文件。
       Hadoop 的配置文件位于 /usr/local/hadoop/etc/hadoop/ 中,伪分布式需要修改2个配置文件core-site.xml和hdfs-site.xml。Hadoop的配置文件是 xml 格式,每个配置以声明 property 的 name 和 value 的方式来实现。


修改配置文件core-site.xml:

sudo gedit ./etc/hadoop/core-site.xml  
<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>
</configuration>

core-site.xml source
将上图修改为下图:
core-site.xml target


修改hdfs-site.xml 文件:

sudo gedit ./etc/hadoop/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>

如下:
hdfs-site.xml target

Hadoop配置文件说明
       Hadoop 的运行方式是由配置文件决定的(运行 Hadoop 时会读取配置文件),因此如果需要从伪分布式模式切换回非分布式模式,需要删除 core-site.xml 中的配置项。
       此外,伪分布式虽然只需要配置 fs.defaultFS 和 dfs.replication 就可以运行(官方教程如此),不过若没有配置 hadoop.tmp.dir 参数,则默认使用的临时目录为 /tmp/hadoo-hadoop,而这个目录在重启时有可能被系统清理掉,导致必须重新执行 format 才行。所以我们进行了设置,同时也指定 dfs.namenode.name.dir 和 dfs.datanode.data.dir,否则在接下来的步骤中可能会出错。

配置完成后,执行 NameNode 的格式化:

./bin/hdfs namenode -format

格式化成功:
格式化成功

启动NameNode 和 DataNode 守护进程。

./sbin/start-dfs.sh 

启动hadoop
       启动完成后,可以通过命令 jps 来判断是否成功启动,若成功启动则会列出如下进程:
jps结果
“NameNode”、”DataNode” 和 “SecondaryNameNode”(如果 SecondaryNameNode 没有启动,请运行 sbin/stop-dfs.sh 关闭进程,然后再次尝试启动尝试)。如果没有 NameNode 或 DataNode ,那就是配置不成功,请仔细检查之前步骤,或通过查看启动日志排查原因。
启动 Hadoop 时提示 Could not resolve hostname
       如果启动 Hadoop 时遇到输出“ssh: Could not resolve hostname xxx”的异常情况, 这个并不是 ssh 的问题,可通过设置 Hadoop 环境变量来解决。首先按键盘的 ctrl + c 中断启动,然后在 ~/.bashrc 中,增加如下两行内容(设置过程与 JAVA_HOME 变量一样,其中 HADOOP_HOME 为 Hadoop 的安装目录):

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native

       保存后,务必执行source ~/.bashrc使变量设置生效,然后再次执行./sbin/start-dfs.sh启动 Hadoop。成功启动后,可以访问 Web 界面http://localhost:50070 查看 NameNode 和 Datanode 信息,还可以在线查看 HDFS 中的文件
HDFS在线文件

6.运行Hadoop伪分布式实例

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

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

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

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

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

./bin/hdfs dfs -ls input

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

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

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

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,则运行

./sbin/stop-dfs.sh  #退出
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值