RHive tutorial 3: RHive 튜토리얼 3 - HDFS 함수

1,433 views

Published on

RHive tutorial 3: RHive 튜토리얼 3 - HDFS 함수 (한글판)

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,433
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
122
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

RHive tutorial 3: RHive 튜토리얼 3 - HDFS 함수

  1. 1. RHive 튜토리얼 3 - HDFS 함수이 튜토리얼에서는 HDFS 의 데이터를 관리하는데 필요한 펑션들인 RHive 의 HDFS관련함수들에 설명한다.RHive - HDFS functionsHive 은 분산파일시스템에 저장된 데이터를 관리하기 위해 Hadoop 의 시스템을이용한다. 그렇기 때문에 Hive 와 RHive 을 효과적으로 사용하기 위해서는 HDFS 를이용해서 BigData 를 저장하고 읽어오며 remove 하는 등의 일련의 작업을 원할하게 할수 있어야 한다.RHive 는 hdfs 를 R 의 환경에서 관리할 수 있도록 "hadoop fs" 명령이 지원하는 것들과각각 대응되는 함수들을 가지고 있다.이 함수들을 이용하면 HADOOP CLI(command line interface)를 이용하거나 HadoopHDFS library 를 이용하지 않고도 R 환경에서 HDFS 를 다룰 수 있다.만약 "hadoop"의 CLI 를 이용하거나 Hadoop library 을 사용하는 것이 더 익숙하다면그것들을 이용하는 것도 좋다.그러나 Rstudio server 를 이용하거나 terminal 에서 작업하는 것이 익숙하지 않다면RHive HDFS function 들은 R 유저가 HDFS 를 쉽게 다룰 수 있는 해결책이 될 것이다.예제를 따라하기 전에rhive.hdfs.* 함수들은 RHive 가 정상적으로 설치되고 library(RHive)와rhive.connect 가 정상적으로 수행이 된 후에 작동이 가능하다.예제를 따라하기 전에 다음을 먼저 수행하는 것을 잊지 말자.#  Open  R  library(RHive)  rhive.connect()rhive.hdfs.connectRHive 펑션들을 이용해서 Hive 와 마찬가지로 HDFS 에 연결하는 작업이 필요하다.그러나 이 함수는 HDFS 를 참조하기 위한 정보를 가지고 있는 Hadoopconfiguration 이 정상적으로 설정되었고 환경변수를 맞게 설정하였다면rhive.connect 함수를 수행하면 자동으로 처리가 되므로 일반적으로는 따로 할 필요는없다.
  2. 2. 하지만 만약 다른 HDFS 에 접속을 해야 하거나 어떤 이유로 인해서라도 강제 접속을하려고 한다면 다음과 같이 사용할 수 있다.rhive.hdfs.connect("hdfs://10.1.1.1:9000")  [1]   "Java-­‐Object{DFS[DFSClient[clientName=DFSClient_630489789,  ugi=root]]}"  rhive.hdfs.connect 에 HDFS 를 서비스하는 hostname 과 port 를 정확히 기재하지않으면 접속이 되지 않는다.HDFS servce 를 담당하는 server 의 주소와 port 를 모른다면 시스템 관리자에게문의하여 알아낸뒤 설정을 하도록 한다.rhive.hdfs.ls"hadoop fs -ls"와 동일한 기능을 하며 다음과 같이 사용한다.rhive.hdfs.ls("/")      permission   owner             group       length             modify-­‐time                file  1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27        /airline  2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07   13:16  /benchmarks  3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06  03:59      /messages  4     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                /mnt  5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐13  20:24            /rhive  6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  20:19                /tmp  7     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  01:14              /user이것은 Hadoop CLI(Command Line Interface)를 이용한 다음의 명령과 동일하다.hadoop  fs  -­‐ls  /
  3. 3. rhive.hdfs.getrhive.hdfs.get 함수는 HDFS 에 있는 데이터를 로칼로 가져오는 기능을 한다.이것은 "hadoop fs -get"과 동일한 기능을 한다.다음은 HDFS 에 있는 messages 라는 data 를 local 시스템의 /tmp/messages 로저장하고 record 수를 확인하는 예제이다. rhive.hdfs.get("/messages",  "/tmp/messages")   [1]  TRUE   system("wc  -­‐l  /tmp/messages")   145889  /tmp/messagesrhive.hdfs.putrhive.hdfs.put 함수는 로칼에 있는 데이터를 HDFS 로 업로드 하는 기능을 한다."hadoop fs -put"과 동일한 기능을 하며 rhive.hdfs.get 과는 반대의 기능을 하는함수이다.다음 예제는 로컬 시스템에 있는 "/tmp/messages" 파일을 HDFS 에"/messages_new"라는 이름으로 업로드하는 기능을 한다.rhive.hdfs.put("/tmp/messages",  "/messages_new")  rhive.hdfs.ls("/")      permission   owner             group       length             modify-­‐time                    file  1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27            /airline  2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  13:16      /benchmarks  3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06  03:59          /messages  4     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐14   02:02  /messages_new  5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                    /mnt  6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐13  20:24                /rhive  7     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  
  4. 4. 01:14                  /user"/messages_new"라는 파일이 HDFS 에 생긴 것을 확인할 수 있다.rhive.hdfs.rm"hadoop fs -rm"과 동일한 기능을 수행하며HDFS 에 있는 파일을 삭제한다.rhive.hdfs.rm("/messages_new")  rhive.hdfs.ls("/")      permission   owner             group       length             modify-­‐time                file  1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27        /airline  2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07   13:16  /benchmarks  3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06  03:59      /messages  4     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                /mnt  5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐13  20:24            /rhive  6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  01:14              /user"/messages_new"라는 HDFS 내의 파일이 삭제된 것을 확인할 수 있다.rhive.hdfs.rename"hadoop fs -mv"와 동일한 기능을 한다.즉, HDFS 내에 파일의 이름을 변경하거나 디렉토리를 이동시키는 기능을 한다.rhive.hdfs.rename("/messages",  "/messages_renamed")  [1]  TRUE  rhive.hdfs.ls("/")      permission   owner             group       length             modify-­‐time                            file  
  5. 5. 1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27                    /airline  2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  13:16              /benchmarks  3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06   03:59  /messages_renamed  4     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                            /mnt  5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐13  20:24                        /rhive  6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  01:14                          /userrhive.hdfs.existsHDFS 내에 파일이 존재하는지 확인하는 기능을 한다.이 함수에 대응하는 hadoop 명령어는 따로 없다. rhive.hdfs.exists("/messages_renamed")   [1]  TRUE   rhive.hdfs.exists("/foobar")   [1]  FALSE  이 함수는 R 로 작성된 코드에서 Hive 의 테이블이 존재하는지에 따라 실행코드를 달리할때 사용하는데 유용하다. 특정한 코드가 실행되기 전에 이전 단계의 코드가실행되면서 만들어 내야할 결과물이 제대로 생성되었는지 간단히 확인하기 위한방법으로 중간 결과 테이블의 존재 유무를 조사하는 코드를 작성하는데도 유용하다.rhive.hdfs.mkdirs"hadoop fs -mkdir"과 동일한 기능을 한다.HDFS 에 디렉토리를 생성하는 기능을 한하며 하위 디렉토리까지도 한꺼번에 생성한다. rhive.hdfs.mkdirs("/newdir/newsubdir")   [1]  TRUE   rhive.hdfs.ls("/")      permission   owner             group       length             modify-­‐
  6. 6. time                            file  1     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  14:27                    /airline  2     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  13:16              /benchmarks  3     rw-­‐r-­‐-­‐r-­‐-­‐     root   supergroup   11186419   2011-­‐12-­‐06   03:59  /messages_renamed  4     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐07  22:05                            /mnt  5     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  02:13                      /newdir  6     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐13  20:24                        /rhive  7     rwxr-­‐xr-­‐x     root   supergroup                 0   2011-­‐12-­‐14  01:14                          /user  rhive.hdfs.ls("/newdir")      permission   owner             group   length             modify-­‐time                            file  1     rwxr-­‐xr-­‐x     root   supergroup             0   2011-­‐12-­‐14   02:13  /newdir/newsubdirrhive.hdfs.closeHDFS 를 사용한 후 HDFS 를 더 이상 사용할 일이 없는 경우 connection 을 닫기 위해사용한다.rhive.hdfs.close()  문의 및 연락RHive 의 HDFS 관련된 함수들의 버그 및 기능 개선에 대한 조언 및 추가로 필요한함수들에 대한 요구사항 또는 의견이 있다면 RHive 개발팀에서는 적극적으로 답변하고커뮤니케이션할 준비가 되어 있다.email: rhive@nexr.com

×