构建大数据生态:Sqoop、Hadoop、IDEA和Maven的完整安装与数据预处理指南【实训Day03】

news2024/10/6 3:19:01

一、Sqoop安装

1 上传安装包并解压缩(在hadoop101上)

# cd /opt/software
        点击xftp上传sqoop的安装文件sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
# tar -zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz
            -C /opt/module/
# cd /opt/module/
# mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha sqoop
        

 2 修改配置文件(在hadoop101上)

 # cd /opt/module/sqoop/conf
  # mv sqoop-env-template.sh sqoop-env.sh
 # vim sqoop-env.sh
        ======添加内容如下=======

export HADOOP_COMMON_HOME=/opt/module/hadoop-3.1.3
export HADOOP_MAPRED_HOME=/opt/module/hadoop-3.1.3
export HIVE_HOME=/opt/module/hive

列出mysql中所有数据库
 

sqoop list-databases --username root --password 123456 --connect jdbc:mysql://localhost:3306/

结果如下:

二、Hadoop的安装(windows)


1 解压缩hadoop-3.1.0.rar

  复制到根目录
       E:\hadoop-3.1.0

2 环境变量设置 

    此电脑===>右击属性===>高级系统变量
        ===>环境变量===>系统变量(新建 HADOOP_HOME  设置的值E:\hadoop-3.1.0)
        ===>系统变量path(新建$HADOOP_HOME/bin)

3 测试是否成功

        运行===>cmd===>hadoop version

三、 idea安装

        1) 找到IDEA 2023.1.zip
        2) 解压缩 
        3) 双击stepup.exe的安装
            注意事项:
                1.安装目录不要有中文路径
                2.需要勾选添加环境变量   add path 
                3.勾选java选项   .java 
                4.添加桌面快捷方式 64位
                5.勾选删除以前的idea安装 uninstall
                6.添加主菜单  add Menu...
        4) 破解idea 
            找到 IDEA 2023.1.zip\Crack\jetbra\scripts 
            双击 install.vbs 或者install-current-user.vbs
            弹出一个框 点击确定/OK
            等一个世纪
            会自动再弹出一个框 点击确定/OK
            
        5) 添加注册码 
            打开idea会弹出一个注册框 
            Activte code 选择中间选项 
            将注册码.txt中注册码复制到文本框中

四、 Maven安装配置


        1) 解压缩apache-maven-3.6.0.zip
            E:\Maven\apache-maven-3.6.0
            不要有中文路径以及空格等
        
        2) 新建本地仓库 
            E:\Maven\maven-repository


            
        3) 设置配置文件
            找到E:\Maven\apache-maven-3.6.0\conf
            复制所给的settings.xml覆盖原始的文件
            使用记事本打开settings.xml文件 
            =========修改内容如下=====
            <localRepository>E:\Maven\maven-repository</localRepository>
            将这个目录修改成自己的本地仓库目录
            ===========================
        
        4) 用idea配置maven
         

设置maven的目录

 
        5) 配置maven的环境变量
            此电脑==>属性==>高级系统变量
            ===>环境变量===>系统变量(path)
            ===>新建输入值 E:\Maven\apache-maven-3.6.0\bin\


        6) 测试Maven的环境变量
            运行==>cmd===>mvn -v

五、数据预处理

接着去idea进行配置

1.新建Mavne项目 JobData-clean

文件夹已经存在文件

2.在pom.xml中添加依赖管理

pom.xml添加依赖

<!--1.依赖管弹-->
<dependencies>
<!--1.1测试包-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<!--1.2 hadoop-common-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>3.1.0</version>
</dependency>
<!--1.3 hadoop-client-->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>3.1.0</version>
</dependency>
</dependencies>

遇到报错则 选择pom.xml===>右击===>Maven===>reload project

3.创建类 cn.edu.aust.clean  类CleanJob

		package cn.edu.aust.clean;

import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

/**
 * 清洗工作
 */
