HDP에 익숙해져있다가 self-deployed Hadoop을 사용하다 보면, 답답할때가....


예를들면, HDFS를 확장하는것조차 마우스 클릭 딸각한번으로 해결될 문제가.


메뉴얼로 정리해보면


1.Hadoop.tar.gz 파일을 확장하려는 노드로 배포


데이터 노드에서


./hadoop-daemon.sh start datanode


2. 


네임 노드(HA했다면 둘다 설정 복사)에서


hdfs-site.xml에서 설정한 파일을 참고해서


    <property>

      <name>dfs.hosts</name>

      <value>/etc/hadoop/dfs.hosts</value>

    </property>


    <property>

      <name>dfs.hosts.exclude</name>

      <value>/etchadoop/dfs.exclude</value>

    </property>


dfs.hosts에 호스트 파일에 새로 추가한 데이터 노드 추가 



3. 


Acitve NameNode에서 


./refresh-namenodes.sh


노드 추가 끝


*

반대로 노드를 삭제할때는. 2번절차에서 수행한 dfs.hosts 데이터노드를 지우고 dfs.exclude


하고 Active NameNode에서 ./refresh-namenodes.sh 하면 제외하려는 데이터노드에 대해 decommision 절차가 수행된다음 제거

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

Spark에서 paruqet 압축 알고리즘을 찾다가. 

분명히 두가지 방법중 한가지 방법이면 된다고 하는것 같은데


