parquet는 성능이 좋은 것으로 알려져 있지만, 일반 텍스트로 볼 수 없다는 단점이 있다..


그러나 기능적으로 봤을 overwrite를 할 수 있다는 점에서.. parquet가 많이 쓰여질 것 같다.




로컬 장비에서 parquet 테스트는 다음처럼 진행 할 수 있다. 



scala> val ds = Seq(1, 2, 3, 4, 5).toDS

ds: org.apache.spark.sql.Dataset[Int] = [value: int]


scala> ds.write.parquet("/usr/local/spark-2.1.0-bin-hadoop2.7/test1")

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

SLF4J: Defaulting to no-operation (NOP) logger implementation

SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.


scala> val fromParquet = spark.read.parquet("/usr/local/spark-2.1.0-bin-hadoop2.7/test1")

fromParquet: org.apache.spark.sql.DataFrame = [value: int]


scala> fromParquet

res2: org.apache.spark.sql.DataFrame = [value: int]


scala> fromParquet.show

+-----+

|value|

+-----+

|    1|

|    2|

|    3|

|    4|

|    5|

+-----+



Posted by '김용환'
,


일래스틱서치 5.0부터 elasticsearch.yml에 index.routing.allocation.total_shards_per_nod 속성을 저장할 수 없다. 


elasticsearch.yml에 index.routing.allocation.total_shards_per_node 속성을 설정하려 한다면 일래스틱서치 노드의 로그 파일에서 다음과 같은 에러가 나타날 것이다.



[2017-05-25T20:32:09,248][WARN ][o.e.c.s.SettingsModule   ] [5OEGj_a]

*************************************************************************************

Found index level settings on node level configuration.


Since elasticsearch 5.x index level settings can NOT be set on the nodes

configuration like the elasticsearch.yaml, in system properties or command line

arguments.In order to upgrade all indices the settings must be updated via the

/${index}/_settings API. Unless all settings are dynamic all indices must be closed

in order to apply the upgradeIndices created in the future should use index templates

to set default values.


Please ensure all required values are updated on all indices by executing:


curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{

  "index.routing.allocation.total_shards_per_node" : "4"

}'

*************************************************************************************



[2017-05-25T20:32:09,252][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalArgumentException: node settings must not contain any index level settings
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:127) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:58) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.cli.Command.main(Command.java:88) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) ~[elasticsearch-5.3.1.jar:5.3.1]
Caused by: java.lang.IllegalArgumentException: node settings must not contain any index level settings
at org.elasticsearch.common.settings.SettingsModule.<init>(SettingsModule.java:132) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.node.Node.<init>(Node.java:342) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.node.Node.<init>(Node.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap$6.<init>(Bootstrap.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:242) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:360) ~[elasticsearch-5.3.1.jar:5.3.1]
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) ~[elasticsearch-5.3.1.jar:5.3.1]





인덱스이름/_settings api를 동적으로 호출해 노드 당 전체 샤드 개수를 설정할 수 있다.


$ curl -XPUT 'localhost:9200/person/_settings' -d '{

 "index.routing.allocation.total_shards_per_node": "4"

}'




잉ㄹ래스틱서치의 예외에서 나온 내용처럼 모든 인덱스에 대한 설정을 수정하려면 다음처럼 호출할 수 있다. 


curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{

  "index.routing.allocation.total_shards_per_node" : "4"

}'



Posted by '김용환'
,



transient 가 있다. 


일래스틱서치에는 단일 호출에 여러 속성을 포함할 수 있다. 


커맨드의 transient라는 이름은 클러스터를 다시 시작한 후에는 해당 속성을 잊어 버린다는 것을 의미한다.


curl -XPUT 'localhost:9200/_cluster/settings' -d '{

 "transient" : {

  "cluster.routing.allocation.require.group": "group1"

 }

}'




재시작 후에 해당 속성을 잊는 것을 피하고 영구적으로 설정하려면 transient 속성 대신 persistent를 사용한다. 


curl -XPUT 'localhost:9200/_cluster/settings' -d '{

 "persistent" : {

  "cluster.routing.allocation.require.group": "group1"

 }

}'





