Hadoop平台如何搭建

Hadoop平台的搭建流程之单机/伪分布配置

所需工具:VMware Workstation / Virtual Box 虚拟机; Hadoop安装文件;

实验环境:Ubuntu 32位或64位系统 / CentOS系统;

ps:

   该实验教程采用Ubuntu 64位系统进行讲解。

   Ubuntu安装系统:请参考http://dblab.xmu.edu.cn/blog/337-2/

   如果使用CentOS/RedHat系统,请参考:http://dblab.xmu.edu.cn/blog/install-hadoop-in-centos/

  请确保安装过程过程中处于联网状态!虚拟机无法联网,建议使用双系统安装Ubuntu。


一. 创建hadoop用户

按 ctrl+alt+t 打开终端窗口,输入一下命令创建新用户:

$ sudo useradd -m hadoop -s /bin/bash

创建了用户,并使用/bin/bash作为shell

sudo:

本文中会大量使用到sudo命令。sudo是ubuntu中一种权限管理机制,管理员可以授权给一些普通用户去执行一些需要root权限执行的操作。当使用sudo命令时,就需要输入您当前用户的密码.

设置密码:

$ sudo passwd hadoop

为hadoop用户增加管理员权限:

$ sudo adduser hadoop sudo

最后注销用户,返回登录界面。选择刚刚创建的hadoop用户登录。

二. 更新apt

后续需要使用apt安装软件,不进行更新可能会出现一些安装不了的情况。打开终端窗口,执行以下命令:

$ sudo apt-get update

后续需要更改一些配置文件,建议安装vim(vi增强版):

$ sudo apt-get install vim

如果需要确认,按y即可。

三 .安装SSH,配置SSH无密码登录

集群,单节点模式都需要用到ssh登录(类似远程登陆,你可以登陆某台linux主机,并在上面运行命令),ubuntu默认安装了ssh client,还需要安装ssh server

$ sudo apt-get install openssh-server

安装完成后,登陆本机:

$ ssh localhost

首次登陆会有提示,输入yes。按提示输入密码即可。

将ssh配置为无密码登录比较方便。

退出ssh,回到原先终端窗口,利用ssh-keygen生成密钥,并将密钥加入授权:

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

~的含义:

在 Linux 系统中,~ 代表的是用户的主文件夹,即 “/home/用户名” 这个目录,如你的用户名为 hadoop,则 ~ 就代表 “/home/hadoop/”。 此外,命令中的 # 后面的文字是注释,只需要输入前面命令即可。

之后再使用ssh localhost命令,无需输入密码就可登陆。

四 . 安装JAVA环境

所需要的JDK安装包jdk-8u162-linux-x64.tar.gz放在了百度云盘,https://pan.baidu.com/share/init?surl=ZuY142dtMERuh4vfliAgJg(提取码:gx0b)。请把压缩格式的文件jdk-8u162-linux-x64.tar.gz下载到本地电脑,假设保存在“/home/Downloads/”目录下

提示:该安装包需要在虚拟机ubuntu系统里面下载,不要下在windows系统等主机里。如果下载到主机,可以通过FTP软件把安装包上传到指定目录(Downloads)下。如果你不会使用FTP,参考我的另一篇博客,这里有具体的执行主机与虚拟机之间交互文件的方法  https://www.cnblogs.com/guojiaxue/p/12628156.html

$ cd /usr/lib
$ sudo mkdir jvm #创建/usr/lib/jvm目录用来存放JDK文件
$ cd ~ #进入hadoop用户的主目录
$ cd Downloads  #注意区分大小写字母,刚才已经通过FTP软件把JDK安装包jdk-8u162-linux-x64.tar.gz上传到该目录下
$ sudo tar -zxvf ./jdk-8u162-linux-x64.tar.gz -C /usr/lib/jvm  #把JDK文件解压到/usr/lib/jvm目录下

关于常用的Linux命令用法:参考http://dblab.xmu.edu.cn/blog/1624-2/

查看解压后的文件:

$ cd /usr/lib/jvm
$ ls

继续设置环境变量:

$ cd ~
$ vim ~/.bashrc

打开vim编辑器后,打开了hadoop这个用户的环境变量配置文件,请在这个文件的开头位置,添加如下几行内容:

export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_162
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

查看vim使用方法:参考http://dblab.xmu.edu.cn/blog/1607-2/

保存.bashrc文件并退出vim编辑器。然后,继续执行如下命令让.bashrc文件的配置立即生效:

$ source ~/.bashrc

查看是否安装成功:

$ java -version

如果能够在屏幕上返回如下信息,则说明安装成功:

hadoop@ubuntu:~$ java -version
java version "1.8.0_162"
Java(TM) SE Runtime Environment (build 1.8.0_162-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.162-b12, mixed mode)

五 . 安装Hadoop