public class CleanJob {
    /**
     * 1.数据清洗结果
     * 将hdfs==>/JobData/20240703/page1 .... page30
     * JSON数据类型
     * @param jobdata 待处理的职位信息数据
     * @return
     */
    public static String resultToString(JSONArray jobdata)
            throws JSONException {
        // 1.设置结果字符串
        String jobResultData = "";
        // 2.循环遍历所有的职位信息数据
        for(int i = 0;i < jobdata.length();i++){
            // 2.1 获取每条职位信息
            String everyData = jobdata.get(i).toString();
            // 2.2 将String类型转换为Json对象
            JSONObject everyDataJson =
                    new JSONObject(everyData);
            // 2.3 获取职位信息中城市数据
            String city = everyDataJson.getString(
                    "city");
            // 2.4 获取职位信息中薪资数据
            String salary = everyDataJson.getString(
                    "salary");

            // 2.5 获取职位信息中福利标签数据
            String positionAdvantage =
                    everyDataJson.getString(
                            "positionAdvantage");
            // 2.6 获取职位信息中公司数据
            JSONArray companyLabelList =
                    everyDataJson.getJSONArray(
                            "companyLabelList");
            // 2.7 获取职位信息中技能数据
            JSONArray skillLabels =
                    everyDataJson.getJSONArray(
                            "skillLables");
            // 2.8 处理薪资字段数据 10k-15k中的k去掉
            String salaryNew = deleteString(salary,'k');
            // 2.9 处理公司福利数据
            String welfare = mergeString(positionAdvantage,
                    companyLabelList);
            // 2.10 处理技能数据
            String kill = killResult(skillLabels);
            // 2.11 判断是否为最后一条职位信息
            if( i == jobdata.length()-1){
                jobResultData = jobResultData
                        + city +","
                        + salaryNew + ","
                        + welfare + ","
                        + kill;
            }else{
                jobResultData = jobResultData
                        + city +","
                        + salaryNew + ","
                        + welfare + ","
                        + kill + "\n";
            }

        }
        return jobResultData;
    }
    /**
     * 2.删除字符串指定字符  10k-15k 删除k值
     */
    public static String deleteString(
            String str,char delChar){
        // 1.设置可变长度字符串类型
        StringBuffer stringBuffer = new StringBuffer(" ");
        // 2.循环字符串的所有字符
        for(int i = 0;i < str.length();i++){
            // 2.1 判断字符是否和指定字符一致
            if(str.charAt(i) != delChar){
                // 2.2 不一致的情况则 将值添加到stringBuffer中
                stringBuffer.append(str.charAt(i));
            }
        }
        // 3.返回结果
        return stringBuffer.toString();
    }

    /**
     * 3.合并福利标签中所有内容
     */
    public static String mergeString(
            String position, JSONArray company)
            throws JSONException {
        // 1.设置空字符串
        String result = "";
        // 2.判断标签的长度是否为0
        if(company.length() != 0){
            // 2.1循环遍历所有的福利标签
            for(int i = 0;i < company.length();i++){
                result = result + company.get(i)+"-";
            }
        }
        // 3.判断position是否为空
        if(position != ""){
            // 3.1 设置字符串数组
            String[] positionList =
                    position.split(" |;|,|、|,|;|/");
            // 3.2 循环遍历
            for(int i = 0;i < positionList.length;i++){
                result =
                        result + positionList[i].
                            replaceAll(
                                    "[\\pP\\p{Punct}]",
                                    "")+"-";
            }

        }
        return result.substring(0,result.length()-1);
    }
    /**
     * 4.处理技能标签
     */
    public static String killResult(
            JSONArray killData) throws JSONException {
        // 1.设置空字符串
        String result = "";
        // 2.判断killData是否为空
        if(killData.length() != 0){
            for(int i = 0;i < killData.length();i++){
                result = result + killData.get(i)+"-";
            }
            result = result.substring(0,result.length()-1);
        }
        return result;
    }


}

4 创建类 CleanMapper类  Mapreduce

package cn.edu.aust.clean;

import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.io.Text;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

import java.io.IOException;

/**
 * Mapreduce阶段的Mapper
 */