https://www.elastic.co/guide/en/elasticsearch/reference/current/cluster-update-settings.html

Posted by '김용환'
,


이 코드는 zipWithIndex와 for-yield 문, if문을 잘 설명하는 코드이다. 


scala> def occurrencesOf[A](elem:A, collection:List[A]):List[Int] = {

     |   for {

     |     (currentElem, index) <- collection.zipWithIndex

     |     if (currentElem == elem)

     |   } yield index

     | }

occurrencesOf: [A](elem: A, collection: List[A])List[Int]


scala>


scala> occurrencesOf(10, List(0,1,2,3,4,10))

res0: List[Int] = List(5)




occurrencesOf(10, List(0,1,2,3,4,10)) 코드를 설명한다.


collection.zipWithIndex 은 다음과 같은 값을 리턴한다.


((List(0), 0), (List(1), 1), (List(2), 2), (List(3), 3), (List(4), 4), (List(10), 10))


그러다다 elem으로 들어온 10 값을 만나면 관련 index 값 10을 리턴한다. 






'scala' 카테고리의 다른 글

[spark] spark streaming job 개발시 유익한 싸이트  (0) 2017.06.07
[spark] parquet 사용 예제  (0) 2017.05.26
[spark] join 예제  (0) 2017.05.23
[spark] where과 filter의 차이  (0) 2017.05.23
[spark2] spark SQL 예제  (0) 2017.05.20
Posted by '김용환'
,

cpu 타입 확인하기

c or linux 2017. 5. 24. 21:04

리눅스 패치시 cpu 타입 확인하기



예를 들어 보안 취약점 공개로 문제가 발생했을 때. cpu가 i386인지, x86_64인지 모를 수 있다


https://access.redhat.com/errata/RHSA-2017:1100



이 때는 uname -a 또는 uname -m으로 cpu계열을 확인할 수 있다.


$ uname -m

x86_64





Posted by '김용환'
,



docker 로그인과 로그아웃을 사설 저장소 기반으로 연동할 수 있다. 


사설 저장소를 입력하지 않으면 index.docker.io 쪽으로 연동되니 주의할 필요가 있다. 



사설 저장소의 도커 로그인은 다음과 같다.

docker login dock.google.io


upload 쉘 스크립트에서 사용할 때는 다음과 같이 사용하면 좋을 것 같다.

docker login dock.google.io
if [ $? -ne 1 ]; then
echo "Please try again."
exit 1
fi


사설 저장소의 도커 로그아웃은 다음과 같다. 

docker logout dock.google.io



안타깝지만, 사설 저장송의 docker 로그인 여부는 확인할 수 없다.


기본 저장소(index.docker.io)일 때만 docker status로 확인할 수 있다. 





참고

https://docs.docker.com/engine/reference/commandline/login/

Posted by '김용환'
,


스파크의 사용환경 발표(data bricks)


아래 슬라이드의 9페이지에 소개되어 있음.


https://www.slideshare.net/ydn/february-2016-hug-running-spark-clusters-in-containers-with-docker

February 2016 HUG: Running Spark Clusters in Containers with Docker from Yahoo! Developer Network




  • Spark in Standalone mode - 48%
  • Spark on YARN - 40%
  • Spark on MESOS - 11%


'scribbling' 카테고리의 다른 글

SRE 문화 만들기  (0) 2017.06.14
아파치 스파크 2017 발표 자료  (0) 2017.06.14
[성과] OKR  (0) 2017.05.23
[펌] uber 아키텍처  (0) 2017.05.22
goto 2017(chicago, 2017/5/1~2017/5/2) 자료 다운받기  (0) 2017.05.16
Posted by '김용환'
,



일래스틱서치에 라우팅 정보를 제공하는 방법은 몇 가지가 있다. 가장 간단한 방법은 다큐먼트를 저장할 때 routing URI 매개 변수를 추가하는 것이다. 예를 들면 다음과 같다.


$ curl -XPUT localhost:9200/person/doc/1?routing=A -d '{ "name" : "samuel" }'



$ curl -XPOST localhost:9200/_bulk --data-binary '

    

