「java写avro」安卓是java写的吗
今天给各位分享java写avro的知识,其中也会对安卓是java写的吗进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、java 中有什么好的方法向服务器上传大量数据
- 2、java 实现网络爬虫用哪个爬虫框架比较好
- 3、httpclient怎么调用avro
- 4、string类型的Avro模式
- 5、大数据是不是特别难学,都要学哪些内容,有知道的吗?
- 6、如何将java对象转成parquet文件
java 中有什么好的方法向服务器上传大量数据
xml/json都差不多,处理起来也差不多。但是json占的资源要比xml少一半以上,现在google用的一个什么buf也蛮不错的,不记得了,apache 的avro 给的传送的东西做序列化,效率更好
java 实现网络爬虫用哪个爬虫框架比较好
有些人问,开发网络爬虫应该选择Nutch、Crawler4j、WebMagic、scrapy、WebCollector还是其他的?这里按照我的经验随便扯淡一下:
上面说的爬虫,基本可以分3类:
1.分布式爬虫:Nutch
2.JAVA单机爬虫:Crawler4j、WebMagic、WebCollector
3. 非JAVA单机爬虫:scrapy
第一类:分布式爬虫
爬虫使用分布式,主要是解决两个问题:
1)海量URL管理
2)网速
现在比较流行的分布式爬虫,是Apache的Nutch。但是对于大多数用户来说,Nutch是这几类爬虫里,最不好的选择,理由如下:
1)Nutch是为搜索引擎设计的爬虫,大多数用户是需要一个做精准数据爬取(精抽取)的爬虫。Nutch运行的一套流程里,有三分之二是为了搜索引擎而设计的。对精抽取没有太大的意义。也就是说,用Nutch做数据抽取,会浪费很多的时间在不必要的计算上。而且如果你试图通过对Nutch进行二次开发,来使得它适用于精抽取的业务,基本上就要破坏Nutch的框架,把Nutch改的面目全非,有修改Nutch的能力,真的不如自己重新写一个分布式爬虫框架了。
2)Nutch依赖hadoop运行,hadoop本身会消耗很多的时间。如果集群机器数量较少,爬取速度反而不如单机爬虫快。
3)Nutch虽然有一套插件机制,而且作为亮点宣传。可以看到一些开源的Nutch插件,提供精抽取的功能。但是开发过Nutch插件的人都知道,Nutch的插件系统有多蹩脚。利用反射的机制来加载和调用插件,使得程序的编写和调试都变得异常困难,更别说在上面开发一套复杂的精抽取系统了。而且Nutch并没有为精抽取提供相应的插件挂载点。Nutch的插件有只有五六个挂载点,而这五六个挂载点都是为了搜索引擎服务的,并没有为精抽取提供挂载点。大多数Nutch的精抽取插件,都是挂载在“页面解析”(parser)这个挂载点的,这个挂载点其实是为了解析链接(为后续爬取提供URL),以及为搜索引擎提供一些易抽取的网页信息(网页的meta信息、text文本)。
4)用Nutch进行爬虫的二次开发,爬虫的编写和调试所需的时间,往往是单机爬虫所需的十倍时间不止。了解Nutch源码的学习成本很高,何况是要让一个团队的人都读懂Nutch源码。调试过程中会出现除程序本身之外的各种问题(hadoop的问题、hbase的问题)。
5)很多人说Nutch2有gora,可以持久化数据到avro文件、hbase、mysql等。很多人其实理解错了,这里说的持久化数据,是指将URL信息(URL管理所需要的数据)存放到avro、hbase、mysql。并不是你要抽取的结构化数据。其实对大多数人来说,URL信息存在哪里无所谓。
6)Nutch2的版本目前并不适合开发。官方现在稳定的Nutch版本是nutch2.2.1,但是这个版本绑定了gora-0.3。如果想用hbase配合nutch(大多数人用nutch2就是为了用hbase),只能使用0.90版本左右的hbase,相应的就要将hadoop版本降到hadoop 0.2左右。而且nutch2的官方教程比较有误导作用,Nutch2的教程有两个,分别是Nutch1.x和Nutch2.x,这个Nutch2.x上写的是可以支持到hbase 0.94。但是实际上,这个Nutch2.x的意思是Nutch2.3之前、Nutch2.2.1之后的一个版本,这个版本在官方的SVN中不断更新。而且非常不稳定(一直在修改)。
所以,如果你不是要做搜索引擎,尽量不要选择Nutch作为爬虫。有些团队就喜欢跟风,非要选择Nutch来开发精抽取的爬虫,其实是冲着Nutch的名气(Nutch作者是Doug Cutting),当然最后的结果往往是项目延期完成。
如果你是要做搜索引擎,Nutch1.x是一个非常好的选择。Nutch1.x和solr或者es配合,就可以构成一套非常强大的搜索引擎了。如果非要用Nutch2的话,建议等到Nutch2.3发布再看。目前的Nutch2是一个非常不稳定的版本。
httpclient怎么调用avro
例如如下XML,其中 requestSource...之类的字符串是经过加工处理之后的,用于POJO类对象的参数替换。
soapenv:Envelope xmlns:soapenv="" xmlns:mom=""
soapenv:Header/
soapenv:Body
mom:MT_MOMServiceRequestCount
MOMServiceRequestCountRequest
MOMServiceRequestCount
RequestSourcerequestSource/RequestSource
RequestTargetrequestTarget/RequestTarget
RequestUserrequestUser/RequestUser
RequestTimerequestTime/RequestTime
RequestTyperequestType/RequestType
UserCodeuserCode/UserCode
UserNumberuserNumber/UserNumber
/MOMServiceRequestCount
/MOMServiceRequestCountRequest
/mom:MT_MOMServiceRequestCount
/soapenv:Body
/soapenv:Envelope
处理通过SOAP-UI工具能获得POST-DATA外,还需要知道 SOAP-PATH,因为这才是要发送数据的WEB-SERVER的处理端点地址。例如:
;senderService=BC_MOMreceiverParty=receiverService=interface=SI_MOMServiceRequestCount_OutinterfaceNamespace=http%3A%2F%2Fyutong.com%2Fesb%2Fmom%2Fcrm%2FMOMServiceRequestCount
有了这两个数据,基本上能调用WEB-SERVICE 了。
下面是具体的CODE:
package com.yutong.mom.util;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.Reader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Date;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.StringRequestEntity;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.Namespace;
import org.jdom.input.SAXBuilder;
import bsh.EvalError;
import bsh.Interpreter;
import com.yutong.mom.soapbean.model.SoapBeanScriptInfo;
import com.yutong.mom.vo.SoapBeanScriptMap;
import com.yutong.mom.vo.WebServiceConfigInfo;
public class CallWebServiceUtil {
private SoapBeanScriptMap soapBeanScriptMap;
private WebServiceConfigInfo webServiceConfigInfo;
private HttpClient httpClient = new HttpClient();
private Interpreter interpreter = new Interpreter();
private PostMethod postMethod;
private String faultError = "{operationFlag:'F',errorMsg:'";
public String callWebService(String serviceId,String strJson,MapString,String soapParameter)
{
String rtVal = "";
try
{
SoapBeanScriptInfo scriptInfo = soapBeanScriptMap.getSoapBeanScript(serviceId);
String soapPath = scriptInfo.getSoapPath();
soapPath = appendPIUserInfo(soapPath);
String soapRequestData = scriptInfo.getSoapData();
soapRequestData = injectSoapData(soapRequestData,soapParameter);
if(false)
{
URL wsUrl = new URL(soapPath);
HttpURLConnection conn = (HttpURLConnection) wsUrl.openConnection();
conn.setDoInput(true);// 有输入
conn.setDoOutput(true);// 有输出
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "text/xml;charset=utf-8");
conn.setRequestProperty("Content-Length", Integer.toString(soapRequestData.length()));
//conn.setRequestProperty("SOAPAction","");
OutputStream os = conn.getOutputStream();
os.write(soapRequestData.getBytes("UTF-8"));
int statusCode = conn.getResponseCode();
if (statusCode == 200) {
InputStream is = conn.getInputStream();
byte[] b = new byte[8192];
int len = 0;
String soapResponseData = "";
while ((len = is.read(b)) != -1) {
soapResponseData += new String(b, 0, len, "UTF-8");
}
soapResponseData = "?xml version='1.0' encoding='GBK'?"+soapResponseData;
rtVal = parseResponse(soapResponseData,scriptInfo);
os.close();
is.close();
conn.disconnect();
}
else
{
rtVal = faultError+"调用失败!错误码:" + statusCode+"'}";
String soapResponseData = postMethod.getResponseBodyAsString();
System.out.println(soapResponseData);
}
}
else
{
postMethod = new PostMethod(soapPath);
StringRequestEntity requestEntity = new StringRequestEntity(soapRequestData,"application/soap+xml; charset=GBK; type=\"text/xml\"","GBK");
postMethod.setRequestEntity(requestEntity);
//int statusCode = httpClient.executeMethod(postMethod);
Date invokeDate = new Date();
int statusCode = httpClient.executeMethod(postMethod);
Date afterVoke = new Date();
Long startTime = invokeDate.getTime();
Long endTime = afterVoke.getTime();
Long diff = endTime - startTime;
System.out.println("---------spend-----"+diff);
if (statusCode == 200) {
String soapResponseData = postMethod.getResponseBodyAsString();
soapResponseData = "?xml version='1.0' encoding='GBK'?"+soapResponseData;
//soapResponseData = new String(soapResponseData.getBytes("UTF-8"));
//System.out.println(soapResponseData);
rtVal = parseResponseUserDom4j(soapResponseData,scriptInfo);
//rtVal = parseResponse(soapResponseData,scriptInfo);
} else {
rtVal = faultError+"调用失败!错误码:" + statusCode+"'}";
strJson+="operationFlag:'"+nodeValue+"',";
}
else if(nodeName.equals("Return_Value") !nodeValue.trim().equals(""))
{
strJson+="errorMsg:"+nodeValue+",";
}
else if(nodeName.equals("PageTotal"))
{
strJson+="pageTotal:"+nodeValue+",";
}
else if(nodeName.equals("PageNumber"))
{
strJson+="pageNumber:"+nodeValue+",";
}
else if(nodeName.equals("PageItem"))
{
strJson+="pageItem:"+nodeValue+",";
}
else if(nodeName.equals("BusDetails"))
{
List busDetails = ele.elements();
datas = "datas:[";
for(Iterator itInner= busDetails.iterator(); itInner.hasNext();)
{
org.dom4j.Element busDetailEle = (org.dom4j.Element) itInner.next();
List detailNodes = busDetailEle.elements();
String innerObjJson = "{";
for(Iterator itInner2= detailNodes.iterator(); itInner2.hasNext();)
{
org.dom4j.Element busDetailNode = (org.dom4j.Element) itInner2.next();
String innerNodeName = busDetailNode.getName();
String innerNodeValue= busDetailNode.getText();
if(innerNodeName.equals("BusCode"))
{
innerObjJson+="busCode:'"+innerNodeValue+"',";
}
else if(innerNodeName.equals("BusPlate"))
{
innerObjJson+="busPlate:'"+innerNodeValue+"',";
}
else if(innerNodeName.equals("PurchaseDate"))
{
innerObjJson+="purchaseDate:'"+innerNodeValue+"',";
}
else if(innerNodeName.equals("BusType"))
{
innerObjJson+="busType:'"+innerNodeValue+"',";
}
}
innerObjJson = innerObjJson.substring(0,innerObjJson.length()-1);
innerObjJson+= "},";
datas += innerObjJson;
}
datas = datas.substring(0,datas.length()-1);
datas += "]";
}
}
strJson += datas;
strJson += "}";
rtVal = strJson;
*
public void setSoapBeanScriptMap(SoapBeanScriptMap soapBeanScriptMap) {
this.soapBeanScriptMap = soapBeanScriptMap;
}
public WebServiceConfigInfo getWebServiceConfigInfo() {
return webServiceConfigInfo;
}
public void setWebServiceConfigInfo(WebServiceConfigInfo webServiceConfigInfo) {
this.webServiceConfigInfo = webServiceConfigInfo;
}
}
其实,后来发现使用 BEAN-SHELL 解析的方式,也不是很完美,因为BEAN-SHELL进行XML解析的逻辑处理代码我存放到了数据库中,每当业务逻辑发生变化,该处理代码页必须跟着调整。
后来想到了更好的解决思路:把 解析XML数据的代码应该通过Interface来抽象出来,然后程序可以通过ClassLoader 的相关类来动态加载 处理解析XML响应数据的类信息。这样做的好处:比使用BEAN-SHELL的代码效率高,另外该CLASS-LOADER加载 .class 文件的方式也多种多样,提供了部署灵活性。
string类型的Avro模式
纯编程模式。在JAVA中的string类型中Avro是最受欢迎的模式,为纯编程模式,Avro模式只支持二进制编码和JSON编码两种序列化方式,全部采用编程语言,序列化方法为深度优先,从左到右遍历,对于编程高手来说非常方便。
大数据是不是特别难学,都要学哪些内容,有知道的吗?
大数据专业难度较大,建议本科毕业后再学,主要课程内容包括6大模块:
①java:一门面向对象的计算机编程语言,具有功能强大和简单易用两个特征。
②spark:专为大规模数据处理而设计的快速通用的计算引擎。
③SSM:常作为数据源较简单的web项目的框架。
④Hadoop:分布式计算和存储的框架,需要有java语言基础。
⑤spring cloud:一系列框架的有序集合,他巧妙地简化了分布式系统基础设施的开发。
⑤python:一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
个人整理的大数据视频课
你可以考察对比一下南京课工场、北大青鸟、中博软件学院等开设有大数据专业的学校。祝你学有所成,望采纳。
北大青鸟中博软件学院大数据课堂实拍
如何将java对象转成parquet文件
把文本文件 直接转 parquet
可以跳过不符合条件的数据,只读取需要的数据,降低IO数据量
压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码(例如Run Length Encoding和Delta Encoding)进一步节约存储空间
只读取需要的列,支持向量运算,能够获取更好的扫描性能
Parquet就是基于Google的Dremel系统的数据模型和算法实现的。核心思想是使用“record shredding and assembly algorithm”来表示复杂的嵌套数据类型,同时辅以按列的高效压缩和编码技术,实现降低存
与Avro之前新统计系统的日志都是用Avro做序列化和存储,鉴于Parquet的优势和对Avro的兼容,将HDFS上的存储格式改为Paruqet,并且只需做很小的改动就用原读取Avro的API读取Parquet,以提高近一个数量级。
Parquet文件尾部存储了文件的元数据信息和统计信息,自描述的,方便解析
关于java写avro和安卓是java写的吗的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。