Monthly Archives: 10月 2010

You are browsing the site archives by month.

Hiveの設定を確認して変更する方法

どうもHiveのReduce数が変だなと思ったら、、、
HadoopだけじゃなくてHiveにももっているらしいと。

HiveQLで確認できた。

hive> set;
javax.jdo.option.ConnectionUserName=APP
hive.exec.reducers.bytes.per.reducer=1000000000
hive.mapred.local.mem=0
hive.metastore.connect.retries=5
datanucleus.autoStartMechanismMode=checked
hive.mapjoin.bucket.cache.size=100
hive.optimize.pruner=true
datanucleus.validateColumns=false
hadoop.config.dir=/usr/hadoop/conf
hive.script.recordwriter=org.apache.hadoop.hive.ql.exec.TextRecordWriter
hive.metastore.rawstore.impl=org.apache.hadoop.hive.metastore.ObjectStore
datanucleus.autoCreateSchema=true
javax.jdo.option.ConnectionPassword=mine
datanucleus.validateConstraints=false
datancucleus.transactionIsolation=read-committed
hive.udtf.auto.progress=false
datanucleus.validateTables=false
hive.map.aggr.hash.min.reduction=0.5
datanucleus.storeManagerType=rdbms
hive.merge.size.per.task=256000000
hive.exec.script.maxerrsize=100000
hive.test.mode.prefix=test_
hive.groupby.skewindata=false
hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat
hive.default.fileformat=TextFile
hive.script.auto.progress=false
hive.groupby.mapaggr.checkinterval=100000
hive.script.serde=org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe
hive.hwi.listen.port=9999
datanuclues.cache.level2=true
hive.exec.script.allow.partial.consumption=false
hive.hwi.war.file=lib/hive-hwi-0.5.0.war
hive.merge.mapfiles=true
hive.fileformat.check=true
hive.exec.compress.output=false
hive.optimize.groupby=true
datanuclues.cache.level2.type=SOFT
javax.jdo.option.ConnectionDriverName=org.apache.derby.jdbc.EmbeddedDriver
hive.map.aggr=true
hive.join.emit.interval=1000
hive.metastore.warehouse.dir=/usr/hive/warehouse
hive.mapred.reduce.tasks.speculative.execution=true
javax.jdo.PersistenceManagerFactoryClass=org.datanucleus.jdo.JDOPersistenceManagerFactory
hive.mapred.mode=nonstrict
hive.script.recordreader=org.apache.hadoop.hive.ql.exec.TextRecordReader
hive.script.operator.id.env.var=HIVE_SCRIPT_OPERATOR_ID
mapred.reduce.tasks=-1
hive.exec.scratchdir=/tmp/hive/${user.name}
javax.jdo.option.NonTransactionalRead=true
hive.metastore.local=true
hive.test.mode.samplefreq=32
hive.test.mode=false
hive.exec.parallel=false
javax.jdo.option.ConnectionURL=jdbc:derby:;databaseName=metastore_db;create=true
javax.jdo.option.DetachAllOnCommit=true
hive.heartbeat.interval=1000
hive.map.aggr.hash.percentmemory=0.5
hive.exec.reducers.max=999
hive.join.cache.size=25000
hive.hwi.listen.host=0.0.0.0
hive.mapjoin.cache.numrows=25000
hive.exec.compress.intermediate=false
hive.optimize.cp=true
hadoop.job.ugi=user,user
hive.optimize.ppd=true
hive.session.id=201010262134
hive.mapjoin.maxsize=100000
hive.merge.mapredfiles=false

mapred.reduce.tasks=-1

になってます。

「-1」?

調べてみると、

「By setting this property to -1, Hive will automatically figure out what should be the number of reducers.」

automatically!そうなんですね。

ちなみに、set (property name)= (value);でも
設定できたのですね。

hive> set mapred.reduce.tasks=5;

RubyでMapReduceしてみる

RubyでもHadoopが使えるってことでやってみました。

mapperとreducerだけ作ればいいらしい。
ワードをカウントしてみる。

mapper.rb

ARGF.each do |line|
  line.chomp!
  unless line.empty?
    printf("%s\t1\n", line)
  end
end

reducer.rb

data = Hash.new {|h, k| h[k] = 0 }

ARGF.each do |line|
  line.chomp!
  key, value = line.split("\t")
  data[key] += 1
end

data.each do |k, v|
  print("#{k}\t#{v}")
end

inputのデータは以下のような感じで。

aaa
bbb
bbb
ccc
ddd
aaa
ddd

HDFSへ移す

./hadoop/bin/hadoop dfs -copyFromLocal word word

いざ起動!
mapされてreduceされていきます。

$/hadoop/bin/hadoop jar /home/user/hadoop/contrib/streaming/hadoop-0.19.2-streaming.jar  \
-input word -output wordout  \
-mapper "ruby mapper.rb" -reducer "ruby reducer.rb"
10/10/15 21:32:06 INFO streaming.StreamJob:  map 0%  reduce 0%
10/10/15 21:32:10 INFO streaming.StreamJob:  map 50%  reduce 0%
10/10/15 21:32:12 INFO streaming.StreamJob:  map 100%  reduce 0%
10/10/15 21:32:17 INFO streaming.StreamJob:  map 100%  reduce 100%
10/10/15 21:32:19 INFO streaming.StreamJob: Job complete: job_201010152104_0003
10/10/15 21:32:19 INFO streaming.StreamJob: Output: wordout

中身を見てみる。

$ ./hadoop/bin/hadoop dfs -cat wordout/part-00000
aaa     2
bbb     2
ccc     1
ddd     2

見事できました。

EBSに保存するAMIのディスクサイズを増やす方法

EBSのAMIからインスタンスを起動した場合、ディスクサイズが15GBになっているので、
これを任意に増設する方法。

(STEP1)
保存しているAMIからインスタンスを起動。
500GBで起動してみる。
※この時点でEBSのディスクサイズを決める

ec2-run-instances ami-XXXXXX -k (KeyPairs) -b /dev/sda1=:500 -b /dev/sdb=ephemeral0 -g (SecurityGroups)

(STEP2)
ディスクがサイズアップしたことを認識させる。
起動後のパーティション情報は以下のような感じです。

$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1              15G  8.8G  5.3G  63% /
none                  874M     0  874M   0% /dev/shm

まだ、15GBのままです。

以下のコマンドを実行。

resize2fs /dev/sda1

すると、、、

$ df -h
Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/sda1             493G  2.0G  466G   1% /
none                  854M     0  854M   0% /dev/shm

500GBまで増えました。

あとはこのインスタンスをAMI(EBS)に保存すればOK。

ただ、インスタンスの起動がものすごく遅くなったような。。。。。

OpenSSLを使ってblowfishで暗号化・複合化

OpenSSLを使ってblowfishで暗号化・複合化する方法

・暗号化

echo "暗号化したい文字列" | openssl bf -e -base64  -k 'passphrase'

・複合化

echo 複合化する文字列 | openssl bf -d -base64  -k 'passphrase'