{ "index" : { "_index" : "person", "_type" : "doc", "_routing" : "A" } }

{ "name" : "samuel" }'



확인하는 방법은 _cat/shards 이다.

$  curl -XGET localhost:9200/_cat/shards/person?v
index  shard prirep state      docs store ip        node
person 2     p      STARTED       0  130b 127.0.0.1 5OEGj_a
person 1     p      STARTED       2 6.6kb 127.0.0.1 5OEGj_a
person 3     p      STARTED       1 3.4kb 127.0.0.1 5OEGj_a
person 4     p      STARTED       0  130b 127.0.0.1 5OEGj_a
person 0     p      STARTED       0  130b 127.0.0.1 5OEGj_a




또한 특정 routing 매개 변수 값으로 모든 다큐먼트를 얻어로면 다음 쿼리를 실행한다.


$ curl -XGET 'localhost:9200/person/_search?pretty&q=*&routing=A'





검색 샤드 API에 routing 매개 변수를 사용하면 하나의 샤드에만 요청을 보낸다.


curl -XGET 'localhost:9200/documents/_search_shards?pretty&routing=B' -d '{"query":"match_all":{}}'

{

  "nodes" : {

    "5OEGj_avT8un0nOak28qQg" : {

      "name" : "5OEGj_a",

      "ephemeral_id" : "cLOEvTLySTGA9z49Q2NHLg",

      "transport_address" : "127.0.0.1:9300",

      "attributes" : { }

    }

  },

  "indices" : {

    "documents" : { }

  },

  "shards" : [

    [

      {

        "state" : "STARTED",

        "primary" : true,

        "node" : "5OEGj_avT8un0nOak28qQg",

        "relocating_node" : null,

        "shard" : 0,

        "index" : "documents",

        "allocation_id" : {

          "id" : "jBQxmDVISEWGPnkC0NL-Eg"

        }

      }

    ]

  ]

}




라우팅을 사용해서 다큐먼트를 저장할 때 동일한 라우팅 값을 가진 다큐먼트는 동일한 샤드에서 저장된다. 


그러나 주어진 샤드에 여러 라우팅 값을 가진 많은 다큐먼트가 있을 수 있다.


라우팅을 사용하면 쿼리 중에 사용되는 샤드 개수를 제한할 수 있지만 필터링을 대체할 수는 없다.


즉 라우팅을 포함한 쿼리와 라우팅을 포함하지 않은 쿼리는 동일한 필터 집합을 가져야 한다. 


예를 들어 사용자 식별자를 라우팅 값으로 사용하고 사용자 데이터를 검색한다면 해당 식별자에도 필터를 포함해야 한다.








앨리어스를 사용할 수도 있다. index와 routing 매개 변수를 함께 정의했다. routing 매개 변수에 여러 값을 넣을 수 있다. (앨리어스는 검색 개발자에 실제 관련 정보를 숨기거나 multi tenany 같은 효력을 주게 할 수 있다)


curl -XPOST 'http://localhost:9200/_aliases' -d '{

"actions" : [

{

"add" : {

"index" : "person",

"alias" : "personA",

"routing" : "A"

}

}

]

}'




앨리어스 사용방법은 다음과 같다.


curl -XGET 'http://localhost:9200/personA/_search?q=*&pretty=true'




여러 라우팅 매개 변수를 사용해 하나 이상의 샤드에 요청할 수 있다.


curl -XGET 'localhost:9200/persons/_search?routing=A,B&pretty=true'



참고로 앨리어스에 인덱싱(인덱스 저장)에 사용되는 index_routing 매개 변수를 사용할 수 있는데, 오직 search_routing과 달리 하나의 값만 사용할 수 있다.

Posted by '김용환'
,



미국 뉴욕/보스톤/워싱톤/뉴저지/오스틴 여행 루트를 소개한다.



내가 좋아하는 여행의 형태는 베이스를 기반으로 한다. 불규칙하고 안정상..

