최근 클러스터 환경을  HDP(Hortonworks Data Platform) 2.5.3.0 -> HDP 2.6.1.0으로 올리면서


Spark 환경을 1.6 -> 2.1 로 바꾸었습니다.



사실 스칼라도 해보겠다고 두꺼운 Programming in Scala 3판도 샀지만..... 이미 초심은..


그러던 도중 ... 


분명히 Zepplien 에서 1.6에서 Parquet 파일을 Table로 저장할때, 


sqlContext.parquetFile("/tmp/extracted").sveAsTable("step01");


로 했던것 같은데.. Spark를 2버전으로 바꾸니 saveAsTable is not a member of org.apache.spark.sql.DataFrame


다음과 같은 오류가 나네요 .. 아마 내부 API나 어떤 변경이 있겠지만.. 역시 구글신 


sqlContext.parquetFile("/tmp/extracted").write.format("parquet").saveAsTable("step01")


다음으로 변경하니 , 제대로 저장이 되네요.







저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
맨날 HDP 에 설치가 잘된 제플린을 사용하다보니,,

수동으로 제플린을 사용하려고 하니 HIVE를 사용하려고 하니 다음과 같은 오류가 발생합니다.

Prefix not found.

paragraph_1493986135331_752263516's Interpreter hive not found
org.apache.zeppelin.interpreter.InterpreterException: paragraph_1493986135331_752263516's Interpreter hive not found at org.apache.zeppelin.notebook.Note.run(Note.java:605) at org.apache.zeppelin.socket.NotebookServer.persistAndExecuteSingleParagraph(NotebookServer.java:1641) at org.apache.zeppelin.socket.NotebookServer.runAllParagraphs(NotebookServer.java:1588) at org.apache.zeppelin.socket.NotebookServer.onMessage(NotebookServer.java:268) at org.apache.zeppelin.socket.NotebookSocket.onWebSocketText(NotebookSocket.java:59) at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128) at org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69) at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:65) at org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122) at org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:161) at org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309) at org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214) at org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220) at org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258) at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:632) at org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:480) at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) at java.lang.Thread.run(Thread.java:745)


제가 사용한 제플린 버전은 1.7.1 버전이고 이유는 간단합니다.

HIVE 인터프리터가 없기 때문입니다.


설정방법은 여기 친절하게 나와있습니다.


https://zeppelin.apache.org/docs/0.7.1/interpreter/hive.html



설명은 간단하지만,, 분명히 HDP에서 제플린으로 HIVE사용할때는 %hive 사용했던것 같은데..


제플린을 오래 사용하지 않아서 jdbc로 통합된것 같더군요


먼저 Hadoop 홈폴더에 보면 share 폴더 아래 hadoop 아래 common이라는 폴더가 있을겁니다.

여기서 hadoop-common을 제플린 폴더의 interpreter 폴더 jdbc 폴더 안에 복사합니다


그다음 hive 홈폴더에서 lib 폴더에 보면 hive-jdbc-standalone이라는 jar 파일이 있습니다 

마찬가지로 제플린 interpreter 폴더 jdbc 에 복사합니다


그다음 제플린 UI에서 인터프리터를 여신다음 여기서 jdbc를 검색합니다

그다음 jdbc에 다음을 추가합니다

hive.driver   = org.apache.hive.jdbc.HiveDriver

hive.password = 자신의 설정

hive.url =자신의 설정

hive.user =자신의 설정


그다음 제플린 데몬을 제시작하면


%hive(jdbc) 하신다음 바로 사용이 가능합니다.





....추가적으로 지금 제플린에 yarn-client 모드로 spark 엮고 있는데, 이거 제대로 되면 방법도 올려보겠습니다.


맨날 벤더 하둡 쓰려다가 ㅠㅠㅠ self-deployed 하둡 쓰려니까 어렵네요 ㅠㅠ 























저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License


HDP 만 사용하다가, 


HIVE를 직접 설치하려니..헷갈리네요


hive를 세팅하고 create table 하려고 하는데 metastore에 생성하려는 테이블이 trash 가 계속 된다면..


메타스토어 DB가 제대로 세팅안된것입니다..


... 분명히 예전에 mysql을 쓴다면,, 그 안에 들어가서 source 로 쿼리문으로 안에 테이블 구성했던것 같은데..


지금은 shematool 이라고 제공하네요..


