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

news/2024/7/8 1:47:13 标签: 大数据, 服务器, Sqoop, maven, hadoop, intellij-idea, 预处理

一、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 {
    /**
     * 数据清洗结果
     * 将hdfs==>/JobData/20240703/page1....30
     * JSONs数据类型
     * @param jobdata
     *待处理的职位信息数据
     * @return
     */
    public static String resultToString(JSONArray jobdata) throws JSONException {
        //1.设置结果字符串
        String jobResultData = "";
        //2.循环遍历所有的职位信息数据
        for (int i = 0;i < jobdata.length();i++){
            String everyData = jobdata.get(i).toString();
            JSONObject everyDataJson =
                    new JSONObject(everyData);
            String city = everyDataJson.getString("city");
            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");
            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;
                //合肥,15000,“五险一金。。。”
            }else{
                jobResultData = jobResultData
                        +city+","
                        +salaryNew+","
                        +welfare+","
                        +kill+"\n";
            }
        }
        return jobResultData;
    }

    /**
     *2 删除字符串指定字符 10k-15k 删除k值
     * @param str
     * @param delChar
     * @return
     */
    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));
            }
        }

        return stringBuffer. toString();
    }
    /*
     *3删除福利标签中的所有内容
     */
    public static String mergeString(
            String position,JSONArray company)
            throws JSONException{
        String result = "";
        if (company.length()!=0){
            for(int i=0;i<company.length();i++){
                result =result +company.get(i)+"-";
            }
        }
        if(position != ""){
            String[] positionList =
                    position.split(" |;|,|、|,|;|/");
            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{
        String result = "";
        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.io.Text;
import org.codehaus.jettison.json.JSONObject;
import org.codehaus.jettison.json.JSONArray;
import org.codehaus.jettison.json.JSONException;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.IOException;

public class CleanMapper extends Mapper<LongWritable,Text,Text,NullWritable>{
    @Override
    public void map(LongWritable key, Text value,
                    Mapper<LongWritable,Text,
                            Text, NullWritable>.Context context)
            throws IOException,InterruptedException{
        String jobResultData = "";
        String reptileData = value.toString();
        String jobData = reptileData.substring(
                reptileData.indexOf("=",reptileData.indexOf("=")+1)+1,
                reptileData.length()-1);
        try {
            //4
            JSONObject contentJson = new JSONObject(jobData);
            //5
            String contentData =
                    contentJson.getString("content");
            //6
            JSONObject positionResultJson =
                    new JSONObject(contentData);
            //7
            String positionResultData =
                    positionResultJson.getString(
                            "positionResult"
                    );
            //8
            JSONObject resultJson =
                    new JSONObject(positionResultData);
            JSONArray resultData =
                    resultJson.getJSONArray("result");
            //9
            jobResultData = CleanJob.resultToString(
                    resultData);
            //10
            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.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, ClassNotFoundException, InterruptedException {
        // 控制台输出日志
        BasicConfigurator.configure();
        // 初始化hadoop配置
        Configuration conf = new Configuration();
        // 从hadoop命令行读取参数
        String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
        // 4.判断命令行读取的参数正常为两个
        if (otherArgs.length != 2) {
            System.err.println("Usage: clean <in> <out>");
            System.exit(2);
        }
        // 5.定义一个新的job,第一个参数是job配置信息,第二个参数是job的名字
        Job job = Job.getInstance(conf, "job");
        // 6.设置主类
        job.setJarByClass(CleanMain.class);
        // 7.设置mapper类
        job.setMapperClass(CleanMapper.class);
        // 8.处理小文件,默认是TextInputFormat.class
        job.setInputFormatClass(CombineTextInputFormat.class);
        // 9.n个小文件之和不能大于2M
        CombineTextInputFormat.setMinInputSplitSize(job, 2097152);
        // 10.n个小文件之和大于2M,情况下需要满足的条件,
        CombineTextInputFormat.setMaxInputSplitSize(job, 4194304);
        // 11.设置job输出数据的key类
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(NullWritable.class);
        // 12.设置输入和输出路径
        FileInputFormat.setInputPaths(job, new Path(otherArgs[0]));
        FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
        // 13.启动job
        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.niftyadmin.cn/n/5535935.html

相关文章

数据结构 —— 图的遍历

数据结构 —— 图的遍历 BFS&#xff08;广度遍历&#xff09;一道美团题DFS&#xff08;深度遍历&#xff09; 我们今天来看图的遍历&#xff0c;其实都是之前在二叉树中提过的方法&#xff0c;深度和广度遍历。 在这之前&#xff0c;我们先用一个邻接矩阵来表示一个图&#…

针对某客户报表系统数据库跑批慢进行性能分析及优化

某客户报表系统数据库跑批时间过长&#xff0c;超出源主库较多&#xff0c;故对其进行了分析调优&#xff0c;目前状态如下&#xff1a; 1、业务连接的rac的scanip&#xff0c;因为负载均衡将跑批的连接连接到了多个计算节点导致节点间通讯成本较高&#xff0c;故速率缓慢&…

【0292】Postgres内核源码之dynahash 查找实现

0. 前言 在【0291】Postgres内核之dynahash table 创建 一文中&#xff0c;从内核源码的实现角度讲解了Postgres创建dynahash的底层实现机制&#xff1b;本文将继续从内核角度分析Postgres dynahash find的实现原理。 1. dynahash find

Airflow: 大数据调度工具详解

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; 欢迎关注微信公众号&#xff1a;野老杂谈 ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&a…

AR视频技术与EasyDSS流媒体视频管理平台:打造沉浸式视频体验

随着增强现实&#xff08;AR&#xff09;技术的飞速发展&#xff0c;其在各个领域的应用日益广泛。这项技术通过实时计算摄影机影像的位置及角度&#xff0c;将虚拟信息叠加到真实世界中&#xff0c;为用户带来超越现实的感官体验。AR视频技术不仅极大地丰富了我们的视觉体验&a…

SAP 接口-银行账号主数据维护接口【MDM->SAP】开发说明书(包括测试样例、程序代码仅作参考,不保证一定可以运行)

接口映射字段 开发通用说明 根据MDM传输字段调用BAPI生成银行账号及开户行。 开户行维护BAPI【BAPI_BANK_CREATE】 银行账号维护BAPI【BAPI_FCLM_BAM_AMD_BNKANT】 接口字段【ZZZH 主账户标识】=1时字段【DTAAI】DME标识赋值:常用; 接口字段【ZZZH 主账户标识】=0时字段…

流批一体计算引擎-12-[Flink]旁路输出getSideOutput(OutputTag)实现拆分流和复制流

官网旁路输出 Flink拆分流和复制流 我们在处理数据的时候,有时候想对不同情况的数据进行不同的处理,那么就需要把流进行拆分或者复制。 如果是使用filter来进行拆分,也能满足我们的需求,但每次筛选都要保留整个流,然后遍历整个流,显然很浪费性能,假如能够在一个流了多次…

人工智能标准化与AI科技快速进步的矛盾

人工智能标准化与技术快速进步之间确实存在一定的矛盾&#xff0c;这主要体现在以下几个方面&#xff1a; 快速发展的技术与标准化的稳定性。人工智能技术以其快速的创新和进步而闻名。新的算法、模型和应用不断涌现&#xff0c;但标准化过程需要时间和广泛的共识&#xff0c;这…