미국은 테러 때문에 검사가 심해서 트렁크/가방 검사가 심하고. 비행사가 트렁크는 돈을 더 받는 구조라 편리하게 거점 중심으로 다니는 것이 나은 것 같다.(미국 서부 여행을 이미 경험해서... 그 때는 거점 없이 돌아다녔는데. 좀 힘들었었다)



1. 숙소 

뉴욕 맨해튼 브로드웨이 근처를 숙소로 잡았다. 너무 시끄럽다는 단점을 제외하고는 교통, 안전, 마트, 편리함은 최고였다. 대신 잠을 잘 수 없다. 만약 브로드웨이 근처라면 엄청 큰 귀마개를 하고 가는 것이 좋다..






2. 워싱톤/보스톤 이동

워싱톤과 보스톤은 BoltBus(모바일 앱)을 이용해 다녔다. 


워싱톤은 편도 4시 30분 소요되었다. 아침 7시~8시 사이에 (위치 알려줌) 출발해서 실컷 본다음, 

오후 6시에 워싱톤에서 버스 터미널에서 버스를 타고 뉴욕으로 돌아온다. 


워싱톤으로 출발하는 맨해튼 출발 위치가 조금 특이한데, 왜 거기 있나 싶었는데.. 버스가 들어올 만한 자리가 맨해튼 시내에는 오소리티 버스 터미널 외에는 거기 밖에는 없는 듯 다. 사람들 조금씩 있으니 무섭지는 않았다. 


보스톤은 편도 4시간 소요되었다. 아침 7시~8시 사이에 (위치 알려줌) 출발해서 실컷 본다음, 

오후 6시에 보스톤에서 버스 터미널에서 버스를 타고 뉴욕으로 돌아온다. 워싱톤과 달리 위치가 조금 다르다.. 전철역과 멀어서 공짜 lyft를 활용했다. 


뉴저지는 오소리티 버스 터미널에서 버스타면 뉴저지에 금방 갈 수 있다. 단점으로 오후 3시 30분이 넘어가면 길이 급격히 막히니 일찍 돌아오거나 늦게 돌아오는 편이 나을 수도 있다.



3. 오스톤 이동

Fly Delta를 이용해 이동했다. fly delta 앱을 사용하면 체크인/심사가 편리하다.


중요한 부분.. JFK 공항이 훨씬 낫다!!  조금 저렴하다고 아무 공항 선택하는 것보다 전철있고 안전하고 싸게 이동하는 것이 나아서 JFK 공항 발을 선택했다.


특이 점은 terminal 2 라는 점이다. 에어트레인에서 내리면 터미널2 공항이 아니라 주차장이 나온다. 이정표를 보고 터미널2로 가야 한다. 먼저 앞서 가지 말고 앞의 사람을 따라 가는 게 좋다. 




4. 뉴욕 JFK 공항 이동 팁(저렴, 싸게)


거점을 뉴욕 맨해튼에 두다 보니. 뉴욕 JFK 공항 이동시 교통편을 아는 것이 좋을 것 같다.


* 인천 --> 뉴욕 맨해튼으로 트렁크 2개 들고 이동 (인당 1개)


뉴욕 맨해튼 JFK 공항 도착 -> 에어트레인 타고 자마이카 역으로 이동 (밤/새벽이면 역 바깥으로 내리지 말 것, 조금 무서움)-> 자마이카역에서 LIRR(기차)를 타고 맨해튼 펜 스페이션으로 이동 -> 숙소 이동 (도보 또는 택시 또는 우버 같은 앱 사용)



* 뉴욕 맨해튼 <--> 오스틴 이동시 가방 하나 매고 이동

뉴욕 맨해튼 JFK 공항 도착 -> 에어트레인 타고 자마이카 역으로 이동 (밤/새벽이면 역 바깥으로 내리지 말 것, 조금 무서움)-> 자마이카역에서 LIRR(기차)를 타려 했으나 LIRR이 문제라서 메트로 타고 이동 (새벽 12시 쯤) 시간이 좀 걸렸으나 그러나 사람들이 많아서 괜찮았음 -> 숙소 이동 



* 뉴욕 맨해튼 호텔 이동 (노스 미드타운 --> 다운타운)

