際際滷

際際滷Share a Scribd company logo
Hadoop Conference Scala on Hadoop はてな  弥嶄 風望 stanaka @ hatena.ne.jp http://d.hatena.ne.jp/stanaka/ http://twitter.com/stanaka/
アジェンダ 徭失B初 はてなでの Hadoop Scala までの祇 Scala on Hadoop Scala on Hadoop の鮄
徭失B初 ( 幄 ) はてな 茂侑T 毅輝I囃 システムア`キテクチャ スケ`ラビリティ サ`バ?ネットワ`ク サポ`ト
はてなでの Hadoop #1 徭恬サ`バ  10 岬 CPU: Core2 Quad x 1 Mem: 8GB HDD: 3TB DC ではなくオフィスに崔いて、坿旗s
はてなでの Hadoop #2 們eされるデ`タ ( 麼にログ ) ダイアリ`  7G/day ブックマ`ク  5G/day うごメモ  3G/day ジョブ 300 jobs/day
はてなでの Hadoop システム ( F彜 ) Hadoop MapReduce HDFS Reverse Proxy ジョブの 誘秘 Hatena Fotolife Hatena Graph ログを rg阿撲邨e /logs/$service/$year/$month/$date/$host_access-$hour.log
Hadoop 2008/5   { Hadoop Streaming 2008/8   借P Perl による Mapper, Reducer YAML でジョブを協x 2009/4  WebUI を恬撹 2009/11  Scala 晒 ○ イマココ
Hadoop Streaming Java 參翌の冱Zで MapReduce を辛嬬に ! Map, Reduce の秘竃薦を僻訌 / 奮薦としてQう ->  map.pl, reduce.pl を喘吭するだけ 宥械は秘薦竃薦慌に HDFS 貧に崔かれる
map.pl #!/usr/bin/env perl use strict; use warnings; while (<>) { chomp; my @segments = split /\s+/; printf &quot;%s\t%s\n&quot;, $segments[8], 1; }
reduce.pl #!/usr/bin/env perl use strict; use warnings; my %count; while (<>) { chomp; my ($key, $value) = split /\t/; $count{$key}++; } while (my ($key, $value) = each %count) { printf &quot;%s\t%s\n&quot;, $key, $value; }
g佩 % hadoop jar $HADOOP_DIR/contrib/hadoop-*-streaming.jar \ -input httpd_logs \ -output analog_out \ -mapper /home/user/work/analog/map.pl  \ -reducer /home/user/work/analog/reduce.pl
ジョブの協x YAML で協x - name: latency mapper: class: LogAnalyzer::Mapper options: filters: isbot: 0 conditions: - key: Top filters: uri: '^\/$' value: $response reducer: class: Reducer::Distribution input: class: LogAnalyzer::Input options: service: ugomemo period: 1 output: class: Output::Gnuplot options: title: &quot;Ugomemo Latency $date&quot; xlabel: &quot;Response time (msec)&quot; ylabel: &quot;Rates of requests (%)&quot; fotolife_folder: ugomemo
WebUI
Hadoop Streaming の渊 Wい ○  Perl の}も .. ジョブを KILL しても、プロセスが火ることがある HDFS 荷恬がWい Combiner が協xできない
Scala 2003 定鞠 v方侏の蒙罿笋┐壬壞Z 噸宥のオブジェクト峺鬚辰櫃もける JavaVM 貧で嘛する object HelloWorld { def main(args: Array[String]) { println(&quot;Hello, world!&quot;) } }
Scala による Quick sort def qsort[T <% Ordered[T]](list: List[T]): List[T] =  list match { case Nil => Nil case pivot::tail =>  qsort(tail.filter(_ < pivot)) ::: pivot :: qsort(tail.filter(_ >= pivot)) } scala> qsort(List(2,1,3)) res1: List[Int] = List(1, 2, 3)
WordCount by Java public class WordCount { public static class Map extends MapReduceBase  implements Mapper<LongWritable, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } } public static class Reduce extends MapReduceBase  implements Reducer<Text, IntWritable> { ´
WordCount by Scala object WordCount { class MyMap extends Mapper[LongWritable, Text, Text, IntWritable] { val one = 1 override def map(ky: LongWritable, value: Text,  output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) } } class MyReduce extends Reducer[Text, IntWritable, Text, IntWritable] { override def reduce(key: Text, values: java.lang.Iterable[IntWritable], output: Reducer[Text, IntWritable, Text, IntWritable]#Context) = { val iter: Iterator[IntWritable] = values.iterator() val sum = iter reduceLeft ((a: Int, b: Int) => a + b) output write (key, sum) } } def main(args: Array[String]) = { ´
Java vs Scala Java Scala public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } override def map(ky: LongWritable, value: Text,  output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) }
Scala on Hadoop Java と Scala を俊Aするライブラリが駅勣 SHadoop http://code.google.com/p/jweslley/source/browse/#svn/trunk/scala/shadoop 侏Qを佩うシンプルなライブラリ
mapper class MyMap extends Mapper[LongWritable, Text, Text, IntWritable] { val one = 1 override def map(ky: LongWritable, value: Text,  output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) } }
reducer class MyReduce extends Reducer[Text, IntWritable, Text, IntWritable] { override def reduce(key: Text, values: java.lang.Iterable[IntWritable], output: Reducer[Text, IntWritable, Text, IntWritable]#Context) = { val iter: Iterator[IntWritable] = values.iterator() val sum = iter reduceLeft ((a: Int, b: Int) => a + b) output write (key, sum) } }
main def main(args: Array[String]) = { val conf = new Configuration() val otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs() val job = new Job(conf, &quot;word count&quot;) job setJarByClass(WordCount getClass()) job setMapperClass(classOf[WordCount.MyMap]) job setCombinerClass(classOf[WordCount.MyReduce]) job setReducerClass(classOf[WordCount.MyReduce]) job setMapOutputKeyClass(classOf[Text]) job setMapOutputValueClass(classOf[IntWritable]) job setOutputKeyClass(classOf[Text]) job setOutputValueClass(classOf[IntWritable]) FileInputFormat addInputPath(job, new Path(otherArgs(0))) FileOutputFormat setOutputPath(job, new Path(otherArgs(1))) System exit(job waitForCompletion(true) match { case true => 0 case false => 1}) }
HDFS 荷恬 import java.net.URI import org.apache.hadoop.fs._ import org.apache.hadoop.hdfs._ import org.apache.hadoop.conf.Configuration object Hdfs { def main(args: Array[String]) = { val conf = new Configuration() val uri = new URI(&quot;hdfs://hadoop01:9000/&quot;) val fs = new DistributedFileSystem fs.initialize(uri, conf) var status = fs.getFileStatus(new Path(args(0))) println(status.getModificationTime) } }
ビルド返隈 Maven http://maven.apache.org/ Java 狼のプロジェクト砿尖ツ`ル プロジェクト恬撹 mvn  org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:create -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DarchetypeVersion=1.2 -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=com.hatena.hadoop -DartifactId=hadoop
卆贋vSの峰 Hadoop vB jar の鞠h 卆贋vSの峰 <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.0.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> mvn install:install-file  -DgroupId=org.apache.hadoop -DartifactId=hadoop-core -Dversion=0.20.1 -Dpackaging=jar -Dfile=/opt/hadoop/hadoop-0.20.1-core.jar
ビルド?パッケ`ジ恬撹とg佩 ビルド?パッケ`ジ恬撹 g佩 $HADOOP_HOME/bin/hadoop jar  ../maven/hadoop/target/hadoop-1.0-SNAPSHOT.jar com.hatena.hadoop.Hadoop -D mapred.job.tracker=local -D fs.default.name=file:///  input output mvn scala:compile mvn package mvn clean
レスポンスrgのy  #1 y圭隈 蒙協の URL を澣いて、そのrgをy 伏アクセスログからЪ 伏アクセスログを蛍裂 Hadoop クラスタ Core2Quad サ`バ  10 岬 はてなダイアリ`のログ 7GB -> 10 蛍殻業でI尖 蛍下をグラフ晒
レスポンスrgのy  #2 Mapper URL などの訳周でフィルタ レスポンスrgをh Reducer レスポンスrgの蛍下を麻 瘁I尖 グラフ晒 (gnuplot) Fotolife にアップロ`ド (AtomAPI)
レスポンス扮寂の蛍下グラフ
措挫なレスポンスの箭
キャッシュによる唹
まとめ はてなでの Hadoop Scala on Hadoop 弼?、乾ってSしみましょう !
Q & A [email_address]

More Related Content

What's hot (20)

PHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
PHPコ`ドではなく PHPコ`ドの仝き圭々を岑るPHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
PHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
Masashi Shinbara
?
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
?
Ruby on Rails on MySQL チュ`ニング秘T
Ruby on Rails on MySQL チュ`ニング秘TRuby on Rails on MySQL チュ`ニング秘T
Ruby on Rails on MySQL チュ`ニング秘T
だいすけ さとう
?
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
?
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
moai kids
?
遺珂皆と永艶姻鉛て?嗄ほ?う
遺珂皆と永艶姻鉛て?嗄ほ?う遺珂皆と永艶姻鉛て?嗄ほ?う
遺珂皆と永艶姻鉛て?嗄ほ?う
Daiki Ichinose
?
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
nabe-abk
?
Embulk 20150411
Embulk 20150411Embulk 20150411
Embulk 20150411
Hiroshi Nakamura
?
g樹檎艶温鉛馨
g樹檎艶温鉛馨g樹檎艶温鉛馨
g樹檎艶温鉛馨
Yu Sugawara
?
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
Sho Yoshida
?
撹Lを紗堀する minne の室g児P藺
撹Lを紗堀する minne の室g児P藺撹Lを紗堀する minne の室g児P藺
撹Lを紗堀する minne の室g児P藺
Hiroshi SHIBATA
?
WDD2012_SC-004
WDD2012_SC-004WDD2012_SC-004
WDD2012_SC-004
Kuninobu SaSaki
?
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
Yu Sugawara
?
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
Koichi Shimozono
?
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
charsbar
?
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
Naoya Ito
?
檎温庄鉛壊3.1姻界4を編してみた
檎温庄鉛壊3.1姻界4を編してみた檎温庄鉛壊3.1姻界4を編してみた
檎温庄鉛壊3.1姻界4を編してみた
Takahiro Hidaka
?
CloudWatch Logsについて
CloudWatch LogsについてCloudWatch Logsについて
CloudWatch Logsについて
Sugawara Genki
?
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニングアドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
Yosuke Mizutani
?
PHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
PHPコ`ドではなく PHPコ`ドの仝き圭々を岑るPHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
PHPコ`ドではなく PHPコ`ドの仝き圭々を岑る
Masashi Shinbara
?
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
Naoya Ito
?
Ruby on Rails on MySQL チュ`ニング秘T
Ruby on Rails on MySQL チュ`ニング秘TRuby on Rails on MySQL チュ`ニング秘T
Ruby on Rails on MySQL チュ`ニング秘T
だいすけ さとう
?
Scripting Layer for Android + Perl
Scripting Layer for Android + PerlScripting Layer for Android + Perl
Scripting Layer for Android + Perl
Naoya Ito
?
Programming Hive Reading #3
Programming Hive Reading #3Programming Hive Reading #3
Programming Hive Reading #3
moai kids
?
遺珂皆と永艶姻鉛て?嗄ほ?う
遺珂皆と永艶姻鉛て?嗄ほ?う遺珂皆と永艶姻鉛て?嗄ほ?う
遺珂皆と永艶姻鉛て?嗄ほ?う
Daiki Ichinose
?
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
庵2000檎艶援顎艶壊岳を案く永艶姻鉛u遺珂皆の坪何更夛╋抉隹庄温稼サ`バ1岬にて
nabe-abk
?
g樹檎艶温鉛馨
g樹檎艶温鉛馨g樹檎艶温鉛馨
g樹檎艶温鉛馨
Yu Sugawara
?
AWS SDK for Smalltalk
AWS SDK for SmalltalkAWS SDK for Smalltalk
AWS SDK for Smalltalk
Sho Yoshida
?
撹Lを紗堀する minne の室g児P藺
撹Lを紗堀する minne の室g児P藺撹Lを紗堀する minne の室g児P藺
撹Lを紗堀する minne の室g児P藺
Hiroshi SHIBATA
?
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
汐仝X楚?互堀モバイルデ`タベ`ス Realm秘T々を聞って僥ぶRealmの娠侭
Yu Sugawara
?
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
壊艶姻厩艶姻壊沿艶界を聞喘したサ`バ譜協テストのg箭
Koichi Shimozono
?
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
遺永粥鰻の卆贋モジュ`ルをもう富し屎しく奮したい
charsbar
?
Titanium Mobile
Titanium MobileTitanium Mobile
Titanium Mobile
Naoya Ito
?
檎温庄鉛壊3.1姻界4を編してみた
檎温庄鉛壊3.1姻界4を編してみた檎温庄鉛壊3.1姻界4を編してみた
檎温庄鉛壊3.1姻界4を編してみた
Takahiro Hidaka
?
CloudWatch Logsについて
CloudWatch LogsについてCloudWatch Logsについて
CloudWatch Logsについて
Sugawara Genki
?
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニングアドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
アドテク〜皆界温鉛温〜パフォ`マンスチュ`ニング
Yosuke Mizutani
?

Viewers also liked (6)

Building an API layer for C* at Coursera
Building an API layer for C* at CourseraBuilding an API layer for C* at Coursera
Building an API layer for C* at Coursera
Daniel Jin Hao Chia
?
Introduction to Accumulo
Introduction to AccumuloIntroduction to Accumulo
Introduction to Accumulo
Mario Pastorelli
?
Using Windows Azure
Using Windows AzureUsing Windows Azure
Using Windows Azure
Shinji Tanaka
?
Performance and Scalability of Web Service
Performance and Scalability of Web ServicePerformance and Scalability of Web Service
Performance and Scalability of Web Service
Shinji Tanaka
?
Scala and Hadoop @ eBay
Scala and Hadoop @ eBayScala and Hadoop @ eBay
Scala and Hadoop @ eBay
ebaynyc
?
Original Server Conference
Original Server ConferenceOriginal Server Conference
Original Server Conference
Shinji Tanaka
?
Building an API layer for C* at Coursera
Building an API layer for C* at CourseraBuilding an API layer for C* at Coursera
Building an API layer for C* at Coursera
Daniel Jin Hao Chia
?
Performance and Scalability of Web Service
Performance and Scalability of Web ServicePerformance and Scalability of Web Service
Performance and Scalability of Web Service
Shinji Tanaka
?
Scala and Hadoop @ eBay
Scala and Hadoop @ eBayScala and Hadoop @ eBay
Scala and Hadoop @ eBay
ebaynyc
?
Original Server Conference
Original Server ConferenceOriginal Server Conference
Original Server Conference
Shinji Tanaka
?

Similar to Scala on Hadoop (20)

クラウド扮旗の旺双蛍柊I尖室宝
クラウド扮旗の旺双蛍柊I尖室宝クラウド扮旗の旺双蛍柊I尖室宝
クラウド扮旗の旺双蛍柊I尖室宝
Koichi Fujikawa
?
珂温沿檎艶糸顎界艶秘壇
珂温沿檎艶糸顎界艶秘壇珂温沿檎艶糸顎界艶秘壇
珂温沿檎艶糸顎界艶秘壇
Satoshi Noto
?
Rakuten tech conf
Rakuten tech confRakuten tech conf
Rakuten tech conf
Koichi Fujikawa
?
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
?
BPStudy32 CouchDB 壅秘T
BPStudy32 CouchDB 壅秘TBPStudy32 CouchDB 壅秘T
BPStudy32 CouchDB 壅秘T
Yohei Sasaki
?
堀くなければスマフォじゃない - インタ`ンバ`ジョン-
堀くなければスマフォじゃない - インタ`ンバ`ジョン-堀くなければスマフォじゃない - インタ`ンバ`ジョン-
堀くなければスマフォじゃない - インタ`ンバ`ジョン-
Kazunari Hara
?
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
YoheiOkuyama
?
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
鴬猟 徒
?
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
Hadoop / Spark Conference Japan
?
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
takezoe
?
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
?
Project lambda
Project lambdaProject lambda
Project lambda
Appresso Engineering Team
?
Trait in scala
Trait in scalaTrait in scala
Trait in scala
Yuta Shimakawa
?
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
?
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Tomoharu ASAMI
?
ただいま堰温糸看看沿茶膿嶄
ただいま堰温糸看看沿茶膿嶄ただいま堰温糸看看沿茶膿嶄
ただいま堰温糸看看沿茶膿嶄
Satoshi Noto
?
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
tako pons
?
皆界温鉛温プログラミング?マニアックス
皆界温鉛温プログラミング?マニアックス皆界温鉛温プログラミング?マニアックス
皆界温鉛温プログラミング?マニアックス
Tomoharu ASAMI
?
クラウド扮旗の旺双蛍柊I尖室宝
クラウド扮旗の旺双蛍柊I尖室宝クラウド扮旗の旺双蛍柊I尖室宝
クラウド扮旗の旺双蛍柊I尖室宝
Koichi Fujikawa
?
珂温沿檎艶糸顎界艶秘壇
珂温沿檎艶糸顎界艶秘壇珂温沿檎艶糸顎界艶秘壇
珂温沿檎艶糸顎界艶秘壇
Satoshi Noto
?
Cloud computing competition by Hapyrus
Cloud computing competition by HapyrusCloud computing competition by Hapyrus
Cloud computing competition by Hapyrus
Koichi Fujikawa
?
BPStudy32 CouchDB 壅秘T
BPStudy32 CouchDB 壅秘TBPStudy32 CouchDB 壅秘T
BPStudy32 CouchDB 壅秘T
Yohei Sasaki
?
堀くなければスマフォじゃない - インタ`ンバ`ジョン-
堀くなければスマフォじゃない - インタ`ンバ`ジョン-堀くなければスマフォじゃない - インタ`ンバ`ジョン-
堀くなければスマフォじゃない - インタ`ンバ`ジョン-
Kazunari Hara
?
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
書さら療けない堰温糸看看沿茶膿氏及3指 セントラルソフト幄塀氏芙20120327
YoheiOkuyama
?
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
GNU awk (gawk) を喘いた Apache ログ盾裂圭隈
鴬猟 徒
?
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
HadoopとRDBMSをシ`ムレスにB亊させるSmart SQL Processing (Hadoop Conference Japan 2014)
Hadoop / Spark Conference Japan
?
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
イマドキの岾,琶垢┐覺害恒慌好薀ぅ屮薀衒打
takezoe
?
Functional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.jsFunctional JavaScript with Lo-Dash.js
Functional JavaScript with Lo-Dash.js
Shogo Sensui
?
Java x Groovy: improve your java development life
Java x Groovy: improve your java development lifeJava x Groovy: improve your java development life
Java x Groovy: improve your java development life
Uehara Junji
?
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Object-Functional Analysis and Design : 肝弊旗モデリングパラダイムへの祇
Tomoharu ASAMI
?
ただいま堰温糸看看沿茶膿嶄
ただいま堰温糸看看沿茶膿嶄ただいま堰温糸看看沿茶膿嶄
ただいま堰温糸看看沿茶膿嶄
Satoshi Noto
?
Apache Torqueについて
Apache TorqueについてApache Torqueについて
Apache Torqueについて
tako pons
?
皆界温鉛温プログラミング?マニアックス
皆界温鉛温プログラミング?マニアックス皆界温鉛温プログラミング?マニアックス
皆界温鉛温プログラミング?マニアックス
Tomoharu ASAMI
?

Recently uploaded (13)

ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
Industrial Technology Research Institute (ITRI)(垢I室g冩梢垪, 垢冩垪)
?
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
CRI Japan, Inc.
?
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
Matsushita Laboratory
?
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
巓 弌m
?
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ssuserfcafd1
?
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
NTT DATA Technology & Innovation
?
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
harmonylab
?
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
harmonylab
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
NTT DATA Technology & Innovation
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?
ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
ラズパイを聞って恬瞳を恬ったらラズパイコンテストで悪皆額浜をBって、さらに、猟晒リメディア椰宝疾で蕪穆瑛銅恬瞳に僉ばれてしまった周?徭恬チップでラズパイ...
Industrial Technology Research Institute (ITRI)(垢I室g冩梢垪, 垢冩垪)
?
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
PostgreSQL恷仟嗜 ゛カラムナストアから伏撹AIB亊まで゛ (Open Source Conference 2025 Tokyo/Spring ...
NTT DATA Technology & Innovation
?
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
2025フ`ドテックWeek寄昜婢幣氏 - LoRaWANを聞った}方ポイント梁業砿尖 by AVNET囁小何L
CRI Japan, Inc.
?
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
及1指晩云尖僥粗隈容胎僥氏僥宝寄氏でのk燕彿創2025定3埖2晩 互播辛栂{
Matsushita Laboratory
?
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
ビットコインテストネットでの僕署悶Y原きビットコイン?ブロックチェ`ン茶膿氏彿創
巓 弌m
?
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ドメインモデリング児云園抓僻悶の送れ2025喝02喝27芙坪鬚運岸.沿沿岳恰
ssuserfcafd1
?
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
Apache SparkにするKubernetesのNUMAノ`ドを吭Rしたリソ`ス護り輝ての來嬬森 (Open Source Conference ...
NTT DATA Technology & Innovation
?
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
‐怱匍胎猟/侮蚊僥楼によるログ呟械返モデルを喘いたサイバ`好返にvする冩梢
harmonylab
?
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
‐怱匍胎猟/晦晦珂を喘いた珂顎鉛岳庄-粥乙艶稼岳-禽艶恢温岳艶における郡胎の森にvする冩梢
harmonylab
?
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
ElasticsearchでSPLADEする [Search Engineering Tech Talk 2025 Winter]
kota usuha
?
Matching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdfMatching_Program_for_Quantum_Challenge_Overview.pdf
Matching_Program_for_Quantum_Challenge_Overview.pdf
hirokiokuda2
?
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
gはアナタの附除にある。 Linux のチェックポイントレストアC嬬 (NTT Tech Conference 2025 k燕Y創)
NTT DATA Technology & Innovation
?
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OSIoT Devices Compliant with JC-STAR Using Linux as a Container OS
IoT Devices Compliant with JC-STAR Using Linux as a Container OS
Tomohiro Saneyoshi
?

Scala on Hadoop

  • 1. Hadoop Conference Scala on Hadoop はてな 弥嶄 風望 stanaka @ hatena.ne.jp http://d.hatena.ne.jp/stanaka/ http://twitter.com/stanaka/
  • 2. アジェンダ 徭失B初 はてなでの Hadoop Scala までの祇 Scala on Hadoop Scala on Hadoop の鮄
  • 3. 徭失B初 ( 幄 ) はてな 茂侑T 毅輝I囃 システムア`キテクチャ スケ`ラビリティ サ`バ?ネットワ`ク サポ`ト
  • 4. はてなでの Hadoop #1 徭恬サ`バ 10 岬 CPU: Core2 Quad x 1 Mem: 8GB HDD: 3TB DC ではなくオフィスに崔いて、坿旗s
  • 5. はてなでの Hadoop #2 們eされるデ`タ ( 麼にログ ) ダイアリ` 7G/day ブックマ`ク 5G/day うごメモ 3G/day ジョブ 300 jobs/day
  • 6. はてなでの Hadoop システム ( F彜 ) Hadoop MapReduce HDFS Reverse Proxy ジョブの 誘秘 Hatena Fotolife Hatena Graph ログを rg阿撲邨e /logs/$service/$year/$month/$date/$host_access-$hour.log
  • 7. Hadoop 2008/5 { Hadoop Streaming 2008/8 借P Perl による Mapper, Reducer YAML でジョブを協x 2009/4 WebUI を恬撹 2009/11 Scala 晒 ○ イマココ
  • 8. Hadoop Streaming Java 參翌の冱Zで MapReduce を辛嬬に ! Map, Reduce の秘竃薦を僻訌 / 奮薦としてQう -> map.pl, reduce.pl を喘吭するだけ 宥械は秘薦竃薦慌に HDFS 貧に崔かれる
  • 9. map.pl #!/usr/bin/env perl use strict; use warnings; while (<>) { chomp; my @segments = split /\s+/; printf &quot;%s\t%s\n&quot;, $segments[8], 1; }
  • 10. reduce.pl #!/usr/bin/env perl use strict; use warnings; my %count; while (<>) { chomp; my ($key, $value) = split /\t/; $count{$key}++; } while (my ($key, $value) = each %count) { printf &quot;%s\t%s\n&quot;, $key, $value; }
  • 11. g佩 % hadoop jar $HADOOP_DIR/contrib/hadoop-*-streaming.jar \ -input httpd_logs \ -output analog_out \ -mapper /home/user/work/analog/map.pl \ -reducer /home/user/work/analog/reduce.pl
  • 12. ジョブの協x YAML で協x - name: latency mapper: class: LogAnalyzer::Mapper options: filters: isbot: 0 conditions: - key: Top filters: uri: '^\/$' value: $response reducer: class: Reducer::Distribution input: class: LogAnalyzer::Input options: service: ugomemo period: 1 output: class: Output::Gnuplot options: title: &quot;Ugomemo Latency $date&quot; xlabel: &quot;Response time (msec)&quot; ylabel: &quot;Rates of requests (%)&quot; fotolife_folder: ugomemo
  • 13. WebUI
  • 14. Hadoop Streaming の渊 Wい ○ Perl の}も .. ジョブを KILL しても、プロセスが火ることがある HDFS 荷恬がWい Combiner が協xできない
  • 15. Scala 2003 定鞠 v方侏の蒙罿笋┐壬壞Z 噸宥のオブジェクト峺鬚辰櫃もける JavaVM 貧で嘛する object HelloWorld { def main(args: Array[String]) { println(&quot;Hello, world!&quot;) } }
  • 16. Scala による Quick sort def qsort[T <% Ordered[T]](list: List[T]): List[T] = list match { case Nil => Nil case pivot::tail => qsort(tail.filter(_ < pivot)) ::: pivot :: qsort(tail.filter(_ >= pivot)) } scala> qsort(List(2,1,3)) res1: List[Int] = List(1, 2, 3)
  • 17. WordCount by Java public class WordCount { public static class Map extends MapReduceBase implements Mapper<LongWritable, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable> { ´
  • 18. WordCount by Scala object WordCount { class MyMap extends Mapper[LongWritable, Text, Text, IntWritable] { val one = 1 override def map(ky: LongWritable, value: Text, output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) } } class MyReduce extends Reducer[Text, IntWritable, Text, IntWritable] { override def reduce(key: Text, values: java.lang.Iterable[IntWritable], output: Reducer[Text, IntWritable, Text, IntWritable]#Context) = { val iter: Iterator[IntWritable] = values.iterator() val sum = iter reduceLeft ((a: Int, b: Int) => a + b) output write (key, sum) } } def main(args: Array[String]) = { ´
  • 19. Java vs Scala Java Scala public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } override def map(ky: LongWritable, value: Text, output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) }
  • 20. Scala on Hadoop Java と Scala を俊Aするライブラリが駅勣 SHadoop http://code.google.com/p/jweslley/source/browse/#svn/trunk/scala/shadoop 侏Qを佩うシンプルなライブラリ
  • 21. mapper class MyMap extends Mapper[LongWritable, Text, Text, IntWritable] { val one = 1 override def map(ky: LongWritable, value: Text, output: Mapper[LongWritable, Text, Text, IntWritable]#Context) = { (value split &quot; &quot;) foreach (output write (_, one)) } }
  • 22. reducer class MyReduce extends Reducer[Text, IntWritable, Text, IntWritable] { override def reduce(key: Text, values: java.lang.Iterable[IntWritable], output: Reducer[Text, IntWritable, Text, IntWritable]#Context) = { val iter: Iterator[IntWritable] = values.iterator() val sum = iter reduceLeft ((a: Int, b: Int) => a + b) output write (key, sum) } }
  • 23. main def main(args: Array[String]) = { val conf = new Configuration() val otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs() val job = new Job(conf, &quot;word count&quot;) job setJarByClass(WordCount getClass()) job setMapperClass(classOf[WordCount.MyMap]) job setCombinerClass(classOf[WordCount.MyReduce]) job setReducerClass(classOf[WordCount.MyReduce]) job setMapOutputKeyClass(classOf[Text]) job setMapOutputValueClass(classOf[IntWritable]) job setOutputKeyClass(classOf[Text]) job setOutputValueClass(classOf[IntWritable]) FileInputFormat addInputPath(job, new Path(otherArgs(0))) FileOutputFormat setOutputPath(job, new Path(otherArgs(1))) System exit(job waitForCompletion(true) match { case true => 0 case false => 1}) }
  • 24. HDFS 荷恬 import java.net.URI import org.apache.hadoop.fs._ import org.apache.hadoop.hdfs._ import org.apache.hadoop.conf.Configuration object Hdfs { def main(args: Array[String]) = { val conf = new Configuration() val uri = new URI(&quot;hdfs://hadoop01:9000/&quot;) val fs = new DistributedFileSystem fs.initialize(uri, conf) var status = fs.getFileStatus(new Path(args(0))) println(status.getModificationTime) } }
  • 25. ビルド返隈 Maven http://maven.apache.org/ Java 狼のプロジェクト砿尖ツ`ル プロジェクト恬撹 mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:create -DarchetypeGroupId=org.scala-tools.archetypes -DarchetypeArtifactId=scala-archetype-simple -DarchetypeVersion=1.2 -DremoteRepositories=http://scala-tools.org/repo-releases -DgroupId=com.hatena.hadoop -DartifactId=hadoop
  • 26. 卆贋vSの峰 Hadoop vB jar の鞠h 卆贋vSの峰 <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.0.4</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-cli</groupId> <artifactId>commons-cli</artifactId> <version>1.0</version> <scope>provided</scope> </dependency> mvn install:install-file -DgroupId=org.apache.hadoop -DartifactId=hadoop-core -Dversion=0.20.1 -Dpackaging=jar -Dfile=/opt/hadoop/hadoop-0.20.1-core.jar
  • 27. ビルド?パッケ`ジ恬撹とg佩 ビルド?パッケ`ジ恬撹 g佩 $HADOOP_HOME/bin/hadoop jar ../maven/hadoop/target/hadoop-1.0-SNAPSHOT.jar com.hatena.hadoop.Hadoop -D mapred.job.tracker=local -D fs.default.name=file:/// input output mvn scala:compile mvn package mvn clean
  • 28. レスポンスrgのy #1 y圭隈 蒙協の URL を澣いて、そのrgをy 伏アクセスログからЪ 伏アクセスログを蛍裂 Hadoop クラスタ Core2Quad サ`バ 10 岬 はてなダイアリ`のログ 7GB -> 10 蛍殻業でI尖 蛍下をグラフ晒
  • 29. レスポンスrgのy #2 Mapper URL などの訳周でフィルタ レスポンスrgをh Reducer レスポンスrgの蛍下を麻 瘁I尖 グラフ晒 (gnuplot) Fotolife にアップロ`ド (AtomAPI)
  • 33. まとめ はてなでの Hadoop Scala on Hadoop 弼?、乾ってSしみましょう !
  • 34. Q & A [email_address]