要读取的文件为:/user/hdfs/stdin.xml

<?xml version="1.0" encoding="UTF-8"?>
<request>
<jobinstanceid>SK9cohJD4yklcD8dJuZXDA</jobinstanceid>
<context>
<property name="userName" value="xdf"/>
<property name="queueName" value="queue1"/>
<property name="processId" value="dns"/>
<property name="jobId" value="jobID"/>
<property name="hiveServerAddress" value="IP:port "/>
<property name="databaseName" value="wx"/>
<property name="basePath" value="HDFS_BasePath1/20141216/jobinstanceid/${operator.name}"/>
</context> <operator name="convert" alias="lowerUpperCaseConvert" class="lowerUpperCaseConvert">
<parameterlist name="fields">
<parametermap fieldname="name" fieldvalue="m_uuid()" fieldtype="String"/>
</parameterlist>
</operator>
<datasets>
<dataset name="inport1">
<row>default.test1</row>
</dataset>
</datasets>
</request>

要存的文件为:/user/hdfs/stdin.xml

<?xml version="1.0" encoding="UTF-8"?>

<response>
<jobinstanceid>SK9cohJD4yklcD8dJuZXDA</jobinstanceid>
<datasets>
<dataset name="outport1">
<row>default.tmp_e93eba2c_f22d_4dc1_9e86_a342a0ea0625</row>
</dataset>
</datasets>
<operatortracker>
<portcounter name="inport1" dataCount="4"/>
<portcounter name="outport1" dataCount="4"/>
</operatortracker>
</response>

读stdin.xml文件的实现如下:

public List<Map> parseStdinXml(String xmlParams) throws Exception {

		String userName = null;
String operatorName = null;
String dbName = null;
String inputTabName = null;
String strs = null;
String fieldName = null;
String fieldType = null;
String jobinstanceid = null;
int fieldCount = 0; List<Map> list = new ArrayList<Map>();
Map<String, String> map = new HashMap<String, String>();
Document document = DocumentHelper.parseText(xmlParams); // 将字符串转化为xml
Element node1 = document.getRootElement(); // 获得根节点
Iterator iter1 = node1.elementIterator(); // 获取根节点下的子节点
while (iter1.hasNext()) {
Element node2 = (Element) iter1.next(); // 获取jobinstanceid
if ("jobinstanceid".equals(node2.getName())) {
jobinstanceid = node2.getText();
map.put("jobinstanceid", jobinstanceid);
}
// 获取通用参数
if ("context".equals(node2.getName())) {
Iterator iter2 = node2.elementIterator();
while (iter2.hasNext()) {
Element node3 = (Element) iter2.next();
if ("property".equals(node3.getName())) {
if ("userName".equals(node3.attributeValue("name"))) {
userName = node3.attributeValue("value");
}
}
map.put("userName", userName);
}
} // 获取算子参数
if ("operator".equals(node2.getName())) {
operatorName = node2.attributeValue("name");
map.put("operatorName", operatorName);
Iterator iter2 = node2.elementIterator();
while (iter2.hasNext()) {
Element node3 = (Element) iter2.next();
if ("parameterlist".equals(node3.getName())) {
if ("fields".equals(node3.attributeValue("name"))) {
Iterator iter3 = node3.elementIterator();
while (iter3.hasNext()) {
Element node4 = (Element) iter3.next();
if ("parametermap".equals(node4.getName())) {
fieldName = node4
.attributeValue("fieldname");
fieldType = node4
.attributeValue("fieldtype");
fieldCount++;
map.put("fieldName" + fieldCount, fieldName);
map.put("fieldType" + fieldCount, fieldType);
}
}
}
}
}
map.put("fieldCount", Integer.toString(fieldCount));
}
// 获取输入数据库
if ("datasets".equals(node2.getName())) {
Iterator iter2 = node2.elementIterator();
while (iter2.hasNext()) {
Element node3 = (Element) iter2.next();
if ("inport1".equals(node3.attributeValue("name"))) {
Iterator iter3 = node3.elementIterator();
while (iter3.hasNext()) {
Element node4 = (Element) iter3.next();
strs = node4.getText();
}
}
if (!"".equals(strs.trim())) {
String[] arr = strs.split("\\.");
dbName = arr[0];
inputTabName = arr[1];
}
map.put("dbName", dbName);
map.put("inputTabName", inputTabName);
}
}
}
list.add(map);
return list;
}

存stdout.xml文件的实现如下:

public void genStdoutXml(String fileName, List<Map> listOut) {

		String jobinstance = null;
String dbName = null;
String outputTable = null;
String outputDataCount = null;
String inputDataCount = null; dbName = listOut.get(0).get("dbName").toString();
jobinstance = listOut.get(0).get("jobinstanceid").toString();
outputTable = listOut.get(0).get("outputTable").toString();
inputDataCount = listOut.get(0).get("inputDataCount").toString();
outputDataCount = listOut.get(0).get("outputDataCount").toString(); Document document = DocumentHelper.createDocument();
Element response = document.addElement("response");
Element jobinstanceid = response.addElement("jobinstanceid");
jobinstanceid.setText(jobinstance);
Element datasets = response.addElement("datasets");
Element dataset = datasets.addElement("dataset");
dataset.addAttribute("name", "outport1");
Element row = dataset.addElement("row");
row.setText(dbName + "." + outputTable);
Element operatortracker = response.addElement("operatortracker");
Element portcounter1 = operatortracker.addElement("portcounter");
portcounter1.addAttribute("name", "inport1");
portcounter1.addAttribute("dataCount", inputDataCount);
Element portcounter2 = operatortracker.addElement("portcounter");
portcounter2.addAttribute("name", "outport1");
portcounter2.addAttribute("dataCount", outputDataCount); try {
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(fileName), conf);
OutputStream out = fs.create(new Path(fileName),
new Progressable() {
public void progress() {
}
});
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("UTF-8");
XMLWriter xmlWriter = new XMLWriter(out, format);
xmlWriter.write(document);
xmlWriter.close();
} catch (IOException e) {
System.out.println(e.getMessage());
} }