Hadoop安装文件:可在官网下载,也可点击此处百度网盘自取:https://pan.baidu.com/share/init?surl=ZuY142dtMERuh4vfliAgJg(提取码:gx0b),下载其中的“stable”下的hadoop-x.x.x.tar.gz格式的文件,另一个含src的是源代码需要编译。

注意:

如果读者是使用虚拟机方式安装Ubuntu系统的用户,请用虚拟机中的Ubuntu自带firefox浏览器访问本指南,再点击下面的地址,才能把hadoop文件下载虚拟机ubuntu中。请不要使用Windows系统下的浏览器下载,文件会被下载到Windows系统中,虚拟机中的Ubuntu无法访问外部Windows系统的文件,造成不必要的麻烦。

将 Hadoop 安装至 /usr/local/ 中:

$ sudo tar -zxf ~/下载/hadoop-2.6.0.tar.gz -C /usr/local    # 解压到/usr/local中
$ cd /usr/local/
$ sudo mv ./hadoop-2.6.0/ ./hadoop            # 将文件夹名改为hadoop
$ sudo chown -R hadoop ./hadoop       # 修改文件权限

Hadoop 解压后即可使用。输入如下命令来检查 Hadoop 是否可用,成功则会显示 Hadoop 版本信息:

$ cd /usr/local/hadoop
$ ./bin/hadoop version

相对路径与绝对路径:

请务必注意命令中的相对路径与绝对路径,本文后续出现的 ./bin/..../etc/... 等包含 ./ 的路径,均为相对路径,以 /usr/local/hadoop 为当前目录。例如在 /usr/local/hadoop 目录中执行 ./bin/hadoop version 等同于执行 /usr/local/hadoop/bin/hadoop version。可以将相对路径改成绝对路径来执行,但如果你是在主文件夹 ~ 中执行 ./bin/hadoop version,执行的会是 /home/hadoop/bin/hadoop version,就不是我们所想要的了。

六 . Hadoop单机配置

Hadoop 默认模式为非分布式模式(本地模式),无需进行其他配置即可运行。非分布式即单 Java 进程,方便进行调试。

现在我们可以执行例子来感受下 Hadoop 的运行。Hadoop 附带了丰富的例子(运行 ./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar 可以看到所有例子),包括 wordcount、terasort、join、grep 等。

在此我们选择运行 grep 例子,我们将 input 文件夹中的所有文件作为输入,筛选当中符合正则表达式 dfs[a-z.]+ 的单词并统计出现的次数,最后输出结果到 output 文件夹中。

$ 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/*          # 查看运行结果

注意:

Hadoop 默认不会覆盖结果文件,因此再次运行上面实例会提示出错,需要先将 ./output 删除。

$ rm -r ./output

七. 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 (通过 gedit 编辑会比较方便: gedit ./etc/hadoop/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>
</configuration>

同样的,修改配置文件 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>

注:gredit不能使用的,可以换成sudo vi,效果一样。

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

$ cd /usr/local/hadoop
$ ./bin/hdfs namenode -format

成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错。

如果在这一步时提示 Error: JAVA_HOME is not set and could not be found. 的错误,则说明之前设置 JAVA_HOME 环境变量那边就没设置好,请按教程先设置好 JAVA_HOME 变量,否则后面的过程都是进行不下去的。如果已经按照前面教程在.bashrc文件中设置了JAVA_HOME,还是出现 Error: JAVA_HOME is not set and could not be found. 的错误,那么,请到hadoop的安装目录修改配置文件“/usr/local/hadoop/etc/hadoop/hadoop-env.sh”,在里面找到“export JAVA_HOME=${JAVA_HOME}”这行,然后,把它修改成JAVA安装路径的具体地址,比如,“export JAVA_HOME=/usr/lib/jvm/default-java”,然后,再次启动Hadoop。

接着开启 NameNode 和 DataNode 守护进程。

$ cd /usr/local/hadoop
$ ./sbin/start-dfs.sh  #start-dfs.sh是个完整的可执行文件,中间没有空格

若出现SSH提示,输入yes即可。

八. 运行Hadoop伪分布实例

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

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

注意:

教材《大数据技术原理与应用》的命令是以”./bin/hadoop dfs”开头的Shell命令方式,实际上有三种shell命令方式。
1. hadoop fs
2. hadoop dfs
3. hdfs dfs

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)不能存在,否则会提示错误,因此运行前需要先删除输出目录。在实际开发应用程序时,可考虑在程序中加上如下代码,能在每次运行时自动删除输出目录,避免繁琐的命令行操作:

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 就可以!

以上就是全部。更详细的资料参考厦门大学林子雨老师的教程:http://dblab.xmu.edu.cn/blog/install-hadoop/

猜你喜欢

转载自www.cnblogs.com/guojiaxue/p/12627248.html