혹시 create table 하는데 metasotre에서 만들려는 테이블을 trash로 지우는 현상이 일어나면서 테이블이 만들어지지 않는다면 metastore db 다시 한번 세팅해보세요 ~ 

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

혹시나 저 같은 이슈를 겪고 있는 분들을 


Hbase와 Hive를 연동할수 있는것처럼 MongoDB 를 Hive에 연동하여 사용할수 있습니다


https://github.com/mongodb/mongo-hadoop/wiki/Hive-Usage


이곳에서 라이브러리를 받아서 사용하시면, 되십니다.


mongo-hadoop-core.2.0.1.jar 

mongo-hadoop-hive-2.0.1.jar 

mongo-java-driver-3.2.1.jar




FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. org/bson/conversions/Bson 


추가적으로 다음 에러는 mongo-java-driver-3.2.1.jar 없어서 나오는 에러 입니다. 저 같은경우 제실수로 mongo-drvier를 사용해서 계속 오류가 났네요


http://rmoff.net/2016/06/15/classnotfoundexception-with-mongodb-hadoop-in-hive/




reference : 써티웨어(Certiware), http://certiware.co.kr

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. test 2016.11.17 09:32 신고

    test

java.lang.RuntimeException: Error applying authorization policy on hive configuration: java.net.ConnectException: Call From HOST2/192.168.1.12 to 0.0.0.0:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

        at org.apache.hive.service.cli.CLIService.init(CLIService.java:114)

        at org.apache.hive.service.CompositeService.init(CompositeService.java:59)

        at org.apache.hive.service.server.HiveServer2.init(HiveServer2.java:104)

        at org.apache.hive.service.server.HiveServer2.startHiveServer2(HiveServer2.java:411)

        at org.apache.hive.service.server.HiveServer2.access$700(HiveServer2.java:78)

        at org.apache.hive.service.server.HiveServer2$StartOptionExecutor.execute(HiveServer2.java:654)

        at org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:527)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:497)

        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)

        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

Caused by: java.lang.RuntimeException: java.net.ConnectException: Call From HOST2/192.168.1.12 to 0.0.0.0:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:494)

        at org.apache.hive.service.cli.CLIService.applyAuthorizationConfigPolicy(CLIService.java:127)

        at org.apache.hive.service.cli.CLIService.init(CLIService.java:112)

        ... 12 more

Caused by: java.net.ConnectException: Call From HOST2/192.168.1.12 to 0.0.0.0:8020 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused

        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)

        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)

        at org.apache.hadoop.net.NetUtils.wrapWithMessage(NetUtils.java:792)

        at org.apache.hadoop.net.NetUtils.wrapException(NetUtils.java:732)

        at org.apache.hadoop.ipc.Client.call(Client.java:1431)

        at org.apache.hadoop.ipc.Client.call(Client.java:1358)

        at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:229)

        at com.sun.proxy.$Proxy15.getFileInfo(Unknown Source)

        at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.getFileInfo(ClientNamenodeProtocolTranslatorPB.java:771)

        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

        at java.lang.reflect.Method.invoke(Method.java:497)

        at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:252)

        at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:104)

        at com.sun.proxy.$Proxy16.getFileInfo(Unknown Source)

        at org.apache.hadoop.hdfs.DFSClient.getFileInfo(DFSClient.java:2116)

        at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1315)

        at org.apache.hadoop.hdfs.DistributedFileSystem$22.doCall(DistributedFileSystem.java:1311)

        at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)

        at org.apache.hadoop.hdfs.DistributedFileSystem.getFileStatus(DistributedFileSystem.java:1311)

        at org.apache.hadoop.fs.FileSystem.exists(FileSystem.java:1424)

        at org.apache.hadoop.hive.ql.session.SessionState.createRootHDFSDir(SessionState.java:568)

        at org.apache.hadoop.hive.ql.session.SessionState.createSessionDirs(SessionState.java:526)

        at org.apache.hadoop.hive.ql.session.SessionState.start(SessionState.java:480)

        ... 14 more

