[HADOOP] hadoop에서 객체를 직렬화하는 법 (HDFS에서)
HADOOPhadoop에서 객체를 직렬화하는 법 (HDFS에서)
나는 HashMap
HDFS에서 내 HashMap 객체를 직렬화하려면 다음과 같이 일반적인 Java 객체 직렬화 코드를 사용했지만 오류 (사용 권한이 거부 됨)
try
{
FileOutputStream fileOut =new FileOutputStream("hashmap.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(hm);
out.close();
}
catch(Exception e)
{
e.printStackTrace();
}
다음과 같은 예외가 있습니다.
java.io.FileNotFoundException: hashmap.ser (Permission denied)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:110)
at KMerIndex.createIndex(KMerIndex.java:121)
at MyDriverClass.formRefIndex(MyDriverClass.java:717)
at MyDriverClass.main(MyDriverClass.java:768)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
누군가 제안하거나 hdfs에 hadoop에서 객체를 직렬화하는 방법에 대한 샘플 코드를 공유 할 수 있습니까?
해결법
-
==============================
1.Apache Commons Lang의 SerializationUtils를 사용해보십시오.
Apache Commons Lang의 SerializationUtils를 사용해보십시오.
아래는 방법들이다.
static Object clone(Serializable object) //Deep clone an Object using serialization. static Object deserialize(byte[] objectData) //Deserializes a single Object from an array of bytes. static Object deserialize(InputStream inputStream) //Deserializes an Object from the specified stream. static byte[] serialize(Serializable obj) //Serializes an Object to a byte array for storage/serialization. static void serialize(Serializable obj, OutputStream outputStream) //Serializes an Object to the specified stream.
HDFS에 저장하는 동안 serialize에서 반환 된 byte []를 저장할 수 있습니다. Object를 가져 오는 동안 ex : File 객체에 해당하는 객체에 캐스트를 입력하면 다시 가져올 수 있습니다.
내 경우에는 Hbase 칼럼에 하나의 hashmap을 저장하고 있었는데, 나는 그것을 다시 검색했다. 나의 맵퍼 메소드에서 Hashmap과 같다. 그리고 성공했다.
물론, 같은 방법으로도 할 수 있습니다.
또 다른 것은 아파치 코 몬즈 (Apache Commons IO)를 사용할 수도있다. IO this (org.apache.commons.io.FileUtils); 나중에이 파일을 HDFS에 복사해야합니다. HDFS를 데이터 저장소로 사용하고자했기 때문입니다.
FileUtils.writeByteArrayToFile(new File("pathname"), myByteArray);
참고 : jar apache commons io와 apache commons lang은 항상 hadoop 클러스터에서 사용할 수 있습니다.
from https://stackoverflow.com/questions/37545602/how-to-serialize-object-in-hadoop-in-hdfs by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Oozie 워크 플로 시작 문제 (0) | 2019.07.03 |
---|---|
[HADOOP] 하둡 2.6.0 파일 시스템 자바 브라우징 (0) | 2019.07.03 |
[HADOOP] Cloudera에 serde로 JSON 파일로드하기 (0) | 2019.07.03 |
[HADOOP] MapReduce 값을 내림차순으로 정렬 (0) | 2019.07.03 |
[HADOOP] N 일보다 오래된 hdfs의 파티션 폴더 삭제 (0) | 2019.07.03 |