当前位置: 首页 > news >正文

Hadoop入门:构建你的第一个大数据处理平台

Hadoop入门:构建你的第一个大数据处理平台

引言

大数据技术在处理和分析大量数据方面的需求日益增长,Hadoop作为开源的大数据处理平台,已经成为许多企业和组织的首选工具。Hadoop生态系统提供了一整套用于分布式存储和处理大数据的工具和框架。本文将详细介绍如何构建一个Hadoop大数据处理平台,并通过具体的示例代码演示如何使用Hadoop进行大数据处理。

什么是Hadoop?

Hadoop是由Apache基金会开发的开源框架,用于分布式存储和处理大规模数据集。Hadoop核心组件包括:

  1. Hadoop分布式文件系统(HDFS):一个分布式文件系统,提供高吞吐量的数据访问。
  2. MapReduce:一种分布式计算模型,用于处理和生成大数据集。
  3. YARN(Yet Another Resource Negotiator):一种资源管理系统,用于管理集群资源和调度作业。

除了这些核心组件,Hadoop生态系统还包括许多其他工具和框架,如Hive、Pig、HBase、Spark等,帮助开发者更高效地处理和分析大数据。

环境准备

在构建Hadoop平台之前,我们需要准备一个基本的环境。本文将以单节点(pseudo-distributed)模式进行演示,这种模式适用于学习和开发,但在生产环境中通常使用多节点集群。

1. 安装Java

Hadoop依赖于Java环境,因此需要首先安装Java Development Kit (JDK)。

sudo apt-get update
sudo apt-get install openjdk-8-jdk
2. 下载和安装Hadoop

从Apache官网下载安装Hadoop。

wget https://downloads.apache.org/hadoop/common/hadoop-3.3.2/hadoop-3.3.2.tar.gz
tar -xzvf hadoop-3.3.2.tar.gz
sudo mv hadoop-3.3.2 /usr/local/hadoop
3. 配置环境变量

编辑~/.bashrc文件,添加以下内容:

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 JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

然后加载环境变量:

source ~/.bashrc
4. 配置Hadoop

编辑core-site.xml,添加以下配置:

<configuration><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/hdfs/namenode</value></property><property><name>dfs.datanode.data.dir</name><value>file:///usr/local/hadoop/hdfs/datanode</value></property>
</configuration>

编辑mapred-site.xml,添加以下配置:

<configuration><property><name>mapreduce.framework.name</name><value>yarn</value></property>
</configuration>

编辑yarn-site.xml,添加以下配置:

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

启动Hadoop

在启动Hadoop之前,我们需要格式化HDFS:

hdfs namenode -format

然后依次启动HDFS和YARN:

start-dfs.sh
start-yarn.sh

通过以下命令查看是否启动成功:

jps

如果看到NameNode、DataNode、ResourceManager和NodeManager等进程,说明Hadoop已成功启动。

第一个Hadoop MapReduce作业

MapReduce是一种编程模型,用于大数据集的并行处理。一个MapReduce作业主要分为两个阶段:Map阶段和Reduce阶段。

示例:词频统计

我们将通过一个简单的词频统计例子来演示如何编写和运行一个MapReduce作业。

  1. 创建输入文件

首先,创建一个包含一些文本的输入文件。

echo "Hello Hadoop Hello World" > input.txt
hdfs dfs -mkdir /input
hdfs dfs -put input.txt /input
  1. 编写MapReduce代码

下面是一个简单的词频统计的MapReduce代码。

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;import java.io.IOException;
import java.util.StringTokenizer;public class WordCount {public static class TokenizerMapperextends 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);}}}public static class IntSumReducerextends 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);}}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);}
}
  1. 编译和打包

编译并打包为JAR文件。

javac -classpath `hadoop classpath` -d wordcount_classes WordCount.java
jar -cvf wordcount.jar -C wordcount_classes/ .
  1. 运行MapReduce作业

将生成的JAR文件上传到HDFS并运行MapReduce作业。

hadoop jar wordcount.jar WordCount /input /output
  1. 查看结果

作业完成后,可以在HDFS上查看输出结果。

hdfs dfs -cat /output/part-r-00000

使用Hive进行数据分析

Hive是一个基于Hadoop的数据仓库工具,用于在HDFS上进行数据查询和分析。Hive提供了一种类似SQL的查询语言,称为HiveQL。