Caused by: java.net.ConnectException: Connection refused

        at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)

        at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)

        at org.apache.hadoop.net.SocketIOWithTimeout.connect(SocketIOWithTimeout.java:206)

        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:531)

        at org.apache.hadoop.net.NetUtils.connect(NetUtils.java:495)

        at org.apache.hadoop.ipc.Client$Connection.setupConnection(Client.java:612)

        at org.apache.hadoop.ipc.Client$Connection.setupIOstreams(Client.java:710)

        at org.apache.hadoop.ipc.Client$Connection.access$2800(Client.java:373)

        at org.apache.hadoop.ipc.Client.getConnection(Client.java:1493)

        at org.apache.hadoop.ipc.Client.call(Client.java:1397)


HDP Ambari를 보니 Hive가 뻗어있길래 저런 오류가 나있더군요...한번 HDFS의 Core-site.xml 에서 defualt.fs 가 제대로 설정되어있는지 확인해보셔야 합니다. 


만약에 default.fs 쪽에 0.0.0.0:8020 으로 설정 하셨으면, 해당 네임노드 호스트로 바꾸면 될것 같습니다.

(지금 헷갈리는게,, 원래 저렇게 안썻나,,)


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

HBase 데이터를 만지다가, 생각지도 못한것으로 고생을 해서 리마인드 차원에서 포스팅 합니다.


Java또는 Spring 에서 Hbase를 사용하는 방법은

1. Native Library
2. Trift

3. Rest API


이때 속도는 1 > 2,3 정도 Native 방식이 빠름,

만약에 Native 방식을 할때는,Hbase와 같은 네트워크 망을 사용해야하고 Client에서 반드시 hosts를 지정해서 사용해야됨(만약 다른 네트워크라면 Trift와 Rest로 사용가능) ..(관련해서 스택오버플로우에도 물어보긴 했지만.. 재미는 못봤음)


Hbase같은경우 , 일반적인 RDBMS 처럼 select의 개념으로 생각면 피곤. HBASE의 경우 Select에 해당하는것이 scan인데 이때 전체를 fullScan 해서 필터링 하는 방식이기 때문에 상당히 느려터짐


왠만한 값은 유니크한 값(타임라인 테이터같이)이 있다면 그걸 row로 잡아서 넣으면 매우 빠름, 만약 row가 애매하다면 Hive를 이용해서(RDMS로 처리가능하다면 처리해도 상관은 없음) Hbase에 넣는방법도 있음 .


그런데, Hbase는 참 값을 가져오는게 모해서 Hive로 extenal Table을 연결해서 쓸수 있는데, 문제는 이때 Hive가 where절에 조건이 몇개만 들어가도 MapReduce가 걸려버림 , Tez여도 웹에서 가져다 쓰기에는 안좋음


아직 테스트 단계에서만 사용하고 있지만 이런 대안으로 Pheonix도 쓴다고 하는중


실제로 지금 소스좀 분해하고 있는 오픈소스 프로젝트를 보면 Pheonix를 사용함 


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

하둡 2버전은 잘모르겠지만.


1버전을 이용할때는 리눅스에서 HDFS에 직접 마운트를 해서 사용하고 싶을때가 있었습니다.


그떄 fuse-dfs를 이용해서 마운트 했는데, 2버전때 없어졌나 했는데.. 제가 HDP(Hortonworks Data Platform)을 이용해서 그런지 잘 안보였던것 같더군요.. cloudera에는 fuse-dfs가 그대로 있던것 같았습니다. 홈페이지에서 보기에는 


http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.3.4/bk_hdfs_nfs_gateway/content/hdfs-nfs-gateway-user-guide.html



다른 배포판은 모르겠지만.. 아파치 하둡1을 이용할때는,, fuse-dfs를 사용하기 위해 관련 라이브러리 설치하고 하둡 컴파일 하고 귀찮은 절차가 필요했었는데.. HDP는 이런것은 확실히 편하네요 



사용방법은 간답합니다. 


mount -t nfs -o vers=3,proto=tcp,nolock (NDFS게이트웨이가 있는 노드):/ (마운트 하려는 폴더)




그리고 마운트된 폴더를 접속하면 다음과 같이 마운트가 잘되신것을 확인 할 수 있습니다 


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

sqoop export 를 할때 For input string: "\N" 해결 할수 있는 방법

Sqoop export 옵션에  --input-null-string '\\N' --input-null-non-string '\\N' 추가 



2015/10/29 - [Study/--Hadoop Eco(Apache/HDP)] - Sqoop 1.4.6 설치, 사용 예제(Migrating data using sqoop from Mysql to HBase)

2015/11/16 - [Study/--Hadoop Eco(Apache/HDP)] - Hive를 이용해서 Rank 구하기

