반응형

 

특정 경로에 다음과 같은 데이터가 있다고 치자.

drwxr-xr-x   - irteam irteam          0 2018-12-01 00:03 /log/de_log/2018
drwxr-xr-x   - irteam irteam          0 2019-05-01 00:02 /log/de_log/2019

 

특정 경로 아래의 directory별로 사이즈를 볼 때

hadoop fs -du -h /log/de_log

3.1 T  9.4 T  /log/dmp_log/2018
1.3 T  3.9 T  /log/dmp_log/2019

 

특정 경로 directory 사이즈를 볼 때

hadoop fs -du -s -h /log/dmp_log

4.4 T  13.3 T  /log/de_log

 

반응형
반응형

쉘스크립트에서 특정 문자열을 기준으로 앞,뒤 문자열을 가지고 오고 싶을 경우 다음과 같이 사용하면된다.

 

%%{특정문자열}* => 해당 문자열 기준 앞 부분을 가져온다. 

#*{특정문자열} => 해당 문자열 뒷 부분을 가져온다.

[ 결과 ]

hello my youtube is I'm developer
hello my youtube
I'm developer

반응형
반응형

리눅스 쉘스크립트(shell script)에서 wc -l로 파일 line수 읽어 변수에 담기

[ Linux Getting the line count and sotring in a result set in shell script ]

 

FILE_ROW_COUNT=$(cat $FILE_PATH | wc -l)

반응형
반응형

보통 어플리케이션 CPU, Load Average가 비정상적으로 높게 튈 때

스레드덤프(thread dump)를 떠서 많이들 보실 텐데요.

jstack PID > 파일명.dump

이렇게 생성된 dump파일을 콘솔에서 분석하기는 매우 힘이듭니다.

이런 덤프파일을 무료로 분석해주고 이쁜(?) 시각화까지 진행해주는 사이트 공유드립니다.

https://fastthread.io

 

fastthread.io

Beyond APM Application Performance Monitoring (APM) tools are great at telling that your application's CPU spiked up by x%, your memory degraded by y%, your response time increased by z milliseconds. But it won't tell you what caused the CPU to spike? what

fastthread.io

해당 사이트에 들어가셔서 dump뜬 파일을 업로드 해주시기만 하면

다음과 같이 분석된 자료를 보기좋은 UI를 통해 제공받으실수 있습니다.(Time Waiting 안습 ㅠ.ㅠ, 분석도중 올립니다)

 

그럼 저는 다시 분석하러~뿅~!

