1、TypeReference的用法
用在JasonUtil.toObj中,传入String,然后转换成需要的对象
{
"a":[
"张三",
"李四",
"王五"
]
}
public class Test111 {
public void testTypeReference(){
List<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王五");
JSONObject jsonObject = new JSONObject();
jsonObject.put("a",list);
List<String> result = JacksonUtil.toObj(jsonObject.get("a").toString() ,new TypeReference<List<String>>(){});
System.out.println(result);
}
public static void main(String[] args) {
Test111 test111 = new Test111();
test111.testTypeReference();
}
}
2、hdfs连接
这里,coreSitexml和hdfsSiteXml对应hdfs配置文件:core-site.xml和hdfs-site.xml,如果在本地运行调试,需要将两个文件拷贝下来,然后替换成本地路径即可;如果在远程调试,则使用服务器hdfs的配置路径:
Configuration conf = new Configuration();
conf.addResource(new Path("file://", coreSiteXml));
conf.addResource(new Path("file://", hdfsSiteXml));
FileSystem hdfs = FileSystem.get(conf);
3、window本地调试需要配置一些hadoop家目录
① 去github搜索和自己hdfs版本一致的winutils,比如:
② 配置一下环境变量,https://www.cnblogs.com/huxinga/p/6875929.html
4、hdfs写入权限报错
查看路径中文件的所有者,比如我的文件所有者是hadoop,代码如下
UserGroupInformation ugi = UserGroupInformation.createRemoteUser("hadoop");
ugi.doAs((PrivilegedExceptionAction<Boolean>) () -> {
FileSystem hdfs = FileSystem.get(conf);
hdfs.copyFromLocalFile(true, new Path(srcFileName), new Path(dstFileName));
log.info("{}成功上传到{}",srcFileName,dstFileName);
return true;
});