sqlContext.setConf("spark.sql.psqlContext.setConf("spark.sql.parquet.compression.codec", "snappy")
sqlContext.sql("SET spark.sql.parquet.compression.codec=snappy")


저는 이것이 동작하네요 
sqlContext.sql("SET spark.sql.parquet.compression.codec=snappy")

사용하는 화경은 HDP 2.5 Spark 1.6 입니다


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
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

Apache Ambari를 사용하다보면, 암바리 자체를 이용해서 하둡 클러스터를 관리할수도 있지만.

떄로는 필요한 부분에 대하여 커스터마이징하거나, 또는 관리의 편의성을 위해 별도의 앱을 만들어 쓸 수도 있습니다. 



다음은 암바리의 컴포넌트를 API를 이용해서 시작 및 중지하는 방법입니다.


curl -u USER:PASS -i -H 'X-Requested-By: ambari' -X PUT -d  '{"RequestInfo": {"context" :"Stop '"$1"' via REST"}, "Body": {"ServiceInfo": {"state": "INSTALLED"}}}' http://HOST/api/v1/clusters/CLUSTER/services/COMPONENT


curl -u USER:PASS -i -H 'X-Requested-By: ambari' -X PUT -d '{"RequestInfo": {"context" :"Start '"$1"' via REST"}, "Body": {"ServiceInfo": {"state": "STARTED"}}}'  http://HOST/api/v1/clusters/CLUSTER/services/COMPONENT



https://ambari.apache.org

https://cwiki.apache.org/confluence/display/AMBARI/Installation+Guide+for+Ambari+2.2.1




`


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

In file included from c/cffi1_module.c:3,

                 from c/_cffi_backend.c:6366:

c/realize_c_type.c: In function ‘realize_c_type_or_func’:

c/realize_c_type.c:577: error: ‘FFI_DEFAULT_ABI’ undeclared (first use in this function)

c/_cffi_backend.c: In function ‘init_cffi_backend’:

c/_cffi_backend.c:6458: error: ‘FFI_DEFAULT_ABI’ undeclared (first use in this function)

error: command 'gcc' failed with exit status 1

make[2]: *** [/root/hue/desktop/core/build/cffi-1.3.1/egg.stamp] 오류 1

make[2]: Leaving directory `/root/hue/desktop/core'

make[1]: *** [.recursive-install-bdist/core] 오류 2

make[1]: Leaving directory `/root/hue/desktop'

make: *** [install-desktop] 오류 2


yum install python-cffi

yum install libffi-devel


HUE 가 필요해져서 수동으로 설치하고 있는데, 다음과 같은 오류가 발생하네요

구글신에게 물어보니 저걸로 해결하라고 하면 되네요..


그런데 문제는 지금 다른 문제가 발생하고 있다는..

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. Favicon of http://redeyesofangel.tistory.com BlogIcon Yuika eizt 2016.07.29 17:04 신고

    ++ 추가

    지금 생각해보면 Hue 공식홈페이지에서 docker Hue3 버전을 제공합니다.

    환경 구성해서 컴파일 하시는것보다 Docker로 구성하시는게 아마 정신건강에 편하실것 같습니다.

  2. Favicon of http://redeyesofangel.tistory.com BlogIcon Yuika eizt 2016.10.01 19:36 신고

    HUE 공식홈에 가면 Docker를 이용해서 3버전을 제공합니다..

    클라우데라의 경우는 이미 클라우데라 매니저를 통해 제공하겠지만. HDP의 경우는 docker 버전을 통해서 설정파일만 엮어주면 잘 동작합니다


사용하는 입장에 따라 다르지만, 직접 Hadoop을 받아서 설정하는 방법도 있지만, HDP(물론 무료!)를 이용해서 필요한 환경을 구축하는 방법도 있습니다.


제 사례를 들어보면 HDFS 부터 YARN,HBase, zookeeper,Hive까지 설치하는데 몇시간이 걸린다면,(물론 스크립트로 만들수도 있찌만) Ambari를 이용해서 HDP를 이용하면 원하는 환경은 바로 구성이 됩니다.


좀더 자세한 설명은 hortonworks.com/hdp/ 와 호튼웍스 공식 문서를 통해서 확인하실수 있습니다.


http://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.0.6.0-Win/bk_installing_hdp_for_windows/bk_installing_hdp_for_windows-20140120.pdf


다음 스크린샷은 Ambari 2.2.1(마지막 버전)을 이용해서 HDP 2.3(최신버전은 2.4,,, 최신버전과의 차이점은 SmartSence 가 추가된듯.. 아직 다 안봐서 ,)을 설치하는 설명입니다.


스크린샷은 블로그 포스팅을 위해서 VM 위에서 싱글머신으로 설치하는 예제입니다.


(중간에 찍은 스샷을 날려먹어서.. 호튼웍스 공식 메뉴얼을 보시는면 매우 자세하게 나왔습니다.




설치버전 선택




보통의 아파치 하둡을 설정할때 HOSTS를 입력하는 부분, 아래부분은 SSH 키를 입력 하는 부분입니다.



다음 절차에서 각 해당하는 노드들에 대하여 에이전트를 배포하여 설치를 준비합니다.




다음에 필요한 하둡 컴포넌트를 선택합니다(물론 지금 설치를 안하더라도 나중에 설치가 또 가능합니다.)




NEXT를 눌러서 진행하면 자동으로 하둡 컴포넌트들이 배포가 됩니다.



설치가 완료된 이후의 모습입니다. 물론 그전에 설치하지 않은 하둡컴포넌트 또한 추가가 가능합니다.

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


2016/03/08 - [Study/--Hadoop Eco(Apache/HDP)] - hbase table already exists


어제 관련된 몇가지 조치를 하다가 HDFS 내의 HBASE를 날렸는데오 존재하는 테이블이라 나와서 여러가지를 해보았는데,


결론은 Zookeeper에 Table남아있어서 생긴 결과였습니다. 


외국 해외포럼에서 찾아보니 좀비 테이블이라고 지칭하는데, 이걸 제거하는 방법은 Zookeeper Server 접속하며서 Hbase 노드에 있는 Table a목록중에 해당 테이블을 제거 하면 됩니다.



이번에 HBASE 쓰면서 느낀건.. 엄청 잘깨진다..

저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
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로 나누어서 돌리거나 그러는데... 약간 사이비이네요. 너무 불편했는데,, 어제 파이선이 보이는것입니다..

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

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

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

      감사합니다. :)

잠깐동안 예제를 따라해보면서 해본 느낌은.. 


잘 모르겠지만 엄청 간단합니다. 


먼저 Parallel Python에서 http://www.parallelpython.com/content/view/18/32/ 에서 다운 받아서, pp를 다운받아서, 돌아갈 머신과 마스터 노드에 python setup.py install 하면 끝..


그리고 사용방법은 계산노드(slave)에서 ppserver.py -a(auto discovery) 하면 끝.. 물론 포트를 지정해 준다면 -p 옵션을 사용하면됩니다. 


그런다음 마스터 노드에서 다음과 같은 방법으로 하면됩니다.  (지금 같은경우는 1master node, 1slave node로 구성된 케이스)



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()

#ppservers = ("10.0.0.1",)


slave서버를 입력 하는 방법인데 ppserver("*",) 이 방법은 Master노드와 같은 대역에 있을대 저렇게 하면, 자동으로 인식이됨 저 코드의 경우 1master node에서 1 slave노드에게 계산하라고 해서 callback 한 결과를 보여주고 있습니다. 


Job execution statistics:

 job count | % of all jobs | job time sum | time per job | job server

         1 |        100.00 |       0.0000 |     0.000000 | local

Time elapsed since server creation 0.00300002098083

1 active tasks, 8 cores


result is 499500

Job execution statistics:

 job count | % of all jobs | job time sum | time per job | job server

         1 |        100.00 |       0.0010 |     0.001000 | local

Time elapsed since server creation 0.00399994850159

0 active tasks, 8 cores



몇가지 궁금한게 생겼는데,, 결국에는 RabiitMq같은 Queue는 필요없을것 같은데,, 다중 노드는 어떻게 명령을 내려야되는거며, 어떻게 중간에 합치는게 따로 있나.  그리고 어짜피 쓰레드는 길(GIL)이 걸릴테니, 멀티프로세싱으로 하고 싶은데,, 이것도 되려나.. (답은 간단하더군요)

결론은 파이썬 신기합니다. . 

추가:: 방금전에 해본결과로는 결국에는 작동하는 로컬밖에 나오지 않았습니다. 
사실 몇가지 실험을 해보았는데, 결론은 다음과 같았다  이번에는 모든 10노드를 전부 기동시키고 
연산작업을... 한 1000개를 걸어보았습니다. 

Job execution statistics:
 job count | % of all jobs | job time sum | time per job | job server
        26 |         16.15 |      28.5401 |     1.097695 | 192.168.1.203:60000
        28 |         17.39 |      26.5884 |     0.949585 | 192.168.1.206:60000
         8 |          4.97 |       5.8869 |     0.735865 | 192.168.1.204:60000
         8 |          4.97 |       4.0038 |     0.500477 | 192.168.1.100:60000
         6 |          3.73 |       4.7484 |     0.791398 | 192.168.1.201:60000
        13 |          8.07 |      13.5061 |     1.038933 | 192.168.1.207:60000
        10 |          6.21 |      10.0583 |     1.005829 | 192.168.1.209:60000
        26 |         16.15 |      77.0360 |     2.962923 | local
        36 |         22.36 |      35.4551 |     0.984865 | 192.168.1.208:60000


결과는 다음과 같은데 10노드가 전부 활동하지는 않습니다... 예상에는 알아서 스케쥴링을 하거나, 현재의 상황을 찍었을때 찰나에는 다른 노드에서 일을하지 않고 있거나 그런것 같습니다. 

이 결과를 찾기 위해 이짓 저짓을 많이 해봤는데, 

어쩌면 이 당연한 사실을 찾기위해 몇시간을 순간 날렸네요.

결국은 파이썬이 신기하네요. 하지만 전 그래도 Java가 좋아요,,

스칼라도 공부해야되는데..





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

몇가지 처리해야할 작업이 있습니다. 


몇 가지 케이스에 대해 계속 테스트를 해보고 있지만. 이걸 Hadoop MapReduce로 처리하는것은 정말 성능이 안나오더군요. 흔히 말한는 반복적인 작업... 이걸 Storm, 또는 Spark를 통해 해결해 보고 싶지만. 현재 사정상 신규아키텍처를 도입하는데 문제가 있어서... 


물론,,, 현재 환경은 HDP(Hortonworks Data Platform)2.3 이기 때문에, 설치하거나 실행하는데, 문제는 아닙니다. Storm 같은경우 Topology를 만들면 되겠지만.. 약간 제가 생각하는 작업에는 불리할것 같고.. Spark쪽은 아직 제가 지식이 부족해서 시간대비 성과가 부족할것 같은 생각 때문입니다.


물론, 전 아직까지는 언어중에 Java가 좋지만, 요즘 왠만한 귀찮은 작업들은 Python으로 하고 있었는데(사실 과거에는 Perl도 배워보고 싶엇지만..) 너무 강력해서 계속 쓰게 되네요. 솔찍히 Java로 10줄 만들걸 파이선으로 3줄이면 표현이 되거든요..


사실 이렇게 하다가 고민이 생겼습니다. 다중 노드(현재 저 같은 경우는 10노드 + 추가 2노드) Produce Consumer 패턴?으로 로 작업을 병렬로 처리해보고 싶었는데, 이걸 프로그램으로 하나하나 만들기도 모하고,, 이러저런 고민이 많았는데,,


파이선이 해결해 주었네요 http://www.parallelpython.com/ 몇가지 고민은 Master Node에서 Slave 노드로 작업을 어떻게 넘겨주느냐 여부인데,, 자체적인 Queue가 있는것인지, 아님 외부 Queue를 이용해야하는지 봐봐야겠네요..


지금 RabbitMQ와 Kafaka를 동시에 보고 있는데,,, 제가 제대로 알고 있다면 Kafakfa는 Consumer에게 전달된 메세지가 어떤것인지에 대한 보장??꼭 UDP같은 성격이라... 의 문제가 있어서... 텍스트들을 보다 보면,, 케이스에 따라서는 RabbitMQ를 추천하시더군요 


일단은 이번포스팅의 목적은 파이선에서 병렬 처리를 쉽게 해주는 방법이 있는데,, 그것은 parallel python 입니다.


파이썬 짱짱,, 

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

현재 사용중인 리눅스는 Centos6 64bit 이고 MySQL 버전은 기본 5.1 버전입니다. 


5.7로 업그레이드 하기 위해서는 다음과 같은 절차로 진행하시면 되십니다. 


먼저 MySQL 사이트에 들어가서 RPM 을 바운받아 YUM repo를 추가합니다. 


http://dev.mysql.com/downloads/repo/yum/



MySQL ComunityMySQL Comunity



  1. wget http://dev.mysql.com/get/mysql57-community-release-el6-7.noarch.rpm :: 설치 
  2. /etc/init.d/mysqld stop :: mysql 정지 
  3. yum remove mysql mysql-server* 기존 mysql 삭제
  4. yum install mysql-server :: 5.7 설치 
  5. /etc/init.d/mysqld start ::  mysql 시작
    1. 만약 이때 failed 가 뜨면 tail /var/log/mysqld 확인해서 문제 요소 해결(저의 경우에는 [ERROR] unknown variable 'default-character-set=utf8' 이런 오류가 떠서, my.cnf에서 관련설정들을 주석 처리하였습니다..)
  6. mysql_upgrade -u root -p
  7. MySQL 사용


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
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

Sqoop2 가 있지만, 1이 익숙한 관계로 다음은 MySQL 에서 Hbase로 Migration 하는 예제 입니다. 



wget http://mirror.apache-kr.org/sqoop/1.4.6/sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

tar zxvf sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz

mv sqoop-1.4.6.bin__hadoop-2.0.4-alpha /usr/local/sqoop


vim /etc/profile

  export HBASE_HOME=/usr/local/hbase

  export SQOOP_HOME=/usr/local/sqoop

  export PATH=$PATH:$SQOOP_HOME/bin:$HBASE_HOME/bin:$PATH

source /etc/profile



 sqoop import --connect jdbc:mysql://127.0.01:3306/test --username root --password test --table bc_1  --split-by QKEy --table bc_1 --hbase-create-table --hbase-table test2 --column-family test23 







저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
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

HDP 가 정말로 좋지만, 요구 환경때문에, Apache Hbase를 사용하고 있습니다. (사실 몇몇 요구사항때문에 Hbase를 직접 컴파일하고 빌드한 상황이라, 바이너리를 받았으면 이런오류가 안생기실수도 있습니다)


참고로 제 환경은 Centos 6.6 64bit, Hbase 1.0.1.1 입니다. 



방금전에 문제 겪은것에 대해 해결방법을 포스팅합니다


2015-08-05 13:49:25,287 INFO  [root:16020.activeMasterManager] master.ServerManager: Waiting for region servers count to settle; currently checked in 0, slept for 9017 ms, expecting minimum of 1, maximum of 2147483647, timeout of 4500 ms, interval of 1500 ms


이 말은 무슨말이나면, 지금 클라이언트가 Hbase 에 Embemd된 zookeeper를 쓴다고해서 환경을 맞추려다가 생긴 문제인데, Zookeepr 올라가 Hmaster가 올라갔는데 리전서버들이 아직 연락이 없다 이말입니다. 한마디로 Hmaster만 대기 타고 있는 상황


그래서 리젼서버에서 무슨일이 있나 봤더니 


714 2015-08-05 13:49:54,134 ERROR [main] regionserver.HRegionServerCommandLine: Region server exiting

 715 java.lang.RuntimeException: Failed construction of Regionserver: class org.apache.hadoop.hbase.regionserver.HRegionServer

 716     at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2497)

 717     at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.start(HRegionServerCommandLine.java:64)

 718     at org.apache.hadoop.hbase.regionserver.HRegionServerCommandLine.run(HRegionServerCommandLine.java:87)

 719     at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70)

 720     at org.apache.hadoop.hbase.util.ServerCommandLine.doMain(ServerCommandLine.java:126)

 721     at org.apache.hadoop.hbase.regionserver.HRegionServer.main(HRegionServer.java:2511)

 722 Caused by: java.lang.reflect.InvocationTargetException

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

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

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

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

 727     at org.apache.hadoop.hbase.regionserver.HRegionServer.constructRegionServer(HRegionServer.java:2494)

 728     ... 5 more

 729 Caused by: java.net.BindException: Problem binding to root/XXXXX:16020 : Address already in use

 730     at org.apache.hadoop.hbase.ipc.RpcServer.bind(RpcServer.java:2373)

 731     at org.apache.hadoop.hbase.ipc.RpcServer$Listener.<init>(RpcServer.java:524)

 732     at org.apache.hadoop.hbase.ipc.RpcServer.<init>(RpcServer.java:1899)

 733     at org.apache.hadoop.hbase.regionserver.RSRpcServices.<init>(RSRpcServices.java:795)

 734     at org.apache.hadoop.hbase.regionserver.HRegionServer.createRpcServices(HRegionServer.java:575)

 735     at org.apache.hadoop.hbase.regionserver.HRegionServer.<init>(HRegionServer.java:492)

 736     ... 10 more

 737 Caused by: java.net.BindException: Address already in use

 738     at sun.nio.ch.Net.bind0(Native Method)

 739     at sun.nio.ch.Net.bind(Net.java:437)

 740     at sun.nio.ch.Net.bind(Net.java:429)

 741     at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)

 742     at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)

 743     at org.apache.hadoop.hbase.ipc.RpcServer.bind(RpcServer.java:2369)


16020 포트가 사용되고 있다고 나오는것입니다. 사용되서 내가 이포트를 써야겠는데 못쓰겠다. 

관련해서 오류를 찾아보니 포트가 중복되는 문제로 https://issues.apache.org/jira/browse/HBASE-10123

이런식으로 바꾼예제가 있는데, 제 기억에는 스택오버플로우에 있는게 기본포트였던것 같은데 아닌가 보더군요.. 


 <property > 
    <name>hbase.master.port</name> 
    <value>60000</value> 
  </property> 
  <property> 
    <name>hbase.master.info.port</name> 
    <value>60010</value> 
  </property> 
  <property> 
    <name>hbase.regionserver.port</name> 
    <value>60020</value> 
  </property> 
  <property> 
    <name>hbase.regionserver.info.port</name> 
    <value>60030</value> 
  </property> 


그래서 이런식으로 Hbase-site.xml에 집어넣고, Hbase를 작동시키니 정상작동하네요 



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


일단 환경은 HortonWorks HDP 플랫폼 위입니다.



Storm을 Kafaka의 Consumer로 Spout를 만드는데, 이게 오픈소스라 그런지는 몰라도 잔 버그가 많습니다. 


Strom-kafka : ava.lang.RuntimeException:java.lang.RuntimeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/topic_sdka/partitions


이런 당황스러운 오류가 Spout 쪽에서 날수가 있는데,


스택오버플로우에서는 버전을 맞추라느니, 뭐라느니,  그러는데 


결론은 Kafka, Storm, Zookeeper Restart 한다음에 다시 Topology 를 올리면 정상적으로 작동됩니다.


예전부터 하둡을 공부하면서 느끼는건 영문 자료보다, 중문자료가 볼만한게 정말 많네요 


http://www.aboutyun.com/blog-1328-2341.html (Reference) Thank you!!!


kafka-storm spout拉取数据问题offset out of range(todo)

已有 76 次阅读2015-5-8 14:54

<问题1>kafka-spout在拉取数据的时候,offset超出了范围

日志:

[WARN  2014-12-29 20:40:52 KafkaUtils:185 ASpout:3-MultipleThreadSpoutExecutors] Got fetch request with offset out of range: [232]; retrying with default start offset time from configuration. configured start offset time: [-2] offset: [0]

[WARN  2014-12-29 20:40:52 KafkaUtils:185 ASpout:3-MultipleThreadSpoutExecutors] Got fetch request with offset out of range: [239]; retrying with default start offset time from configuration. configured start offset time: [-2] offset: [0]

解决办法:

1.修改SpoutConfig.zkRoot 值

String zkRoot = "";

SpoutConfig spoutConf = new SpoutConfig(hosts, topic, zkRoot, id);

2.将spoutConf.forceFromStart 设为 true;

原因:

storm启动的时候,默认是从头读取-2,当kafkaspout的task出错时候,会重新启动,这时候offset就会从zk中最老的offset,但kafka数据只会保存一段时间,从zk中读取道德offset的数据可能已经不存在,超过现在的范围。

kafkaspout读取的3种选项

  -2: 从最老的开始读

  -1: 从最近的开始读

  0: 从Zk中读



问题2

日志:

java.lang.RuntimeException:java.lang.RuntimeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/topic_sdka/partitions
        at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:81)


Caused by: java.lang.RuntimeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/topic_sdka/partitions
        at storm.kafka.DynamicBrokersReader.getNumPartitions(DynamicBrokersReader.java:94)
        at storm.kafka.DynamicBrokersReader.getBrokerInfo(DynamicBrokersReader.java:65)
        ... 13 more
Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/topics/topic_sdka/partitions
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:111)



问题3:启动kafka server cluster的时候,某个节点启动失败

解决方法:重启所有节点的zookeeper,kafka,问题解决

<详细>

[hadoop@node3 bin]$ ./kafka-topics.sh --create --zookeeper 192.168.11.222:2181,192.168.11.221:2181,192.168.11.220:2181 --replication-factor 1 --partitions 3  --topic topic1
Error while executing topic command org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
org.I0Itec.zkclient.exception.ZkNoNodeException: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
        at org.I0Itec.zkclient.exception.ZkException.create(ZkException.java:47)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:685)
        at org.I0Itec.zkclient.ZkClient.getChildren(ZkClient.java:413)
        at org.I0Itec.zkclient.ZkClient.getChildren(ZkClient.java:409)
        at kafka.utils.ZkUtils$.getChildren(ZkUtils.scala:480)
        at kafka.utils.ZkUtils$.getSortedBrokerList(ZkUtils.scala:81)
        at kafka.admin.AdminUtils$.createTopic(AdminUtils.scala:154)
        at kafka.admin.TopicCommand$.createTopic(TopicCommand.scala:86)
        at kafka.admin.TopicCommand$.main(TopicCommand.scala:50)
        at kafka.admin.TopicCommand.main(TopicCommand.scala)
Caused by: org.apache.zookeeper.KeeperException$NoNodeException: KeeperErrorCode = NoNode for /brokers/ids
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:102)
        at org.apache.zookeeper.KeeperException.create(KeeperException.java:42)
        at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1249)
        at org.apache.zookeeper.ZooKeeper.getChildren(ZooKeeper.java:1277)
        at org.I0Itec.zkclient.ZkConnection.getChildren(ZkConnection.java:99)
        at org.I0Itec.zkclient.ZkClient$2.call(ZkClient.java:416)
        at org.I0Itec.zkclient.ZkClient$2.call(ZkClient.java:413)
        at org.I0Itec.zkclient.ZkClient.retryUntilConnected(ZkClient.java:675)
        ... 8 more



【resovle】 
1.restart kafka cluster
<node1>
[2015-01-16 13:58:49,929] INFO Initiating client connection, connectString=192.168.11.222:2181,192.168.11.221:2181,192.168.11.220:2181 sessionTimeout=6000 watcher=org.I0Itec.zkclient.ZkClient@68098843 (org.apache.zookeeper.ZooKeeper)
[2015-01-16 13:58:49,950] INFO Opening socket connection to server /192.168.11.221:2181 (org.apache.zookeeper.ClientCnxn)
[2015-01-16 13:58:49,956] INFO Socket connection established to node2.ssjs/192.168.11.221:2181, initiating session (org.apache.zookeeper.ClientCnxn)
[2015-01-16 13:58:49,982] INFO Session establishment complete on server node2.ssjs/192.168.11.221:2181, sessionid = 0x24ac286ad2c0dc6, negotiated timeout = 6000 (org.apache.zookeeper.ClientCnxn)
[2015-01-16 13:58:49,987] INFO zookeeper state changed (SyncConnected) (org.I0Itec.zkclient.ZkClient)
[2015-01-16 13:58:50,032] INFO Registered broker 1 at path /brokers/ids/1 with address 192.168.11.222:9092. (kafka.utils.ZkUtils$)
[2015-01-16 13:58:50,040] INFO [Kafka Server 1], Connecting to ZK: 192.168.11.222:2181,192.168.11.221:2181,192.168.11.220:2181 (kafka.server.KafkaServer)
[2015-01-16 13:58:50,192] INFO Will not load MX4J, mx4j-tools.jar is not in the classpath (kafka.utils.Mx4jLoader$)
[2015-01-16 13:58:50,259] INFO conflict in /controller data: 1 stored data: {"version":1,"brokerid":3,"timestamp":"1421387751644"} (kafka.utils.ZkUtils$)
[2015-01-16 13:58:50,265] FATAL Fatal error during KafkaServerStable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
java.lang.NumberFormatException: For input string: "{"version":1,"brokerid":3,"timestamp":"1421387751644"}"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:492)
        at java.lang.Integer.parseInt(Integer.java:527)
        at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:229)
        at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
        at kafka.server.ZookeeperLeaderElector.elect(Unknown Source)
        at kafka.server.ZookeeperLeaderElector.startup(Unknown Source)
        at kafka.controller.KafkaController.startup(Unknown Source)
        at kafka.server.KafkaServer.startup(Unknown Source)
        at kafka.server.KafkaServerStartable.startup(Unknown Source)
        at kafka.Kafka$.main(Unknown Source)
        at kafka.Kafka.main(Unknown Source)
[2015-01-16 13:58:50,271] INFO [Kafka Server 1], Shutting down (kafka.server.KafkaServer)


<good_node2>
[2015-01-16 14:17:57,401] INFO 2 successfully elected as leader (kafka.server.ZookeeperLeaderElector)
[2015-01-16 14:17:57,605] INFO Registered broker 2 at path /brokers/ids/2 with address 192.168.11.221:9092. (kafka.utils.ZkUtils$)
[2015-01-16 14:17:57,625] INFO [Kafka Server 2], started (kafka.server.KafkaServer)
[2015-01-16 14:17:57,779] INFO New leader is 2 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)




KafkaServer.startup()
kafkaController = new KafkaController(config, zkClient)


restart zk,kafka<node1>
[2015-01-16 15:19:33,273] INFO zookeeper state changed (SyncConnected) (org.I0Itec.zkclient.ZkClient)
[2015-01-16 15:19:33,318] INFO Registered broker 1 at path /brokers/ids/1 with address 192.168.11.222:9092. (kafka.utils.ZkUtils$)
[2015-01-16 15:19:33,319] INFO [Kafka Server 1], Connecting to ZK: 192.168.11.222:2181,192.168.11.221:2181,192.168.11.220:2181 (kafka.server.KafkaServer)
[2015-01-16 15:19:33,474] INFO Will not load MX4J, mx4j-tools.jar is not in the classpath (kafka.utils.Mx4jLoader$)
[2015-01-16 15:19:33,543] INFO conflict in /controller data: 1 stored data: {"version":1,"brokerid":2,"timestamp":"1421389077341"} (kafka.utils.ZkUtils$)
[2015-01-16 15:19:33,549] FATAL Fatal error during KafkaServerStable startup. Prepare to shutdown (kafka.server.KafkaServerStartable)
java.lang.NumberFormatException: For input string: "{"version":1,"brokerid":2,"timestamp":"1421389077341"}"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:492)
        at java.lang.Integer.parseInt(Integer.java:527)
        at scala.collection.immutable.StringLike$class.toInt(StringLike.scala:229)
        at scala.collection.immutable.StringOps.toInt(StringOps.scala:31)
        at kafka.server.ZookeeperLeaderElector.elect(Unknown Source)
        at kafka.server.ZookeeperLeaderElector.startup(Unknown Source)
        at kafka.controller.KafkaController.startup(Unknown Source)
        at kafka.server.KafkaServer.startup(Unknown Source)
        at kafka.server.KafkaServerStartable.startup(Unknown Source)
        at kafka.Kafka$.main(Unknown Source)
        at kafka.Kafka.main(Unknown Source)



restart node1~node3:zk,kafka
resolved!!<session timeout> 



저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
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



Unhandled exception. Starting shutdown.

org.apache.hadoop.hbase.TableExistsException: hbase:namespace

at org.apache.hadoop.hbase.master.handler.CreateTableHandler.prepare(CreateTableHandler.java:120)

at org.apache.hadoop.hbase.master.TableNamespaceManager.createNamespaceTable(TableNamespaceManager.java:230)

at org.apache.hadoop.hbase.master.TableNamespaceManager.start(TableNamespaceManager.java:85)

at org.apache.hadoop.hbase.master.HMaster.initNamespace(HMaster.java:1059)

at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:920)

at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:606)

at java.lang.Thread.run(Thread.java:744)




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

Hadoop 2.6.0

Hbase 0.98.9

zookeeper 3.4.6



Hbase를 정상적으로 제대로 설치하였는데, Master가 작동 안하고 , stop-hbase.sh 할 경우 Regionserver 종료되지 않을 때의 해결 방법 중 하나 입니다. (어떤 원인이 있을지 모르기 때문에) 


저 같은 경우는 저 오류가 발생하고, 그 아래에는(로그가 지워져서) Master가 실행이 안된다는 메세지가 나옵니다. 


http://community.cloudera.com/t5/Storage-Random-Access-HDFS/HMaster-not-starting-TableExistsException/td-p/11466


해결 방법은 정말로 간단합니다. Zkcli.sh Zookeer로 들어가서  -rmr  hbase 하신 다음 hbase를 다시 실행해보시면 저 문제는 정상적으로 해결이 됩니다. 

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




몇일간 R에 대해서 수업 들으면서 느낀것..


빅데이터 분석으로 R은 만능은 아님(R자체가 데이터를 메모리에 로드해서 사용하기 때문에 만약 컴퓨터가 가진 메모리보다 데이터가 크다면..?) --> 이래서 데이터를 읽어올때 한줄씩 읽어오는 방법도 사용

    --> 때에 따라서는 전처리 단계 필요, 또 R이 오픈소스 이다보니까, R에서 전처리 단계에서 속도가 느려서 

          이를 개선한 Revolution R(현재 7버전) 이라는게 있음,,(유료인가..?..)

    또는 하둡을 이용해서 해결, Rhive, Rhadoop, 등등 

    ++ Java에서 R호출가능, R에서 자바호출가능(?)



그런데 어느정도 전처리된 단계가 있고 R로 처리를 하면 자동적으로 환상적인 Visualization 대박인듯..

(할게 많구나..)


R관련 재미있는 사이트 : http://www.rdatamining.com/







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

'Study > R programming' 카테고리의 다른 글

R 프로그래밍  (0) 2014.08.11
R 프로그래밍  (0) 2014.07.27



사실, 졸업전에 어떻게 기회가 되어서 R프로그래밍을 배우고 있습니다. 전,, 여태까지 R 프로그래밍이 Hadoop MapReduce를 쉽게 하기 위한 방법론? 또는 그런 제품, 관련된거라고 생각했는데, 정말로 잘못알고 있었던거네요. 물론 외국쪽에 자료가 많겠지만. 


국내쪽 커뮤티니 주소 첨부합니다. 

http://r-project.kr/ R 한국 사용자모임

https://www.facebook.com/groups/krstudy/ 페이스북 R 사용자 그룹



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

'Study > R programming' 카테고리의 다른 글

R 프로그래밍  (0) 2014.08.11
R 프로그래밍  (0) 2014.07.27

Type mismatch in key from map: expected org.apache.hadoop.io.LongWritable, recieved org.apache.hadoop.io.Text


역시 구글, 타입을 지정안해서 나는 오류 였습니다.

스택오버플로 짱 


Add these 2 lines in your code :

job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(IntWritable.class);

You are using TextOutputFormat which emits LongWritable key and Text value by default, but you are emitting Text as key and IntWritable as value. You need to tell this to the famework.

HTH


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License
  1. Favicon of http://merrow.tistory.com BlogIcon 명가공인 2014.04.25 17:06 신고

    와우~ 눈이 휙휙 돌아 갑니다.^^;;
    저는 프로그래밍쪽은 잘 몰라서 그런지 이런거 하시는 분이 부럽습니다.

    • Favicon of http://redeyesofangel.tistory.com BlogIcon Yuika eizt 2014.04.28 18:05 신고

      저 말고 잘하는분들 더 많으세요.

      전 학생이다 보니. ㅎㅎㅎ

      즐거운 하루되세요

FileSystem fs = FileSystem.get(conf);
Path pt = new Path("/path");
ContentSummary cs = fs.getContentSummary(pt);
long fileCount = cs.getFileCount();

https://stackoverflow.com/questions/20381422/file-count-in-an-hdfs-directory


MapReduce 프로그래밍 중간에, 생성되는 파일의 갯수를 알아야 했는데, 생각보다 쉬운방법이 있네요.


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

원본 : http://stevemorin.blogspot.kr/2009/07/hadoop-stop-single-tasktracker-node-how.html


Here is how to stop a single tasktracker node in a hadoop cluster.

/usr/local/hadoop/bin/hadoop-daemon.sh --config /usr/local/hadoop/bin/../conf stop tasktracker






원본 : http://stevemorin.blogspot.kr/2009/07/example-how-to-stop-single-hadoop.html


Here is how to stop a single tasktracker node in a hadoop cluster.

/usr/local/hadoop/bin/hadoop-daemon.sh --config /usr/local/hadoop/bin/../conf stop tasktracker

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

Flume에서 agnet -> agent로 연결할때 ,

org.apache.flume.EventDeliveryException: Failed to send events 이러한 오류가 난다면.

받는 agent 쪽에서 bind-ip를 잘못 설정 하셨습니다. 

저같은경우는 bind ip = localhost, 127.0.0.1 하였는데

 bind.ip 0.0.0.0으로 하시면 되실것 같습니다.



제가 사용하는 Flume 버전은 Flume-NG 1.4.0 입니다

flume-ngflume-ng





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

in hdfs-site.xml 


<property>
    <name>dfs.permissions</name>
    <value>false</value>
  </property>


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

http://www.jaso.co.kr/265


일딴 김형준님의 블로그 요걸 보시면 편하게 이해하실수 있습니다. 

일종의 사전지식이랄까.


일단 이글을 보시는 분들은 아마 저보다는 잘하시는 분들이실겁니다. 전 요즘 이것때문에 죽겠거든요

전,, 도저히 저걸 봐도, 하둡 돌아가는게 안보인느것입니다.


일단 제가 필요한 로그은 getsplit 하고 recodereader 이거 맞나요 직접 구현하는 부분이.

일단 메인클레스 내부에서는 sysout 찍어버리면 보이는데, 재내들은 그 안에 있으니 보이지도 않고

그래서 제가 선택한 방법은 log4j 입니다.


http://blog.naver.com/PostView.nhn?blogId=airguy76&logNo=150087115029&categoryNo=3&viewDate=&currentPage=1&listtype=0

산소소년님의 블로그


여기를 참고했습니다.


저는 이번에 log4j 를 처음사용했거든요, 물론 제 블로그의 특성상 제가 이해하고 있지 못한 관점에서 즉 나말고 다른분도 계실꺼라는걸 가정하고,


일단 저는 맵리듀스 프로그래밍을 공부할때 이클립스를 사용하거든요 log4j 설정 파일properties 이걸 어디에 넣냐 이것이 문제였습니다.


웹상에서 보면 src 에 넣어라 bin에 넣어라..


그런데 맵리듀스 프로그래밍을 하면 넣을 필요가 없다가 정답인것 같습니다 일단 제 관점에서는요.


$hadoop_HOME 하둡 폴더 안에 보시면 conf 폴더가 있고 그안에 properties 파일이 있는걸 보실수 있는데 맵리듀스 프로그래밍을 하기위해서 만드는 jar도 여기서 영향을 받네요.


그런데 하둡 특성상 여러 클러스터 안에서 돌아가니까. 로그가 그안에 생길꺼고 로그생성위치가. 아 적어놓는다는걸 이부분은 다음에 적어놓겠는데, 어디냐면 제 기억에, hdfs 폴더 지정하지 않나요 거기 보면 잡관련 로그들 남는부분 아마 뒤져보셨다면 syserr sysout 막 파일들 생기는곳 그 sysout 파일안에 생겼던걸로 기억합니다. 이건 다시한번 확인해봐야겠네요 


그래서 저는 산소소년님의 블로그 따라서 log4j에서 소켓으로 한곳으로 모을수가 있더근요 하둡 conf 안에 properties 설정에서


log4j.rootLogger=${hadoop.root.logger}, EventCounter,socket

log4j.appender.socket=org.apache.log4j.net.SocketAppender
log4j.appender.socket.Threshold=FATAL
log4j.appender.socket.RemoteHost=192.168.0.1
log4j.appender.socket.Port=8081
log4j.appender.socket.layout=org.apache.log4j.PatternLayout
log4j.appender.socket.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} [%p] %t %c{2}: %m%n
설정하고

받는 소켓은 FATAL로 했습니다.(저는 맵리듀스가 어덯게 돌아가고싶은지 보고싶어서요.) 안그러면 잡스러운것이 다 날라노더군요 .

그리고 이걸 받는 서버에서는

log4j.rootLogger=FATAL, stdout

#delete filewrite


#stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d{yy/MM/dd HH:mm:ss} [%p] %t %c{2}: %m%n


이렇게해서 socket_log.properties 라는 설정파일 하나 만들고요 위치는 상관없습니다.
 java -classpath ./log4j-1.2.17.jar org.apache.log4j.net.SimpleSocketServer 8081 socket_log.properties

실행할때는 log4j로 실행하여서 서버를 열고 맵리듀를 돌리면, 소켓으로 로그들이 날라오시는걸 볼수 있습니다.


그런데 아직 제가 이해가 안가는건 getsplit부분은 왜 로그가 안날라오는지 이해가 안가네요 . 제가 하둡구조를 잘못이해하는걸수도 있는데,,, 

혹시 하둡사용하시는 분들중에서 어떻게 하면 맵리듀스로그를 쉽게 볼수 있는지 공유해주신다면 감사하겠습니다.





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

+ Recent posts

티스토리 툴바