반응형
반응형
  • 역설적이게도 우리에게 가장 큰 상처를 주는 사람은 우리가 가장 사랑하고 아끼던 사람이다. 하지만 어쩌면 그건 당연한 일이기도 하다. 마음의 상처라는 것은 함께한 시간의 길이에 비례하기 때문이다.

  • 상대에게 어떤 큰 문제가 생겼을 때 곧바로 어떤 해결책을 제시하는 것은 그리 현명한 방법이 아니다. 아무리 오랜 시간을 함께한 친구라도 우리는 그 친구가 지금 어떤 상황에 처했는지, 어떤 기분인지 정확히 알 수는 없기 때문이다.

  • 말센스란 적재적소에 필요한 말을 필요한 만큼만 하는 것이다. 그것은 또 내가 말하고자 하는 욕구를 잠시 내려놓은 다음, 상대를 바라보고 들어주는 것이며, 상대가 진심으로 하고 싶은 말을 끌어내는 것이다.

  • 나의 본심을 전달하면서도 누군가의 진심을 제대로 알고 싶다면 말하기보다는 들어주고, 재촉하기보다는 기다려주고, 논쟁하기보다는 공감하는 것이 필요하다. 이것이야말로 진정한 의미의 말센스다.

  • 내가 얼마나 자주 다른 사람들의 상실과 고난에 대한 이야기를 내 자신의 경험과 관련된 이야기로 맞받아쳤는지 인식하기 시작했다.

  • 누군가가 우리에게 이야기를 할 때, 우리의 두뇌는 자동적으로 비슷한 경험에 대한 기억들을 훑고 지나간다고 한다. 어쩌면 관심을 자신의 경험으로 되돌리려는 성향은 사실 매우 자연스런 본능이다. 

  • 대부분의 경우 당신은 상대의 이갸이와 당신 자신의 경험을 비교함으로써 상대를 이해하려 든다. 

  • 어떠한 말을 함으로써 당신이 더 편안하면 편안할수록 상대의 고통에 공감하는 일은 그만큼 더 힘들어진다.

  • 대부분의 경우 대화의 초점을 나에게 되돌리는 행위는 상대에게 도움이 되기보다 해를 끼칠 가능성이 더 높다. 

  • 로마 시대의 정치가이자 철학자 카토는 이렇게 말했다. "나는 말하는 것이 침묵하는 것보다 좋다는 확인이 들때에만 말한다."

  • 왜 사람들은 상대가 물어보지 않는 것조차 길게 설명하려고 할까? 그 이유는 두 가지인데, 하나는 상대에게 충고나 조언을 함으로써 그 사람을 통제하고 싶은 것이고(통제병), 다른 하나는 그렇게 함으로써 상대로부터 관심이나 인정을 받고 싶은 것이다(관심병)

  • 무언가 배우려는 태도로 모든 대화에 임한다면, 당신은 결코 실망하지 않을 것이다. 

  • 자기 견해를 분명히 표현하고 싶다면 블로그에다 글을 써라. 하지만 상대방과 대화를 나누고 싶다면 자신의 견해를, 최소한 잠시 동안만이라도, 한편으로 치워놓아야 한다. 

  • 질문에는 대화를 이끌어가는 실로 강력한 힘이 담겨 있다. 질문은 당신의 배려를 나타내고, 상대를 향한 관심과 사랑을 표현하는 것이다. 

  • 장담하건대, 당신은 질문을 주고받음으로써 온갖 종류의 개인적인 사실들에 대해 알게 될 것이고, 당신이 알지 못했던 새로운 이야기를 듣게 되는 즐거운 경험도 하게 될 것이다. 질문은 상대와의 거리를 좁힐 뿐 아니라, 내가 가진 경험과 지식의 한계를 뛰어넘게 만들어 주기도 한다. 

  • 모르는 것은 부끄러운 것이 아니다. 진짜로 부끄로운 것은 모르는 것을 아는 척하는 것이다.

  • 내가 직접 경험하지 않았거나 확실하게 모르는 것에 대해서는 정직하게 모른다고 해야 한다.

  • 대화는 관계의 기반이며, 관계는 신뢰를 토대로 한다. 당신은 '자기 자신의 한계에 대해 더 솔직해지면 질수록, 사람들이 당신의 의견에 그만큼 더 무게를 둔다'는 사실을 발견하게 될 것이다. 그러니 무언가에 대해 잘 모를 때는, 솔직히 "잘 모릅니다"라고 말하라. 이 말이 당신과 상대 사이의 유대감을 강화시켜줄 것이다. 

  • 좋은 말도 되풀이해서 들으면 듣기 싫어지는데, 듣기 싫은 말을 되풀이했으니 얼마나 듣기 싫었겠는가. 반복은 어떻게 보면 제자리걸음과도 비슷하다. 흥미롭지도 않은 데다 더 이상 앞으로 나아가지도 않기 때문이다.

  •  앞으로 무슨 일이 일어날지, 어떻게 대처하는 것이 좋은지 있는 그대로 솔직하게 설명하라. "제가 짧은 인트로를 읽은 뒤 당신을 소개할 겁니다. 대화에 할당된 시간은 약  12분 정도이고, 순식간에 지나갈테니, 되도록이면 간단명료하게 답변해주세요. 제가 당신을 향해 고개를 끄덕이거나 손가락을 올리는 건, 세그먼트를 끝낼 시간이라는 뜻이니, 하시던 말을 정리해주시면 됩니다" 몇 안 되는 이 문장만으로도, 무슨 일이 일어날지 몰라 불안에 떠는 게스트를, 상황을 완전히 파악한 채 차분히 대화에 임하는 게스트로 바꿔놓기에 충분하다.

  • 공감은 연민과 매우 다르다. 연민은 "나는 당신을 동정 합니다"라고 말하는 능력이다. 하지만 공감은 "나는 당신과 아픔을 같이합니다"라고 말하는 능력이다. 

  • 배려라는 것이 특별한 것이 아니다. 다른 사람을 이해하고자 하는 의지, 그 사람의 마음에 공감하려는 태도가 바로 배려다. 하지만 그러한 의지와 태도는 진심에서 우러난 것이어야 한다. 

반응형
반응형

오늘 날짜가 2019년 4월 12일경우

 

hive 하이브

date_sub(FROM_UNIXTIME(UNIX_TIMESTAMP(),'yyyy-MM-dd') , 1)

>> 2019-04-11

 

impala 임팔라

to_date(date_sub(now(), 1))

>> 2019-04-11

반응형
반응형

Shell Script에서 특정 날짜 조건으로 배치성 작업을 처리할 일이 있어 원하는 날짜 범위에 맞게 처리되는지 확인하기 위해

 

