- 项目说明
根据采集工程师实时爬取到的微博数据,实时传输到数据接收服务平台,形成微博博文数据,构建,基于该微博平台实时数据的相应数据仓库,同时做好相应的数据监控工作,用于及时发现数据潜在问题,例如数据暴增骤减等情况,以及其他潜在数据开发需求
具体需求说明
- 构建实时数据流仓库
以小时为单位,构架小时级的实时数流数据仓库 - 数据监控工作
以天和小时数据为维度,来做数据记录数据维度的分钟级,小时级,天级监控,最后通过echarts进行实时变化的曲线图,进行可视化展示
Product Requirement Docunment
从业务逻辑角度,讲清楚,如何做,
持续提供具有时间连续性,时间有序性的数据流,文章总数不低于100w条,实际给出2.2亿条数据
数据格式:csv
将数据流纳入实时数据流疫情处理分析,得到如上需求所需要的数据源
将实时数据流落地,攻坚hive微博小时级实时数据仓库
并对试试数据流进行分钟级,小时级别,天级别的监控,将数据实时上报到关系型数据库
将数据推送到mysql/hbase指定表格中
搭建java web项目,在前段页面中调用后端数据接口,将数据返回到前端中
在前段调用绘图插件,并展示
明确阶段目标和验收标准
风险控制与过程管理
2需求说明书
3.技术方案
4.技术问题
1.Linux curl :简易无头浏览器,使用curl + url地址直接请求
2.http get和post请求的区别
Get是通过http header传递的,存在数据大小的限制,默认最大是64k,而且是明文可以捕捉,post是http data主题传输,不存在数据大小限制,而且是隐式传递,更安全一些
3.linux解决数据循环读取问题
4.url base64乱码问题
Maven依赖,注意导包导入apache.commons的包,不要导入util的包
commons-codec commons-codec 1.10Maven中依赖管理
Exception in thread “main” java.lang.NoClassDefFoundError: org/apache/commons/codec/binary/Base64
at store.wtx.UrlBase64Util.encode(UrlBase64Util.java:7)
at store.wtx.ConsoleReadManager.main(ConsoleReadManager.java:17)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.codec.binary.Base64
at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
打包时仅仅只打了源码包,依赖没有打导致的缺失依赖,配置一下 即可
<!-- 项目构建配置 -->
<build>
<finalName>Base64Util</finalName>
<plugins>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
5.linux输出重定向问题
管道符+awk 或者while read line;do echo done
当要读取控制台系统输出的时候,如果不是完整一行,或者说是标准一行,会造成awk等工具处理的等待,其需要等待标准一行的输入,才可以处理
所以不管是重定向>到文件中还是|wc -l都无法读取
Base64处理完后一定要println处理
如果是print处理,则都不是完整一行无法处理
6.url请求问题
curl -X POST --data-urlencode “data=$data” $receiver_service_url
标准http请求要用data-urlencode数据格式而不能用data-ascii编码,这样会导致乱码,默认是使用urlencide编码
7.shell截取字符串问题
创建变量,使用变量:0:1截取,一个冒号是要第一个变量,两个冒号是要字符下标从几开始到几结束的值
如此问题解决
5.技术栈总结
Java base64(apach-commen)
Java KafkaAPI
Hadoop Hive
Spring-boot
Linux:技术栈
-
curl 无头浏览器
-
awk编程 |awk -F ‘\001’ {‘print $x’} 如果有按照规则切分则 $x为第几个变量,如果没有切分则$0就是全部本行输出
-
${变量❌x}变量截取字符串
-
循环读取控制台输出:while read line;do echo $line done
-
判断文件是否存在: if [ -f “./data.txt” ];then fi
-
输出重定向
“>” :输出重定向的一个文件,覆盖原来的文件
“>>”:输出重定向到一个文件,追加到原来的文件
标准 输出 重定向
1> 等于 >
当输入的命令是错误的日志时,不会重定向到指定文件
错误输出重定向:
2> :把错误的输出日志重定向到指定文件里,正确的不会
输出到黑洞
ls >/dev/null