Hadoop菜鸟教程详解

Hadoop是一个分布式计算平台,不但支持海量数据的存储,同时也提供了可靠的分布式数据处理机制,处理过程被优化为在大量廉价的硬件上扩展。

一、Hadoop环境搭建

为了使用Hadoop,我们需要完成Hadoop的环境搭建,在这里介绍如何搭建Hadoop 2.7.2的环境,详细步骤如下:

1. 安装Java并设置环境变量

cd /opt
tar -zxvf jdk-8u131-linux-x64.tar.gz
vim  /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_131
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
source /etc/profile

2. 安装hadoop

cd /opt
tar -zxvf hadoop-2.7.2.tar.gz
vim  /etc/profile
export HADOOP_HOME=/opt/hadoop-2.7.2
export PATH=${HADOOP_HOME}/bin:${PATH}
source /etc/profile

3. 修改hadoop配置文件

cd /opt/hadoop-2.7.2/etc/hadoop
vim hadoop-env.sh
export JAVA_HOME=/opt/jdk1.8.0_131
export HADOOP_HOME=/opt/hadoop-2.7.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_PREFIX=${HADOOP_HOME}
export HADOOP_COMMON_HOME=${HADOOP_HOME}
export HADOOP_HDFS_HOME=${HADOOP_HOME}
export HADOOP_MAPRED_HOME=${HADOOP_HOME}
export HADOOP_YARN_HOME=${HADOOP_HOME}

4. 启动Hadoop集群

cd ${HADOOP_HOME}/sbin
./start-dfs.sh
./start-yarn.sh

二、HDFS的使用

在Hadoop中,HDFS将数据拆分成多个块,分布式存储到不同节点上,为了让大文件能够并行处理,HDFS使用了块的概念,一个块可以理解为是一个文件的一部分。

1. HDFS基础操作

# 创建目录
hdfs dfs -mkdir /input
# 在本地创建文件
echo "hello hadoop" > test
# 上传文件到HDFS
hdfs dfs -put test /input
# 查看上传到HDFS的文件
hdfs dfs -ls /input
# 下载文件到本地
hdfs dfs -get /input/test test2
# 删除HDFS上的文件
hdfs dfs -rm /input/test
# 查看HDFS上文件内容
hdfs dfs -cat /input/test2

2. HDFS读写文件

下面是使用Java API读写HDFS文件的示例代码:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

import java.io.InputStream;
import java.net.URI;

public class HdfsDemo {

    private static final String HDFS_PATH = "hdfs://localhost:9000";
    private static final Configuration CONF = new Configuration();

    public static void main(String[] args) throws Exception {

        URI uri = new URI(HDFS_PATH);
        FileSystem fs = FileSystem.get(uri, CONF);

        // 写入文件
        String content = "Hello HDFS!";
        byte[] buff = content.getBytes("UTF-8");
        InputStream in = new ByteArrayInputStream(buff);
        fs.create(new Path("/test.txt"));
        IOUtils.copyBytes(in, out, 4096, true);

        // 读取文件
        InputStream in = fs.open(new Path("/test.txt"));
        IOUtils.copyBytes(in, System.out, 4096, false);

        fs.close();
    }
}

三、MapReduce的使用

MapReduce是Hadoop提供的用于大规模数据处理的编程模型,用户可以编写Map和Reduce函数,让Hadoop分发数据,执行Map任务,然后收集结果,执行Reduce任务,最终将结果返回。

1. MapReduce基础操作

下面是使用命令行执行MapReduce任务的示例命令:

# 创建输入目录并上传数据
hadoop fs -mkdir /input
hadoop fs -put /usr/local/hadoop/LICENSE.txt /input

# 执行MapReduce任务
hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

# 查看输出结果
hadoop fs -cat /output/part-r-00000

2. MapReduce自定义函数

下面是编写自定义Map函数的Java代码:

public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context) throws IOException, InterruptedException {

        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
            word.set(itr.nextToken());
            context.write(word, one);
        }

    }

}

下面是编写自定义Reduce函数的Java代码:

