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

一、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:累趴。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue3+vue-router+vite 实现动态路由

文章中出现的代码是演示版本&#xff0c;仅供参考&#xff0c;实际的业务需求会更加复杂 什么是动态路由 什么场景会用到动态路由 举一个最常见的例子&#xff0c;比如说我们要开发一个后台管理系统&#xff0c;一般来说后台管理系统都会分角色登录&#xff0c;这个时候也就涉…

基于Vue.js和SpringBoot的地方美食分享网站系统设计与实现

你好&#xff0c;我是计算机专业的学姐&#xff0c;专注于前端开发和系统设计。如果你对地方美食分享网站感兴趣或有相关需求&#xff0c;欢迎随时联系我。 开发语言 Java 数据库 MySQL 技术 Vue.js SpringBoot Java 工具 Eclipse, MySQL Workbench, Maven 系统展示…

【Spring Boot】关系映射开发(一):一对一映射

关系映射开发&#xff08;一&#xff09;&#xff1a;一对一映射 1.认识实体间关系映射1.1 映射方向1.2 ORM 映射类型 2.实现 “一对一” 映射2.1 编写实体2.1.1 新建 Student 实体2.1.2 新建 Card 实体 2.2 编写 Repository 层2.2.1 编写 Student 实体的 Repository2.2.2 编写…

AMEYA360代理:海凌科60G客流量统计雷达模块 4T4R出入口绊数计数

数字化时代&#xff0c;不管是大型商城还是各种连锁店&#xff0c;客流统计分析都可以帮助企业更加精准地了解顾客需求和消费行为。 海凌科推出一款专用于客流量统计的60G雷达模块&#xff0c;4T4R&#xff0c;可以实时进行固定范围内的人体运动轨迹检测&#xff0c;根据人体的…

0703_ARM7

练习&#xff1a; 封装exti&#xff0c;cic初始化函数 //EXTI初始化 void hal_key_exti_init(int id,int exticr,int mode){//获取偏移地址int address_offset (id%4)*8;//获取寄存器编号int re_ser (id/4)1;//printf("address_offset%d,re_ser%d\n",address_o…

学会python——用python编写一个电子时钟(python实例十七)

目录 1.认识Python 2.环境与工具 2.1 python环境 2.2 Visual Studio Code编译 3.电子时钟程序 3.1 代码构思 3.2代码实例 3.3运行结果 4.总结 1.认识Python Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 Python 的设计具有很强的可读性…

软件模型分类及特点

在软件开发的世界里&#xff0c;我们经常会遇到业务模型、系统模型和软件模型这三个层次。这些模型各有特点&#xff0c;相互之间也有着紧密的联系。通过理解这三个层次之间的映射关系&#xff0c;我们能更好地理解和掌握软件开发的全过程 1. 业务模型 业务模型描述了组织的业…

搜维尔科技:Xsens实时动作捕捉,驱动人形机器人操作!

搜维尔科技&#xff1a;http://www.souvr.comhttp://www.souvr.com实时动作捕捉&#xff0c;驱动人形机器人操作&#xff01; 搜维尔科技&#xff1a;Xsens实时动作捕捉&#xff0c;驱动人形机器人操作&#xff01;

方向导数和梯度

方向导数和梯度 1 导数的回忆2 偏导数及其向量形式偏导数的几何意义偏导数的向量形式 3 方向导数向量形式几何意义方向导数和偏导的关系 4 梯度5 梯度下降算法 1 导数的回忆 导数的几何意义如图所示&#xff1a; 当 P 0 P_{0} P0​点不断接近 P P P时&#xff0c;导数如下定义…

vue 中使用element-ui实现锚点定位表单

效果图&#xff1a; 代码&#xff1a; html代码&#xff1a; <div class"content-left"><el-tabs :tab-position"left" tab-click"goAnchor"><el-tab-pane v-for"(item,index) in anchorNameList"v-anchor-scroll:ke…

LeetCode 60.排序排列(dfs暴力)

给出集合 [1,2,3,...,n]&#xff0c;其所有元素共有 n! 种排列。 按大小顺序列出所有排列情况&#xff0c;并一一标记&#xff0c;当 n 3 时, 所有排列如下&#xff1a; "123""132""213""231""312""321" 给定…

基于RSA的数字签名设计与实现

闲着没事把大三的实验发一下 这里用的技术和老师要求的略有不同但大体相同 1. RSA算法简介 公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中出现的问题.另外,随着电子商务的发展,网络…

transformer模型学习路线_transformer训练用的模型

Transformer学习路线 完全不懂transformer&#xff0c;最近小白来入门一下&#xff0c;下面就是本菜鸟学习路线。Transformer和CNN是两个分支&#xff01;&#xff01;因此要分开学习 Transformer是一个Seq2seq模型&#xff0c;而Seq2seq模型用到了self-attention机制&#xf…

Python | Leetcode Python题解之第205题同构字符串

题目&#xff1a; 题解&#xff1a; class Solution:def isIsomorphic(self, s: str, t: str) -> bool:dicts Counter(s)dictt Counter(t) if list(dicts.values()) ! list(dictt.values()):return Falsefor i in range(len(s)):inds list(dicts.keys()).index(s…

【postgresql】 数据类型

数字类型 名字存储尺寸描述范围smallint2字节小范围整数-32768 ~32767integer4字节整数的典型选择-2147483648 ~ 2147483647bigint8字节大范围整数-9223372036854775808 ~ 9223372036854775807decimal可变用户指定精度&#xff0c;精确最高小数点前131072位&#xff0c;以及小…

python sklearn机械学习模型-回归

&#x1f308;所属专栏&#xff1a;【机械学习】✨作者主页&#xff1a; Mr.Zwq✔️个人简介&#xff1a;一个正在努力学技术的Python领域创作者&#xff0c;擅长爬虫&#xff0c;逆向&#xff0c;全栈方向&#xff0c;专注基础和实战分享&#xff0c;欢迎咨询&#xff01; 您…

使用SpringBoot整合Servlet

一、SpringBoot和Servlet的整合 1、用注解WebServlet配置Servlet映射 创建一个SpringBoot的web工程&#xff0c;在工程用创建一个Servlet 2、在SpringBoot的启动类上加注解ServletComponentScan 二、额外的方式 1、不使用WebServlet配置Servlet映射 创建一个SpringBoot工…

数据资产治理的智能化探索:结合云计算、大数据、人工智能等先进技术,探讨数据资产治理的智能化方法,为企业提供可靠、高效的数据资产解决方案,助力企业提升竞争力

一、引言 在信息化时代&#xff0c;数据已成为企业最重要的资产之一。随着云计算、大数据、人工智能等先进技术的飞速发展&#xff0c;数据资产治理面临着前所未有的机遇与挑战。本文旨在探讨如何结合这些先进技术&#xff0c;实现数据资产治理的智能化&#xff0c;为企业提供…

零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

接前一篇文章&#xff1a;零知识学习之DPDK与RDMA&#xff08;2&#xff09;—— 认识DPDK&#xff08;2&#xff09; 本文内容参考&#xff1a; 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 https://blog.51cto.com/u_15301988/5181201 特此致谢&…

微软账户和本地账户有什么区别?如何切换登录账户?

Windows 操作系统是目前世界上比较流行的操作系统之一&#xff0c;在使用 Windows 系统的时候都需要我们进行登录&#xff0c;其中我们可以使用微软账户或者本地账户进行登录&#xff0c;那本地账户和微软账户有什么区别&#xff1f;下面就带大家了解一下微软账户和本地账户。 …