무료 쿠폰(10불)으로 받은 Lyft 이용 (트렁크 2개 들어감).  토요타 SUV라서 5개도 들어갈만 했음.. 

너무 친절해서 2불 팁을 줌.



* 뉴욕 맨해튼 --> 인천 트렁크가 선물로 인해 총 3개가 됨 (인당 1.5개)

오후 1시 비행기 출발이라서 아침에 출발..

무료 쿠폰(20불)으로 받은 uber를 이용해 맨해튼에서 자메이카 역으로 이동 (10불 나옴)

자메이카 역에서 다시 무료 쿠폰(20불)으로 받은 uber 호출(동행자 핸드폰 이용), 터미널4까지 이동


약간 자메이카역에서 헤매긴 했는데. LIRR 사무실에서 uber 호출하면 편리함..

맨해튼에서 JFK 공항까지는 거리때문에 비싸서 중간에 잘라서 가는 형태로 가면 좋을 듯하다.


택시는 한번도 타지 않았고 uber와 lyft를 활용해서 저렴하게 잘 이동했음..



-- 자세한 내용은 아래 참조


추천인에 따라서 uber/lyft의 적립금을 준다.

한국에서 가입하지 말고... 미국 가서 설치하는 것이 좋다 (나같은 경우는 미국 usim으로 진행했음)

우버는 20불 주고 리프트는 10불 주지만 한번만 사용할 수 있다. 맨해튼에서 택시대신 유용할 때가 있다. 지인이 여러 명일수록 신나게 돌아다닐 수 있으니 강추한다. 


uber, lyft는 전화번호, 신용카드, 계정(이메일) 정보를 필요로 한다. (오스틴(텍사스)에서는 우버가 되지 않으니 참고한다)


* uber

무료 Uber 이용권(최대 US$20 상당)을 드렸습니다. 무료 선물을 받으려면 다음 링크를 사용하여 가입하세요. https://www.uber.com/invite/br9nq7


* lyft

아마도 10불 정도 줄 것이다. 다음 링크를 클릭해 설치한다.

https://lyft.com/ig/YONGHWAN66281






Posted by '김용환'
,


미국 뉴욕/보스톤/워싱톤/오스틴/뉴저지 여행을 했었고 필요한 앱을 소개한다.

(안드로이드 기준)



1. 구글 맵스


현재 위치를 알기 위해 필수적으로 있어야 한다. 

오프라인 저장 기능이 있으니 도시별로 다운받는 것이 좋다. 

https://support.google.com/maps/answer/6291838?co=GENIE.Platform%3DAndroid&hl=ko


따라서 핸드폰 용량이 좀 있는 것이 좋다.


2. 전철 노선도

한국 개발자가 만든 mTRO NYC이면 나에게는 충분했다.

https://play.google.com/store/apps/details?id=com.broong.grounznewyork&hl=ko



3. google trips

여행 관련 이메일을 모두 gmail로 받도록 또는 포워딩하게 했다.

https://play.google.com/store/apps/details?id=com.google.android.apps.travel.onthego&hl=ko


추천장소, 간단한 여행책은 오프라인으로 다운받을 수 있다.



4. Uber/Lyft

추천인에 따라서 uber/lyft의 적립금을 준다.

한국에서 가입하지 말고... 미국 가서 설치하는 것이 좋다 (나같은 경우는 미국 usim으로 진행했음)

우버는 20불 주고 리프트는 10불 주지만 한번만 사용할 수 있다. 맨해튼에서 택시대신 유용할 때가 있다. 지인이 여러 명일수록 신나게 돌아다닐 수 있으니 강추한다. 


uber, lyft는 전화번호, 신용카드, 계정(이메일) 정보를 필요로 한다. (오스틴(텍사스)에서는 우버가 되지 않으니 참고한다)


* uber

무료 Uber 이용권(최대 US$20 상당)을 드렸습니다. 무료 선물을 받으려면 다음 링크를 사용하여 가입하세요. https://www.uber.com/invite/br9nq7


* lyft

아마도 10불 정도 줄 것이다. 다음 링크를 클릭한다. 

https://lyft.com/ig/YONGHWAN66281