在hdfs上存取xml文件的实现代码的更多相关文章

  1. Java读写hdfs上的avro文件

    1.通过Java往hdfs写avro文件 import java.io.File; import java.io.IOException; import java.io.OutputStream; i ...

  2. Delphi调用JAVA的WebService上传XML文件(XE10.2+WIN764)

    相关资料:1.http://blog.csdn.net/luojianfeng/article/details/512198902.http://blog.csdn.net/avsuper/artic ...

  3. hadoop(十)hdfs上传删除文件(完全分布式七)|12

    集群测试 上传小文件到集群,随便选择一个小文件上传到hdfs的根目录 [shaozhiqi@hadoop102 hadoop-3.1.2]$ bin/hdfs dfs -put wcinput/wc. ...

  4. python读取hdfs上的parquet文件方式

    在使用python做大数据和机器学习处理过程中,首先需要读取hdfs数据,对于常用格式数据一般比较容易读取,parquet略微特殊.从hdfs上使用python获取parquet格式数据的方法(当然也 ...

  5. 使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...

  6. Android color(颜色) 在XML文件和java代码中

    Android color(颜色) 在XML文件和java代码中,有需要的朋友可以参考下. 1.使用Color类的常量,如: int color = Color.BLUE;//创建一个蓝色 是使用An ...

  7. XML文件生成C++代码(基于rapidxml)

    简述 与XML文件生成C++代码(基于pugixml)中的功能一致,只是这里改用的rapidxml来实现.就不多说了,直接放代码. 代码 #include "rapidxml-1.13/ra ...

  8. 使用SAXReader读取ftp服务器上的xml文件(原创)

    根据项目需求,需要监测ftp服务器上的文件变化情况,并将新添加的文件读入项目系统(不需要下载). spring配置定时任务就不多说了,需要注意的一点就是,现在的项目很多都是通过maven构建的,分好多 ...

  9. 上传XML文件字符编码问题

    1.上传的XML文件的空格的字符编码和倒入到数据库的空格的字符编码不是一种编码格式,导致导入到数据库的数据和XML文件的数据不一致的情况,进而使展示到界面上的数据在进行搜索时不能搜索出来.解决办法: ...

随机推荐

  1. InitializeComponent System.StackOverflowException

    因为一直重复调用了InitializeComponent,WPF报System.StackOverflowException错误,提示死循环似的调用.经过一阵排查得出下面结论: 避免在隐藏代码中使用O ...

  2. [Jquery]tab页面切换效果

    思路:取得头部和内容的div,头部当前点击的高亮,其余的去除高亮,并通过index()方法获得当前点击的索引,然后内容div通过.eq(index)显示和隐藏 优化:当前做法,从第一个快速移到最后一个 ...

  3. POJ 2739 Sum of Consecutive Prime Numbers 难度:0

    题目链接:http://poj.org/problem?id=2739 #include <cstdio> #include <cstring> using namespace ...

  4. winform插入sql的事务处理

    实现目的:点击按钮,原子性执行两条sql语句,同时成功或同时失败 数据库有这三个字段(忽略已有的一条记录): 一.用事务的sql语句 按钮事件完整代码: //事务处理插入sql语句 using (SQ ...

  5. python开发规则

    1.Python优点:简单.优雅.明确 python缺点 2.强大的模块三房库 1.代码不能加密 3.易移植 2.速度慢 4.面向对象 5.可扩展(c\java\c#....) cpython ipy ...

  6. 全国行政区划代码(json对象版)

    var area = {"110000":"北京市","110100":"北京市","110101" ...

  7. ToolBar+DrawerLayout + NavigationView

    http://www.jianshu.com/p/9471b87f2c61 很好的博客可以瞅瞅 <android.support.design.widget.NavigationView and ...

  8. php的数组与数据结构

    一.数组的分类与定义 分类: 1.索引数组  $array = array(1,2,3,4,5); 2.关联数组  $array=array(1=>"aa","bb ...

  9. hdu1116 欧拉回路

    //Accepted 248 KB 125 ms //欧拉回路 //以26个字母为定点,一个单词为从首字母到末尾字母的一条边 //下面就是有向图判断欧拉回路 //连通+节点入度和==出度和 或者 存在 ...

  10. CGAffineTransformMakeTranslation和CGAffineTransformTranslate

    分类: ios基础2013-01-06 22:05 15513人阅读 评论(2) 收藏 举报 1.CGAffineTransformMakeTranslation每次都是以最初位置的中心点为起始参照 ...