public class CleanMapper
        extends Mapper<LongWritable,Text,Text, NullWritable> {
    // 1.map方法
    @Override
    protected void map(LongWritable key, Text value,
                    Mapper<LongWritable, Text,
                    Text, NullWritable>.Context context)
            throws IOException, InterruptedException {
        // 1.设置空字符串
        String jobResultData = "";
        // 2.将每个数据文件的内容都转换为String类型
        String reptileData = value.toString();
        // 3.通过截取字符串的方式获取content中的数据
        String jobData = reptileData.substring(
                reptileData.indexOf("=",
                        reptileData.indexOf("=")+1)+1,
                reptileData.length()-1);

        try {
            // 4.将jobData转换为JSONObject对象
            JSONObject contentJson = new JSONObject(jobData);
            // 5.获取contentJson中的content数据
            String contentData =
                    contentJson.getString("content");
            // 6.获取content数据中positionResult中的数据内容
            JSONObject positionResultJson =
                    new JSONObject(contentData);
            // 7.获取positionResult数据
            String positionResultData =
                    positionResultJson.getString(
                            "positionResult");
            // 8.获取最终result中的数据内容
            JSONObject resultJson =
                    new JSONObject(positionResultData);
            JSONArray resultData =
                    resultJson.getJSONArray("result");
            // 9.将最终数据传递到CleanJob类中预处理
            jobResultData = CleanJob.resultToString(
                    resultData);
            // 10.将数据预处理后的内容写入到reduce中
            context.write(new Text(jobResultData),
                    NullWritable.get());
        } catch (JSONException e) {
            throw new RuntimeException(e);
        }

    }
}

5 创建类 CleanMain

package cn.edu.aust.clean;


import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;

import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.CombineTextInputFormat;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
import org.apache.log4j.BasicConfigurator;

import java.io.IOException;

public class CleanMain {
    public static void main(String[] args)
            throws IOException, InterruptedException,
            ClassNotFoundException {
        // 1.控制台输出日志
        BasicConfigurator.configure();
        // 2.初始化hadoop配置
        Configuration conf = new Configuration();
        // 3.从hadoop命令行读取参数
        String[] otherArgs  =
                new GenericOptionsParser(conf,args)
                        .getRemainingArgs();
        // 4.判断命令行读取的参数正常是两个
        // 正常是输入文件以及输出的文件目录
        if(otherArgs.length != 2){
            System.out.println("Usage:wordCount<in><out>");
            System.exit(2);
        }
        // 5.定义一个新的job,第一个参数是hadoop配置信息
        // 第二个参数是job的名字
        Job job = new Job(conf,"job");
        // 6.设置主类
        job.setJarByClass(CleanMain.class);
        // 7.设置mapper类
        job.setMapperClass(CleanMapper.class);
        // 8.处理小文件,默认是TextInputFormat.class
        job.setInputFormatClass(TextInputFormat.class);
        // 9.n个小文件之和不能大于2M
        CombineTextInputFormat.setMinInputSplitSize(
                job,2097152);// 2M
        // 10.n个小文件之和大于2M,情况下需要满足的条件,不能大于4M
        CombineTextInputFormat.setMaxInputSplitSize(
                job,4194304);// 4M
        // 11.设置job输出数据的key类
        job.setOutputKeyClass(Text.class);
        // 12.设置job输出数据的value类
        job.setOutputValueClass(NullWritable.class);
        // 13.设置输入文件
        FileInputFormat.setInputPaths(job,
                new Path(otherArgs[0]));
        // 14.设置输出文件
        FileOutputFormat.setOutputPath(job,
                new Path(otherArgs[1]));
        // 15.退出系统
        System.exit(
                job.waitForCompletion(true)?0:1);
    }
}

6 启动Hadoop集群(在hadoop101上)

# cd /opt/module/hadoop-3.1.3/sbin
# start-dfs.sh

7 启动yarn(在hadoop102上)

# cd /opt/module/hadoop-3.1.3/sbin 
# start-yarn.sh 

8 新建文件夹以及数据内容到hdfs上

http://hadoop101:9870
        上Utilitls===>Broser the system file 
        ===>新建/JobData/20240703/


        上传page1-page30

9 设置运行参数

idea右上角的播放按钮左边===>选择==>Edit....
        ===>点击左上角+==>选择Application
        ===>再选择Main class==>选择CleanMain
        ===>Name输入CleanMain
        ====>在Propam...===>输入以下内容
        hdfs://hadoop101:9820/JobData/20240703  D:\\JobData\\out


        
        完成之后  点击播放按钮执行代码

