实习项目之(一)ETL过程的简单手动实现

微博数据ETL

项目角色: 核心研发 开发组人员: 3

工作内容:

通过javase解析、结构化源数据并load到hive数据仓库中,并使用hivesql、数据分析函数进行活跃度、影响力排行等分析工作。

 

一、项目简介

这个项目是自己在实习期间参与的第一个项目,我们的数据来源于

公司内部的爬虫部门,整个ETL过程是自己手写的UDF函数完成的

涉及到IO读取,正则匹配,以指定格式输出(利用面向对象的思

想,将指定的格式封装成对应的属性的对象,List),我们当时的研

究对象是新浪微博数据的一个主题下的评论区的内容,经过这个过

程呢,格式化就结束了,加载到数据仓库中,这个ETL过程就算初

步OK了。

二、相关内容

 

1.javase部分

解决项目的基层java开发部分的目录要搭建好:

咱们这个里面也是四层Controller、Manager、Pojos、Utils

挨个解决完成所要起到的功能

先从基层搭起来:我们要读文件,那么Utils里必有IOUtil

问题来了,读文件,文件从哪来,从传过来的路径来

那么路径里面的文件呢,所以还要搞一个拿出路径下所有

文件的FileOperatorUtil类

那么就来具体搞一搞看看咋搞这个FileOperatorUtil类

代码奉上:

public static List getrAllFileFromFolder(String FilePath){

if(FilePath==null||FilePath.trim().length()==0){

System.out.println("输入路径不存在");

return null;

}

File filepath=new File(FilePath) ;

List allFile=new ArrayList();

if(filepath.isDirectory()){

//对filepath进行遍历,默认的给我遍历allfile去了

for (File file : filepath.listFiles()) {

allFile.addAll(getrAllFileFromFolder(file.toString()));

}

}else

{;

allFile.add(filepath.toString());

}

return allFile;

}

精髓就在这句红色话,我在这儿错了好几次了:

allFile.addAll(getrAllFileFromFolder(file.toString()));

好的,到此,这个方法就算是搞定了

 

搞到这里就该要考虑后面的问题了,整出来了文件还不行,这文件很特殊啊,

文件的名字都是由uid构成的,所以拿到info文件和comment文件的关系就从uid入手啊

 

解决名字问题那就写个只拿出来名字的方法呗

//咱们要拿出文件夹里面的uid,所以要去掉名字里面的txt

public static String getAllFileNameWithoutTXT(String inputpath){

return new File(inputpath).getName().split("\\.")[0];

}

技惊四座啊,兄弟 直接一句话搞定,调用file的getname方法拿到文件名

然后切割只要 . 前面的就把txt给去掉了

到此,FileOperatorUtil算是初步完成了,如果还有别的需要补充的问题,再继续修整

其余的地方呢,比较经典的代码部分就应该是IOUtil类中,向指定文件写出一个list集合形式呢内容到其中,贴一下

//将读进来的不规则的形式对象要写出到文件中,所以要有向文件写的方法

public static void writeListContentToFile(List list,String outputpath,String charset) throws Exception{

//将拿出来的内容写入到具体的文件中去

OutputStream os=new FileOutputStream(outputpath);

OutputStreamWriter osw=new OutputStreamWriter(os,charset);

BufferedWriter bw=new BufferedWriter(osw);

int counter=0;

for (String string : list) {

if(counter>0){

bw.newLine();

}

bw.write(string);

counter++;

}

bw.close();

}

(1)load数据的sql语句:

load data local inpath inpathname overwrite into table tablename;

(2)hivesql与mysql的区别

在sql语句方面:hive中不支持delete和update等操作

 

(3)名词解析

活跃度:一般是指线上产品的用户在线时长以及登录频次

影响力:影响力是用一种别人所乐于接受的方式,改变他人的思想和行动的能

力。

(4)关于ETL工具

了解过 kettle,但是并未有过具体使用。

业界最有名的开源ETL工具。开源当然就免费,免费的有些东西使用就不是很方便

下载地址:http://kettle.pentaho.com/

三、涉及的坎儿

1.里面涉及到的转换

 

2.这里面用到了hive,优化hive

 

3.用索引应该怎么用,索引的几种建立方式

 命令行-自查

 

常用的两种索引创建方式:

(1)CREATE INDEX index_name ON table_1(filed_1);

(2)ALTER TABLE table_1 ADD INDEX(field_1);

区别

1.使用CREATE创建索引必须提供索引名称,而ALTER方式可以不提供则MySQL会自动为你创建索引名称,如果想使用ALTER方式自定义创建索引名称,可以类似如下SQL语句:

1.mysql> ALTER TABLE table_1 ADD INDEX index_name(field_1,field_2);

2.CREATE 方式创建索引,一次只能创建一个索引。ALTER方式可以一次创建多个索引,类似如下SQL语句:

mysql> ALTER TABLE table_1 ADD PRIMARY KEY(id), ADD INDEX index_name_1(field_1,field_2), ADD IND

 

 web ui client 创建

实习项目之(一)ETL过程的简单手动实现_第1张图片

 

里面有个设计表,就可以建立索引了

4.数据重跑及相关的东西

 

实习项目之(一)ETL过程的简单手动实现_第2张图片

Aupa Atleti!

---------后续待继续学习补充,

 

你可能感兴趣的:(实习项目之(一)ETL过程的简单手动实现)