安装Hive

下载并解压Hive:

wget https://downloads.apache.org/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
tar -xzvf apache-hive-3.1.2-bin.tar.gz
sudo mv apache-hive-3.1.2-bin /usr/local/hive

配置环境变量:

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
source ~/.bashrc

配置Hive:

编辑hive-env.sh文件,添加以下内容:

export HADOOP_HOME=/usr/local/hadoop
export HIVE_CONF_DIR=$HIVE_HOME/conf
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

初始化元数据存储:

schematool -dbType derby -initSchema
使用Hive进行数据查询

启动Hive CLI并创建一个表:

hive
CREATE TABLE users (name STRING, age INT, isActive BOOLEAN)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ',';LOAD DATA LOCAL INPATH 'users.csv' INTO TABLE users;

查询

数据:

SELECT * FROM users WHERE isActive = true;

使用Spark进行数据处理

Spark是一个基于内存的大数据处理框架,比Hadoop MapReduce更快,并且提供了更高级的API。

安装Spark

下载并解压Spark:

wget https://downloads.apache.org/spark/spark-3.3.2/spark-3.3.2-bin-hadoop3.2.tgz
tar -xzvf spark-3.3.2-bin-hadoop3.2.tgz
sudo mv spark-3.3.2-bin-hadoop3.2 /usr/local/spark

配置环境变量:

export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin
source ~/.bashrc
使用Spark进行数据处理

启动Spark Shell并进行数据处理:

spark-shell

加载数据并进行简单的处理:

val data = sc.textFile("hdfs://localhost:9000/input.txt")
val words = data.flatMap(line => line.split(" "))
val wordCounts = words.map(word => (word, 1)).reduceByKey(_ + _)
wordCounts.collect().foreach(println)

结论

通过本文的介绍,我们了解了如何从零开始构建一个Hadoop大数据处理平台,并通过具体的示例代码演示了如何使用Hadoop的核心组件进行大数据处理。我们还介绍了如何使用Hive进行数据查询和分析,以及如何使用Spark进行更高级的数据处理。希望本文能帮助读者对Hadoop生态系统有一个全面的认识,并在实际项目中有效应用这些技术。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring Boot 使用多线程完成 统计当日用户所属区域
  • 选电脑——电脑配置
  • ViP-LLaVA: Making Large Multimodal Models Understand Arbitrary Visual Prompts
  • 江协科技51单片机学习- p31 LCD1602液晶屏驱动
  • Java二十三种设计模式-组合模式(11/23)
  • 揭秘LoRA:利用深度学习原理在Stable Diffusion中打造完美图像生成的秘密武器
  • c++ | vector
  • 【多线程-从零开始-肆】线程安全、加锁和死锁
  • 线程 【Linux】
  • vue3+axios请求导出excel文件
  • 【优秀python大屏】基于python flask的广州历史天气数据应用与可视化大屏
  • Jboss 漏洞合集
  • uniapp结合uview-ui创建项目关键步骤一步一图教程
  • 记忆化搜索——1
  • CSDN 僵尸粉 机器人
  • [nginx文档翻译系列] 控制nginx
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • ➹使用webpack配置多页面应用(MPA)
  • Angular2开发踩坑系列-生产环境编译
  • css选择器
  • es6(二):字符串的扩展
  • ESLint简单操作
  • JAVA 学习IO流
  • java中的hashCode
  • JSONP原理
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Linux中的硬链接与软链接
  • Solarized Scheme
  • uva 10370 Above Average
  • Vue.js-Day01
  • 阿里研究院入选中国企业智库系统影响力榜
  • 半理解系列--Promise的进化史
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 机器学习 vs. 深度学习
  • 简单数学运算程序(不定期更新)
  • 前端
  • 微信小程序开发问题汇总
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • #Linux(权限管理)
  • $.ajax()方法详解
  • (16)Reactor的测试——响应式Spring的道法术器
  • (Charles)如何抓取手机http的报文
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (规划)24届春招和25届暑假实习路线准备规划
  • (紀錄)[ASP.NET MVC][jQuery]-2 純手工打造屬於自己的 jQuery GridView (含完整程式碼下載)...
  • (力扣题库)跳跃游戏II(c++)
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (算法)区间调度问题
  • (一)为什么要选择C++