10 问题解决方案

新建包org.apache.hadoop.io.nativeio
       复制目录下类org.apache.hadoop.io.nativeio.NativeIo
       到该目录下

11 打包上传到software中

idea中右侧Maven标签==>Lifecycle===>package


        ===>双击package===>左侧项目结构中==>target
        ==>JobData-clean-1.0-SNAPSHOT.jar
        
        在hadoop101上 /opt/software目录中上传
        JobData-clean-1.0-SNAPSHOT.jar

12 执行数据预处理(在hadoop101上)

# cd /opt/software
        # hadoop jar JobData-clean-1.0-SNAPSHOT.jar
            cn.edu.aust.clean.CleanMain 
            /JobData/20240703
            /JobData/output


Day03:累趴。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1891607.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Webpack: 三种Chunk产物的打包逻辑

概述 在前文 Webpack: Dependency Graph 管理模块间依赖 中&#xff0c;我们已经详细讲解了「构建」阶段如何从 Entry 开始逐步递归读入、解析模块内容&#xff0c;并最终构建出模块依赖关系图 —— ModuleGraph 对象。本文我们继续往下&#xff0c;讲解在接下来的「封装」阶段…

全面解析自然语言处理(NLP):基础、挑战及应用前景

自然语言处理 (NLP) 简介与应用前景 自然语言处理&#xff08;NLP&#xff09;是人工智能和计算语言学的一个分支&#xff0c;致力于使计算机能够理解、解释和生成人类语言。这篇博文将深入探讨自然语言处理的基础知识、挑战、典型任务及其广泛的应用前景。 一、自然语言处理的…

路由的基本使用

1.安装 npm i vue-router3 2.引入 import VueRouter from vue-router 3.使用 Vue.use(VueRouter) 4.在src目录下创建router 5.创建两个组件 5.1创建About组件 <template><div> <h1>我是About的内容</h1></div> </template><script> …

计算机操作系统部分选填及大题整理

并发和&#xff08; 共享 &#xff09; 是操作系统的两个最基本的特征,&#xff08; 虚拟 &#xff09;和&#xff08; 异步 &#xff09; 是操作系统的重要特征&#xff0c;并发执行的程序失去可再现性现代操作系统的两个基本特征是&#xff08;程序的并发执行&#xff09;和资…

AC7801时钟配置流程

一 默认配置 在启动文件中&#xff0c;已经对时钟进行了初始化&#xff0c;默认按外部8M晶振&#xff0c;配置系统时钟为48MHZ&#xff0c;APB为系统时钟的2分频&#xff0c;为24MHZ。在system_ac780x.c文件中&#xff0c;可以找到下面这个系统初始化函数&#xff0c;里面有Se…

layui-表格

1.使用方法 加上table标签 加上classlayui-table colgroup是列属性 tr是行td是列 thead是表头&#xff0c;后面一一对应 2.基础属性 加lay-even逐行换色 加lay-skin 设置边框风格

windows上安装Frida环境

python安装 下载地址 Python Release Python 3.12.4 | Python.org python安装好后&#xff0c;使用如下命令安装frida客户端 pip install frida-tools 使用frida --version 查看frida版本 安装手机模拟器&#xff08;雷电模拟器&#xff09; 我的版本是4.0.61 查看CPU架构 adb …

昇思25天学习打卡营第15天 | Vision Transformer图像分类

内容介绍&#xff1a; 近些年&#xff0c;随着基于自注意&#xff08;Self-Attention&#xff09;结构的模型的发展&#xff0c;特别是Transformer模型的提出&#xff0c;极大地促进了自然语言处理模型的发展。由于Transformers的计算效率和可扩展性&#xff0c;它已经能够训练…

Cmake静态库与动态库的构建与使用

项目目录 各个文件 myhell.h // // Created by glt on 2024/7/3. //#ifndef MY_PRO_HELLO_H #define MY_PRO_HELLO_H#include <iostream>void HelloFunc();#endif //MY_PRO_HELLO_Hhello.cpp // // Created by glt on 2024/7/3. // #include "myhello.h"voi…

postman请求访问:认证失败,无法访问系统资源