public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {

    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {

        int sum = 0;
        for (IntWritable val : values) {
            sum += val.get();
        }
        result.set(sum);
        context.write(key, result);

    }

}

下面是编写Driver程序来运行自定义MapReduce任务的Java代码:

public static void main(String[] args) throws Exception {

    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");

    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);

    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));

    System.exit(job.waitForCompletion(true) ? 0 : 1);

}

四、Hadoop集群管理

在Hadoop中,集群管理分为两个部分:节点管理和作业管理。节点管理是指监控集群中的每个节点,确保它们正常工作。作业管理是指确保MapReduce作业正确提交和管理,监控作业的进度,以及保证数据在节点之间的正确移动。

1. 节点管理

下面是使用命令行监控Hadoop集群节点状态的示例命令:

$HADOOP_HOME/bin/hdfs dfsadmin -report

2. 作业管理

下面是使用命令行提交MapReduce作业的示例命令:

$HADOOP_HOME/bin/hadoop jar /usr/local/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output

下面是使用浏览器查看作业运行状态的示例地址:

http://localhost:8088/cluster

五、总结

Hadoop菜鸟教程介绍了Hadoop的环境搭建、HDFS的使用、MapReduce的使用和Hadoop集群管理等方面的内容,这些内容可以帮助初学者快速了解和学习Hadoop的基础知识。

原创文章,作者:PZELE,如若转载,请注明出处:https://www.506064.com/n/332260.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
PZELEPZELE
上一篇 2025-01-21 17:30
下一篇 2025-01-21 17:30

相关推荐

  • MQTT使用教程

    MQTT是一种轻量级的消息传输协议,适用于物联网领域中的设备与云端、设备与设备之间的数据传输。本文将介绍使用MQTT实现设备与云端数据传输的方法和注意事项。 一、准备工作 在使用M…

    编程 2025-04-29
  • Python3.6.5下载安装教程

    Python是一种面向对象、解释型计算机程序语言。它是一门动态语言,因为它不会对程序员提前声明变量类型,而是在变量第一次赋值时自动识别该变量的类型。 Python3.6.5是Pyt…

    编程 2025-04-29
  • Deepin系统分区设置教程

    本教程将会详细介绍Deepin系统如何进行分区设置,分享多种方式让您了解如何规划您的硬盘。 一、分区的基本知识 在进行Deepin系统分区设置之前,我们需要了解一些基本分区概念。 …

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Qt雷达探测教程

    本文主要介绍如何使用Qt开发雷达探测程序,并展示一个简单的雷达探测示例。 一、环境准备 在开始本教程之前,需要确保你的开发环境已经安装Qt和Qt Creator。如果没有安装,可以…

    编程 2025-04-29
  • 猿编程python免费全套教程400集

    想要学习Python编程吗?猿编程python免费全套教程400集是一个不错的选择!下面我们来详细了解一下这个教程。 一、课程内容 猿编程python免费全套教程400集包含了从P…

    编程 2025-04-29
  • Python烟花教程

    Python烟花代码在近年来越来越受到人们的欢迎,因为它可以让我们在终端里玩烟花,不仅具有视觉美感,还可以通过代码实现动画和音效。本教程将详细介绍Python烟花代码的实现原理和模…

    编程 2025-04-29
  • 使用Snare服务收集日志:完整教程

    本教程将介绍如何使用Snare服务收集Windows服务器上的日志,并将其发送到远程服务器进行集中管理。 一、安装和配置Snare 1、下载Snare安装程序并安装。 https:…

    编程 2025-04-29
  • Python画K线教程

    本教程将从以下几个方面详细介绍Python画K线的方法及技巧,包括数据处理、图表绘制、基本设置等等。 一、数据处理 1、获取数据 在Python中可以使用Pandas库获取K线数据…

    编程 2025-04-28
  • Python语言程序设计教程PDF赵璐百度网盘介绍

    Python语言程序设计教程PDF赵璐百度网盘是一本介绍Python语言编程的入门教材,本文将从以下几个方面对其进行详细阐述。 一、Python语言的特点 Python语言属于解释…

    编程 2025-04-28

发表回复

登录后才能评论