Hadoop伪分布安装及简单使用

如何安装Hadoop

参考: http://dblab.xmu.edu.cn/blog/install-hadoop/

设置Hadoop环境变量

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR"

如果不加最后一条,会出现以下错误

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable](http://www.cnblogs.com/likui360/p/6558749.html)

安装方式

Hadoop伪分布安装及简单使用
这里采用伪分布安装配置:
Hadoop伪分布安装及简单使用

核心

Hadoop伪分布安装及简单使用

1.属于HDFS的节点
  • NameNode

名称节点,相当于目录服务器 ,应用来取数据的时候,首先访问NameNode,去获得我要访问的数据到底放在了哪个DataNode上面.
名称节点包括:
Hadoop伪分布安装及简单使用

再来看一下FsImage,它维护的信息包括以下:

Hadoop伪分布安装及简单使用

注意:

块在哪个节点存储的并不是由FsImage维护的,而是一个单独的内存区域,而是下面这种方式;
DataNode会向NameNode汇报自己节点保存哪些数据块,作为管家的NameNode会构建一个清单,它自己就知道数据块到底分布到了哪个节点.(并不是由FsImage保存的)
Hadoop伪分布安装及简单使用

  • #####DataNode
2.属于MapReduce的核心组件

Hadoop伪分布安装及简单使用
JobTracker负责对整个用户作业进行管理,它把一个用户的大作业拆分成小的作业.分发到不同的机器上去执行
TaskTracker每个机器都部署了TaskTracker,每一个负责跟踪和执行分配给自己的那一部分作业

HDFS编程实践

参考 http://dblab.xmu.edu.cn/blog/290-2/

我们又两种方式访问HDFS,如下图所示
Hadoop伪分布安装及简单使用

在安装完Hadoop后,我们可以使用一下命令启动Hadoop

cd /usr/local/hadoop
hdfs namenode -format #格式化hadoop的hdfs文件系统
./sbin/start-dfs.sh #启动hadoop

方式一:利用shell命令

三种不同的命令类型,适用于不同的情景,具体区别见下图
Hadoop伪分布安装及简单使用

  • ls列出文件信息,mkdir新建文件夹
    Hadoop伪分布安装及简单使用
  • 本地文件上传到HDFS
hadoop fs -cp 本地文件路径 HDFS路径

Hadoop伪分布安装及简单使用

web方式(用的比较少)

通过访问 http://localhost:50070
Hadoop伪分布安装及简单使用

方式二:利用java API

应用商店安装eclipse,默认工作空间.
1)创建项目
File - New -Java Project,输入项目名称,finish
Hadoop伪分布安装及简单使用
Hadoop伪分布安装及简单使用

2)导入jar
为了编写一个能够与HDFS交互的Java应用程序,一般需要向Java工程中添加以下JAR包:
(1)”/usr/local/hadoop/share/hadoop/common”目录下的hadoop-common-2.7.1.jar和haoop-nfs-2.7.1.jar;
(2)/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包;
(3)“/usr/local/hadoop/share/hadoop/hdfs”目录下的haoop-hdfs-2.7.1.jar和haoop-hdfs-nfs-2.7.1.jar;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib”目录下的所有JAR包。

/usr/local/hadoop/share/hadoop

右键新建的项目 - 选择properties - 搜索Java Build Path - Libraries -Add External JARS
Hadoop伪分布安装及简单使用
Hadoop伪分布安装及简单使用

实例测试

检测分布式文件系统HDFS上到底存不存在一个input.txt文件?
在这之前,还需要一些工作
第一步:
core-site.xmlhdfs-site.xml(在/usr/local/hadoop/etc/hadoop目录下),复制到当前工程项目下,即eclipse工作目录的bin文件夹下面

sudo cp core-site.xml hdfs-site.xml /home/user/workspace/hadoop.test/bin/

第二步: 编写代码

package fileTest;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class FileExitTest {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			String filename = "test";
			Configuration conf = new Configuration();
			FileSystem fs = FileSystem.get(conf);
			if(fs.exists(new Path(filename))){
				System.out.println("file exist");
			}else{
				System.out.print("file is not exist");
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

或者采用下面的方法
(此时不需要将core-site.xml和hdfs-site.xml拷贝至项目bin目录下)

package fileTest;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class FileExitTest {
    public static void main(String[] args){
        try{
            String fileName = "test";
            Configuration conf = new Configuration();
            conf.set("fs.defaultFS", "hdfs://localhost:9000");
            conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");
            FileSystem fs = FileSystem.get(conf);
            if(fs.exists(new Path(fileName))){
                System.out.println("文件存在");
            }else{
                System.out.println("文件不存在");
            }
 
        }catch (Exception e){
            e.printStackTrace();
        }
    }
}

应用程序的部署

下面介绍如何把Java应用程序生成JAR包,部署到Hadoop平台上运行。首先,在Hadoop安装目录下新建一个名称为myapp的目录,用来存放我们自己编写的Hadoop应用程序,可以在Linux的终端中执行如下命令:

[email protected]:/usr/local/hadoop$ cd /usr/local/hadoop
[email protected]:/usr/local/hadoop$ mkdir myapp

Hadoop伪分布安装及简单使用

Hadoop伪分布安装及简单使用
Hadoop伪分布安装及简单使用
之后jar文件并生成并保存在了/usr/local/hadoop/myapp目录下.
可以采用以下两种命令来执行

cd /usr/local/hadoop
hadoop jar ./myapp/HDFSExample.jar

或者

java -jar ./myapp/HDFSExample.jar