2015/12/23 - [Study/--Hadoop Eco(Apache/HDP)] - Sqoop-export : from hive to mysql




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

오늘 심각한 고민을 했습니다  ... 자바는 그냥 갔다 버려야되나..


Parallel Python 이거 써보고 할말을 잃었습니다. 생각보다 너무 쉽고.


Parallel Python을 사용하기 위해서는 대략 다음 절차를 수행하시면 됩니다.



연산을 하려는 노드, Master노드에 Parallel Python 설치(http://www.parallelpython.com/) [현재 저같은경우 Python 2.7을 사용하고 있습니다.]


그다음 연산하려는 모든 노드에서 네트웍 대역이 같다면, ppserver.py -a (이 의미는 실제 코드 설명할때 설명0


그리고 마스터 노드에서 병렬처리할 코드를 작업하시면 됩니다.


큰틀은 다음과 같습니다. 


가장 중요한 부분은 ppserver= ppservers=("*",) 입니다. 앞에서 ppserver.py -a  한이유와 같은데, 만약 같은 네트워크 대역폭에 있으면 알아서 감지합니다. 


 job_server.submit(mysum,(100,),callback=sum.result) 


실행할 함수?, 그리고 Parameter, 콜백 함수 입니다. 


만약 이럴경우, 병렬로 돌릴때 그 모듈이 돌아가기 위해 필요한 모듈이 있다고 가정할대, 예를들명 mysum을 연산할때 파이선의 math 모듈이 반드시 필요하다 그럴경우에는 modules = ("math","sys")와 같이 파라메터를 넣어주시면 됩니다.


파이썬이 이렇게 강력할줄이야.. 




import sys,thread
import pp
class myTest:
def __init__(self):
self.value=0
self.lock = thread.allocate_lock()

def result(self, value):
self.lock.acquire()
self.value += value
self.lock.release()


def mysum(n):
result=0
for i in range(1,1000):
result+=i
return result



sum = myTest()

ppserver= ppservers=("*",)

job_server = pp.Server(ppservers=ppservers)
job1 = job_server.submit(mysum,(100,),callback=sum.result)

job_server.print_stats()

job_server.wait()

print "result is "+str(sum.value)

job_server.print_stats()


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. Favicon of http://navisphere.net BlogIcon 룬룬 2016.01.03 15:19 신고

    오늘은 드디어 아는 뭔가가 나와서 반가운 마음이 드네요.
    먼저 복 많이 받으시고요. :) 늘 은은히 이어가는 인연이 즐겁습니다.

    저는 전공이 컴퓨터비전, 패턴인식, 머신러닝에 가까운 사람입니다.
    파이썬도 많이들 쓰더라구요. 아마 MATLAB이 유료이기에 그 대안으로 사용되는 분위기가 아니었나 싶습니다.

    저 또한 처음에는 고가의 MATLAB에서 벗어나보고자 배우기 시작한 것이 Python이고 말씀하신 부분, 그 명쾌하게 한줄로 해결되는 듯한 그 부분에 인상이 깊은 언어로 남아있습니다. 배우기 쉽고 수천의 이미 준비된 라이브러리들.. 그렇지 않을 수가 없었죠. :)

    병렬처리라고 하면 제 머릿속에서는 GPU를 이용한 것들이 먼저 떠오르는데 써주신 Parallel Python은 MPI 같은 환경을 말하는 것인가봅니다.
    어쨌든 Python의 편리함은 부정할 수 없는 것 같고요.

    개인적으로 조금 배우고 써보면서 느낀 점을 단 점 위주로 말씀드려보고자 합니다. 사용하실 때 감안을 해보면 좋을 것 같습니다.
    분야 때문에 환경이 좀 다를 수도 있을 것 같기도 해요.

    1. 빠른 결과를 보기 위한 실험용으로는 최적입니다.
    말씀드렸듯 이미 준비된 모듈들이 너무나도 많습니다. 단순 wrapper들도 많고요.

    2. 짜임새 있는 구조로 아름다운 코드를 만들기는 힘든 것 같습니다.
    제가 실력이 모자라 그런 느낌을 받았을 수도 있는데, 스크립트 언어 특성상 그 부분에 이르러서야 오류가 나기 때문에 아까운 시간들을 놓칠 때가 많습니다.
    단순 문법이나 사용상 오류들을 잡는데 시간을 많이 보냈던 것 같습니다. C/C++에서는 빌드조차 안될 것 같은 그런 오류들 말이에요.
    모듈간 연동시에도 크게 검사 과정이 없기 때문에 코드의 크기가 커질 수록 다루기가 힘든 물건이 되어버리는 것 같습니다.

    3. Type 문제
    제게는 이것이 가장 큰 문제로 다가왔습니다.
    사용하다보면 Numpy 등에서 새로 정의된 Type들을 사용하게 되는데, 이것과 기존 Type 혹은 다른 모듈의 Type들이 혼용되기 시작하면 사람이 이를 다루지 못하는 시기가 오게 됩니다.
    C/C++에서는 강력한 Type 검사를 통해 막아주고 있는 부분인데요, MATLAB등은 Matrix, Cell, Dictionary 정도로 제한이 되고 있는 부분이고요.


    아마 지금은 첫줄 같은 고민을 하시긴 해도, 결국 Java를 선택하는 날이 오시리라 믿습니다.


    그럼에도 매력적인 언어임에는 틀림이 없는 것 같습니다.
    어차피 도구니까요. 적절한 목적에 잘 사용하면 되겠죠. :D

    어제 동생과 이야기하다가 나온 것인데,
    Perl 같은 스크립트가 커지면 Python정도로 확장했다가 더 큰 규모가 필요해지면 기존 언어로 가는게 적절한 순서가 아닐까 싶네요.


    오늘은 살짝 넘어서 이야기한 것 같나요? 아는게 나오니 신이 나서... 넓은 마음으로 봐주시고요. :)
    휴일에도 공부하시는 모습에 박수를 보냅니다. 짝짝짝.


    • Favicon of http://redeyesofangel.tistory.com BlogIcon Yuika eizt 2016.01.03 15:43 신고

      새해 복 많이 받으세요 :)

      생각해보면 가벼운 MPI 같은 느김이 맞을것 같습니다. 저 같은 경우는 MPI같은 것과는 거리가 멀고(아마..) (대강들어본적은 있습니다... 학교 다닐대 배울기회가 있었지만,, 수업이 빡세다고해서.. 선택을 안했지만요..)

      요즘에는 학교에서 나와서 빅데이터를 처리하는데 사용하는 Hadoop(MapReduce,Hbase, Hive ...) 안에 있는것들과 Storm 이런 위주로 사용하고 있네요..

      그러다 보니, 가끔식 어떤 데이터들을 처리할대 한개 컴퓨터에서 돌릴때 약간쫌 꼼수로 MapReduce로 나누어서 돌리거나 그러는데... 약간 사이비이네요. 너무 불편했는데,, 어제 파이선이 보이는것입니다..

      사실 어제는 신기했는데,, 전 이걸 그대로 쓰려는게 아니라 제가 하고 싶은 작업에 응용을 해보고 싶은데.. 별로 재밌게 진행되지는 않는것 같네요..

      어디선가 잘 안돌아가는것 같은데..사실 중간중간 검증하면서 하고 든요.. 에러를 내보내는 상황도 아니라서 약간은 애매하네요

      편리하지만 말씀해주신 것들은 염두해 두고 ,, 사용해 봐야겠네요 ㅎㅎ

      감사합니다. :)