1、使用postman时&#xff0c;没有传入相应的token&#xff0c;就会出现这种情况&#xff0c;此时需要把token放进去 发现问题: { "msg": "请求访问&#xff1a;/getInfo&#xff0c;认证失败&#xff0c;无法访问系统资源", "code": 401 } 1…

#数据结构 笔记一

数据结构是计算机存储、组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。数据结构是带有结构特性的数据元素的集合&#xff0c;它研究的是数据的逻辑结构和物理结构以及它们之间的相互关系&#xff0c;并对这种结构定义相适应的运算&#xff0c;…

Harbor简易安装

1.下载tgz 2.解压 3.修改配置文件 配置文件内容如下&#xff1a;简单粘个自己去改 4.harbor中执行安装 5.命令 启动&#xff1a; docker compose -f docker-compose.yml up -d关闭&#xff1a; docker compose -f docker-compose.yml stop 6.访问harbor 访问地址&#xff1a…

C语言 | Leetcode C语言题解之第214题最短回文串

题目&#xff1a; 题解&#xff1a; char* shortestPalindrome(char* s) {int n strlen(s);int fail[n 1];memset(fail, -1, sizeof(fail));for (int i 1; i < n; i) {int j fail[i - 1];while (j ! -1 && s[j 1] ! s[i]) {j fail[j];}if (s[j 1] s[i]) {f…

农村生活污水处理监测系统解决方案

一、概述 随着国民经济的发展和农村生活水平的提高&#xff0c;农村生活用水量越来越大&#xff0c;随之而来的污水产量也越来越大&#xff0c;农村生活污染对环境的压力越来越明显。环境保护意识的逐渐增强&#xff0c;使得人们对青山绿水的希望更为迫切&#xff0c;为满足人民…

nginx修改网站默认根目录及发布(linux、centos、ubuntu)openEuler软件源repo站点

目录 安装nginx配置nginx其它权限配置 安装nginx dnf install -y nginx配置nginx whereis nginxcd /etc/nginx llcd conf.d touch vhost.conf vim vhost.conf 命令模式下输入:set nu或:set number可以显示行号 复制如下内容&#xff1a; server {listen 80;server_name…

Python | 基于支持向量机(SVM)的图像分类案例

支持向量机&#xff08;SVM&#xff09;是一种监督机器学习算法&#xff0c;可用于分类和回归任务。在本文中&#xff0c;我们将重点关注使用SVM进行图像分类。 当计算机处理图像时&#xff0c;它将其视为二维像素阵列。数组的大小对应于图像的分辨率&#xff0c;例如&#xf…

Java项目:基于SSM框架实现的游戏攻略网站系统分前后台【ssm+B/S架构+源码+数据库+毕业论文+任务书】

一、项目简介 本项目是一套基于SSM框架实现的游戏攻略网站系统 包含&#xff1a;项目源码、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过严格调试&#xff0c;eclipse或者idea 确保可以运行&#xff01; 该系统功能完善、界面美观、操作简单、功能…

网络基础:OSPF 协议

OSPF&#xff08;Open Shortest Path First&#xff09;是一种广泛使用的链路状态路由协议&#xff0c;用于IP网络中的内部网关协议&#xff08;IGP&#xff09;。OSPF通过在网络中的所有路由器之间交换路由信息&#xff0c;选择从源到目的地的最优路径。OSPF工作在OSI模型的第…

HTTP入门

入门HTTP协议 1. 原理介绍 爬虫就是用程序模拟浏览器的行为&#xff0c;发送请求给服务器&#xff0c;获取网页的内容&#xff0c;解析网页数据。 要学会爬虫&#xff0c;先要了解浏览器是如何和服务器交流的。浏览器通过HTTP协议和服务器交流。 2. HTTP协议简介 2.1…

js三元图的画法图标是圆点

<div id"Plot" style"width:80%; margin-left:14%; height: calc(100% - 80px);"></div>var data {title: [甲苯, 乙苯, 苯],data: [{name: 工业过程/溶剂使用,mode: markers,a: [0.1, 0.2, 0.4, 0.6, 0.8],b: [0.6, 0.3, 0.4, 0.2, 0.1],c: …