5. 미국 뮤지컬 티켓 - TKTS

뮤지컬 광이 아닌 사람을 위한 내용이다. 알라딘처럼 빨리 한국에서 예매하는 경우는 이 내용은 패스해도 좋다. 알라딘은 정말 볼 수 없었다. 그러나 다음은 현장가서 뮤지컬을 싸게 보고 싶은 사람을 위한 팁이다.


미국 현지에서 $39~49 정도로 4개의 뮤지컬을 보았다. tkts, digital lottery(당첨 1번), rush 등으로 해봤고 


구입은 안되고. 그냥 여러 TKTS 위치에서 얼마나 싸게 볼 수 있는지 알려주는 앱이다. 나름 괜찮게 사용했다. 

https://play.google.com/store/apps/details?id=com.TDF.AndroidTdf&hl=ko


현지인도 쓴다는 브로드웨이 싸이트 예약싸이트이다. 로터리라고 있었는데. 최근에는 디지털 로터리로 바뀌었다. 이런 정보를 포탈처럼 보여주는 싸이트이다. 때로는 rush(문열면 줄서서 사는 것) 티켓을 사는지 여부도 아래 싸이트에서 살 수 있다. 

http://broadwayforbrokepeople.com/


디지털 로터리에 당첨될 수 있으니 틈틈히 들어가서 신청하는 것이 좋다. 당첨되면 1시간 이내로 결제하라고 하고, 인터넷에서 결제할 수 있다!! 




6. 교통 수단.


* BoltBus

뉴욕 맨하튼 거점으로 두고 이동했다. 따라서 워싱톤/보스톤(필라델피아) 이동시 BoltBus를 이용했다. 미국 동북부 쪽에 가려면 BoltBus 사용하는 것은 나쁘지 않다. 앞좌석 쪽에는 충전할 수 있는 콘센트를 제공한다!, 화장실도 한번 갈 수 있고.. 나름 싸고 괜찮았다. (자세한 내용은 인터넷 검색)


일부 버스 회사는 프린트된 영수증을 필요로 하지만 BoltBus는 앱 결제화면 (또는 결제 이메일)을 보여주기 때문에 현지에서 편리하게 사용했다.


BoltBus

https://play.google.com/store/apps/details?id=com.boltbus.mobile.consumer&hl=ko



* 뉴욕 시외 버스 터미널

뉴욕 버스 터니널은 특별히 앱이 필요없다. 

오소리티 버스 터미널 가서 물어보고 사면 된다. 우드버리나. 뉴저지몰 갈 때 괜찮게 사용할 수 있다. 


http://www.panynj.gov/bus-terminals/port-authority-bus-terminal.html


위치 : https://www.google.co.kr/maps/place/Port+Authority+Bus+Terminal/@40.7571517,-73.9908163,15z/data=!4m

5!3m4!1s0x0:0x6f3bf81e1c75b38e!8m2!3d40.7571517!4d-73.9908163



* LIRR

릴 또는 엘라이 아이 알알 이라 부른다. 릴은 거의 듣기도 어렵고....


LIRR은 맨해튼 팬 스테이션에서 JFK의 자메이카 역까지 빨리 이동하는 기차이다. 한 번은 새벽에 LIRR은 문제가 되어서 자메이카역에서 맨해튼까지의 전철을 탔는데. 1시간 30분 정도 걸렸다. LIRR은 타면 트렁크로 이동하기 나쁘지 않다(유럽 여행 기준) 30~40분이면 맨해튼 도착하고 가격은 7.5$이어서 싸고 좋다.


새벽/밤에 도착하더라도 LIRR만 문제없다면 맨해튼도 거뜬할 것 같다. 

스케쥴 정보는 다음과 같다. 


http://lirr42.mta.info/index.php?error=noRoute



7. 비행기 앱

Fly Delta 를 타고 오스틴을 이동했기 때문에 편리했다. 앱으로 체크인하고 QR코드로 심사받고 편리했다. 미국 국내는 fly delta가 무난하다.


https://play.google.com/store/apps/details?id=com.delta.mobile.android&hl=ko

Posted by '김용환'
,