만약 Hive에서 test라는 테이블을 mysql로 옮길때는 

1. Hive의 Test와 동일한 Test테이블을 Mysql에 생성

2. sqoop 을 이용 


sqoop export  --connect jdbc:mysql://192.168.1.1/database --username user --password password --table test --export-dir /apps/hive/warehouse/test --input-fields-terminated-by '\001' --lines-terminated-by '\n'



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

일단 현재 상황은 MySQL 안에  366996 로우가 들어있는 상황이고, 여기안에 데이터가 있는 상황입니다

여기에 데이터가 있는데, 랭킹을 매겨야 하는 상황입니다. 


select B,T,(select count(*)+1 from 9_Spending_blk where T>t.T) as rank from a_blk as t order by rank asc;


SELECT a.B,
      a.T,
        count(b.T)+1 as rank
FROM  9 a left join 9 b on a.T>b.T and a.B=b.B
group by  a.B,

      a.T

통해서 RANK를 구하려고 했는데, 생각보다 느리게 되더군요.... 
MySQL로 구하는거 포기하고HIVE로 옮긴다음 해봤더니 금방 구할수 있었습니다.

절차는 다음과 같습니다. 

sqoop import --connect jdbc:mysql://127.0.0.1:3306/my --username root --password xer --table ttt  --hive-import –m 1


