52
open-port 8020 # DFS Nameserver
53
open-port 50070 # DFS Web UI
56
open-port 50075 # Web interface for datanode
61
66
configure_hadoop () {
62
hbase=`config-get hbase`
63
# Copy distribution configuration and then
67
# Copy distribution configuration and then specialize
65
68
if [ ! -d /etc/hadoop/conf.juju ]
67
70
cp -r /etc/hadoop/conf.empty /etc/hadoop/conf.juju
76
79
dir=`dotdee --dir /etc/hadoop/conf.juju/hdfs-site.xml`
78
config_element "dfs.name.dir" "/var/lib/hadoop/cache/hadoop/dfs/name" > \
81
# Purge existing configuration
83
config_element "dfs.name.dir" \
84
"/var/lib/hadoop/cache/hadoop/dfs/name" > \
79
85
$dir/10-dfs.name.dir
80
config_element "dfs.namenode.handler.count" "`config-get dfs.namenode.handler.count`" > \
86
config_element "dfs.namenode.handler.count" \
87
"`config-get dfs.namenode.handler.count`" > \
81
88
$dir/11-dfs.namenode.handler.count
82
config_element "dfs.block.size" "`config-get dfs.block.size`" > \
89
config_element "dfs.block.size" i\
90
"`config-get dfs.block.size`" > \
83
91
$dir/12-dfs.block.size
84
if [ "$hbase" = "True" ]
86
# Turn on append support for HBase
92
config_element "dfs.datanode.max.xcievers" \
93
"`config-get dfs.datanode.max.xcievers`" > \
94
$dir/13-dfs.datanode.max.xcievers
95
[ "`config-get hbase`" = "True" ] && \
87
96
config_element "dfs.support.append" "true" > \
88
$dir/15-dfs.support.append
89
config_element "dfs.datanode.max.xcievers" "4096" > \
90
$dir/16-dfs.datanode.max.xcievers
92
rm -f $dir/15-dfs.support.append $dir/16-dfs.datanode.max.xcievers
94
if [ "`config-get webhdfs`" = "True" ]
97
$dir/14-dfs.support.append || :
98
[ "`config-get webhdfs`" = "True" ] && \
96
99
config_element "dfs.webhdfs.enabled" "true" > \
97
$dir/20-dfs.webhdfs.enabled
99
rm -f $dir/20-dfs.webhdfs.enabled
100
$dir/15-dfs.webhdfs.enabled || :
101
# TODO - secure this hadoop installation!
102
config_element "dfs.permissions" "false" > \
103
$dir/16-dfs.permissions
101
104
dotdee --update /etc/hadoop/conf.juju/hdfs-site.xml || true
102
105
# Configure Hadoop Core
103
106
dir=`dotdee --dir /etc/hadoop/conf.juju/core-site.xml`
104
107
config_basic $dir
105
109
config_element "hadoop.tmp.dir" "/var/lib/hadoop/cache/\${user.name}" > \
106
$dir/11-hadoop.tmp.dir
110
$dir/10-hadoop.tmp.dir
107
111
config_element "io.file.buffer.size" "`config-get io.file.buffer.size`" > \
108
$dir/12-io.file.buffer.size
112
$dir/11-io.file.buffer.size
109
113
dotdee --update /etc/hadoop/conf.juju/core-site.xml || true
113
117
dir=`dotdee --dir /etc/hadoop/conf.juju/core-site.xml`
114
118
juju-log "Configuring service unit as $1..."
120
datanode|secondarynamenode)
117
121
namenode_address=`relation-get private-address`
118
122
config_element "fs.default.name" "hdfs://$namenode_address:8020" > \
119
$dir/10-fs.default.name
123
$dir/50-fs.default.name
122
126
private_address=`unit-get private-address`
123
127
config_element "fs.default.name" "hdfs://$private_address:8020" > \
124
$dir/10-fs.default.name
128
$dir/50-fs.default.name
127
131
dotdee --update /etc/hadoop/conf.juju/core-site.xml || true
132
dir=`dotdee --dir /etc/hadoop/conf.juju/hdfs-site.xml`
135
namenode_address=`relation-get private-address`
136
config_element "dfs.http.address" "$namenode_address:50070" > \
137
$dir/50-dfs.http.address
140
dotdee --update /etc/hadoop/conf.juju/hdfs-site.xml || true
130
143
install_packages () {
131
juju-log "Installing extra packages for $1"
134
apt-get -y install hadoop-namenode
145
namenode|datanode|secondarynamenode)
146
juju-log "Installing extra packages for $1"
147
apt-get -y install hadoop-$1
137
apt-get -y install hadoop-datanode
150
juju-log "Unsupported role $1..."
165
178
# Determines what type of node this is
166
179
resolve_role () {
167
180
role="unconfigured"
168
[ -d /usr/share/doc/hadoop-namenode ] && role="namenode" || :
169
[ -d /usr/share/doc/hadoop-datanode ] && role="datanode" || :
181
[ -d /usr/share/doc/hadoop-namenode ] && \
183
[ -d /usr/share/doc/hadoop-secondarynamenode ] && \
184
role="secondarynamenode" || :
185
[ -d /usr/share/doc/hadoop-datanode ] && \
172
189
role=`resolve_role`
199
216
juju-log "Already configured as namenode"
200
217
# Unit should only ever assume this role once so no
201
# further action is required
204
juju-log "Already configured as another personality"
218
# further action is required - this prevents adding
219
# an additional unit to the namenode master breaking
223
juju-log "Already configured as another role: $role"
228
secondarynamenode-relation-joined)
231
juju-log "Configuring this unit as a secondarynamenode"
232
role="secondarynamenode"
233
install_packages $role
239
juju-log "Already configured as secondarynamenode"
240
# Unit should only ever assume this role once so no
241
# further action is required - this prevents adding
242
# an additional unit to the namenode master breaking
246
juju-log "Already configured as another role: $role"
220
262
juju-log "Already configured as datanode"
221
263
# Unit should only ever assume this role once so no
222
# further action is required
264
# further action is required - this prevents adding
265
# an additional unit to the namenode master breaking
225
juju-log "Already configured as another personality"
269
juju-log "Already configured as another role: $role"