다음과 같이 찍어보았다.

#!/bin/bash

for i in `seq 0 30`; do
        echo `date + %Y%m%d -d "20190322 -$i days"`; done

쉘스크립트를 실행해보면 

date: extra operand `%Y%m%d'
Try `date --help' for more information.

다음과 같이 뜬다.

 

문제는 date +%Y%m%d 시에 '+'와 날짜포맷사이에 공백이 있으면 안된다!!!

echo `date +%Y%m%d -d "20190322 -$i days"`; done

$ sh batch_conv_buy_insert.sh
20190401
20190331
20190330
20190329
20190328
20190327
20190326
20190325

원하는 범위의 date가 출력되는 것을 확인할 수 있다.

반응형
반응형

스프링부트 프로젝트 생성 후 어플리케이션을 실행시켰는데 에러없이 실행되자마자 종료되는 경우가 있다. 

 


Process finished with exit code 0

라고 뜨며 어플리케이션이 바로 종료되어버린다.

스프링부트는 임베디드톰캣 기반으로 실행되는데 임베디드컨테이너의 클래스패스를 못잡아줘서 그런 것 같다.

따라서 메이븐에 다음과 같이 의존성을 추가해준다.

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

<dependency>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

반응형
반응형


스파크(Spark) 작업 중 평소에 잘돌던 잡이 갑자기


특정 노드에서의 문제로 작업이 중단됬거나 제대로 돌지 않았을 경우는 해당 노드의 디스크폴트(disk fault)를 의심해보아야 한다.


최근 잡이 실패해 해당 잡의 로그를 보았더니 다음과 같은 에러가 찍혔다.


Exception in thread "main" org.apache.spark.SparkException: Job aborted due to stage failure: Task 8 in stage 1.0 failed 4 times, most recent failure: Lost task 8.3 in stage 1.0 (TID 374, datanode-10.svr.maker.net):

com.esotericsoftware.kryo.KryoException: java.io.IOException: Stream is corrupted

        at com.esotericsoftware.kryo.io.Input.fill(Input.java:142)

        at com.esotericsoftware.kryo.io.Input.require(Input.java:155)

        at com.esotericsoftware.kryo.io.Input.readInt(Input.java:337)

        at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:109)

        at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:610)

        at com.esotericsoftware.kryo.Kryo.readClassAndObject(Kryo.java:721)

        at org.apache.spark.serializer.KryoDeserializationStream.readObject(KryoSerializer.scala:192)

        at org.apache.spark.serializer.DeserializationStream.readKey(Serializer.scala:169)

        at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:201)

        at org.apache.spark.serializer.DeserializationStream$$anon$2.getNext(Serializer.scala:198)

        at org.apache.spark.util.NextIterator.hasNext(NextIterator.scala:71)

        at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)

        at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)

        at org.apache.spark.util.CompletionIterator.hasNext(CompletionIterator.scala:32)

        at org.apache.spark.InterruptibleIterator.hasNext(InterruptibleIterator.scala:39)

        at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)

        at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)

        at scala.collection.Iterator$$anon$13.hasNext(Iterator.scala:371)

        at scala.collection.Iterator$$anon$11.hasNext(Iterator.scala:327)

        at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala:209)

        at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala:73)

        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:73)

        at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala:41)

        at org.apache.spark.scheduler.Task.run(Task.scala:88)

        at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)

        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)

        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)

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

Caused by: java.io.IOException: Stream is corrupted

        at net.jpountz.lz4.LZ4BlockInputStream.refill(LZ4BlockInputStream.java:153)

        at net.jpountz.lz4.LZ4BlockInputStream.read(LZ4BlockInputStream.java:117)

        at com.esotericsoftware.kryo.io.Input.fill(Input.java:140)

        ... 27 more


데이터노드에서 com.esotericsoftware.kryo.KryoException: java.io.IOException: Stream is corrupted exception이 발생하며


잡이 정상적으로 돌지 않았다. 그래서 해당 서버를 모니터링 하는 사이트에 들어가서 확인해봤더니 딱히 별다른 이슈가 없었지만 이전에도


상태는 정상이나 disk fault로 비슷한 상황이 발생한 적이 있었기에 시스템팀에 문의해보았더니 역시나 디스크폴트(disk fault)문제였다.


정확히는 하드웨어 폴트는 확인 되지 않고 OS에서만 컨트롤러 및 디스크 장애가 있다고 전달받았다.


따라서 평소에 잘 돌던 작업이 특정노드를 원인으로 돌지않았다면 장비를 의심해보시길!!!

반응형

+ Recent posts