그다음 Hive에서 


select s.d, s.t, rank() over(ORDER by t asc) as rank from ttt as s


했더니, 14초만에 답을 얻을수 있었습니다.


자동으로 맵리듀스 작업이 걸리는게, 직접만들지 않아도 되서, Hive는 역시 좋네요..

이제 이걸 mysql로 돌려보내야하는데.. 

어떻게 했더라.. sqoop으로 될텐데.. 


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

1. 하둡 , Hbase는 기본적으로 설치되어 있다고 가정, https://phoenix.apache.org/ 에서 파일 다운로드 

2. 압축해제

3. Hbase 정지

4. phoenix-버전-HBase-1.1-server.jar 을 HBASE lib 폴더에 저장

5. phoenix-core-버전-HBase-1.1.jar 을 HBASE lib 폴더에 저장

6. Hbase 재시작


확인절차 

1. ./sqlline.py 172.168.0.47:2181:/hbase



- System Table은 피닉스가 처음 실행할때 자동으로 생성


2. Hbase shell


 - Hbase Shell에도 똑같이 시스템 폴더들이 생긴것을 알수 있음


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

HDP(Hortonworks data Platform)을 이용할때는 external Table을 선언하면 바로 동작하던것 같은데, 일반 Apache Hadoop에서는 약간 다르기 보다는 귀찮은게 많은것 같습니다.


Hadoop 2.7.1, Hbase 1.1.1 , Hive 1.4.0을 기준으로 정리하면

(각 컴포넌트들이 이미 설치되어 있다고 전제)


1. Hive로 필요한 Hbase 라이브러리 복사

cp /HBASE_HOME/lib/hbase-client-x.x.x.jar /HIVE_HOME/lib/

cp /HBASE_HOME/lib/hive-common-x.x.x.jar /HIVE_HOME/lib


2.Hive Shell

create external table mytable(key string,c1 string,c2 string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = ":key,cf1:c1,cf1:c2") tblproperties("hbase.table.name"="mytable");


연결 끝 ! 


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

생각해보면, hadoop이나, hbase는 web interface를 제공해서 중간 중간 제가 원하는 정보를 얻을수 있습니다. 물론 콘솔로도 얻을수 있으나, 


예를들어 어떤 노드가 죽었나, 또는 region들이 제대로 분할되었나(hbase를 처음사용하다보니, 실제 분할되고 하는것들을 보고 싶었거든요)


그런데   hive는 웹인터페이스를 보고 싶었는데, 없다는것이 문제였습니다. 관련해서 검색해보니, 별도로 설정해서 hwi를 실행해야 하는것이였습니다. 



일단 저의 환경은 다음과 같습니다.

Hadoop 2.6.0

Hbase 0.98.9

zookeeper 3.4.6

hive 0.14.0


출처 : https://cwiki.apache.org/confluence/display/Hive/HiveWebInterface

<property>
  <name>hive.hwi.listen.host</name>
  <value>0.0.0.0</value>
  <description>This is the host address the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.listen.port</name>
  <value>9999</value>
  <description>This is the port the Hive Web Interface will listen on</description>
</property>
 
<property>
  <name>hive.hwi.war.file</name>
  <value>${HIVE_HOME}/lib/hive-hwi-<version>.war</value>
  <description>This is the WAR file with the jsp content for Hive Web Interface</description>
</property>

Hive 쪽 메뉴얼을 보면 war 파일을 설정하는 부분이였는데, 문제는 제 0.14.0 버전에는 없는것이 문제였습니다. 
관련해서 검색해보면 hive 소스를 받아서 직접 build하는 방법이 있었지만 전 이부분에서 실패하였습니다.

구글링을 좀더 해보니, 중국분들께서 다은과 같은 방법으로 해결방법을 제시해주셨더군요. 



이분의 방법은, hive 0.14.0 버전 소스를 받아서 hive 폴더 안에 있는 hwi 파일을 zip 파일로 압축한다음 이 파일을 war파일로 확장자 변경하여, 
HIVE_HOME/lib 폴더에 집어넣고 적용시키는 방법입니다. 

설치 방법 보기




저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
1

+ Recent posts

티스토리 툴바