[
https://issues.apache.org/jira/browse/ACCUMULO-1399?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13661445#comment-13661445
]
Eric Newton edited comment on ACCUMULO-1399 at 5/21/13 5:27 PM:
----------------------------------------------------------------
2nd patch includes a script command. See the comment above for the extensions
command. The script command allows you to run scripts using JSR-223 engines. A
list of JSR-223 engines can be found in this thread:
http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages.
Documentation for the scripting feature can be found at
http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/.
Here are some examples:
echo "println(arg1)" > /tmp/hello.rhino
./accumulo shell --fake
list JSR-223 engines on the classpath
{code}
script -l
{code}
execute an inline script
{code}
script -e rhino -s "println('Hello')"
{code}
execute an inline script with 1 arg
{code}
script -e rhino -s "println(arg1)" -a arg1=Hello
{code}
execute an inline script with 2 args
{code}
script -e rhino -s "println(arg1+', '+arg2)" -a arg1=Hello -a arg2=World
{code}
execute a script in a file
{code}
script -e rhino -f /tmp/hello.rhino -a arg1=Hello
{code}
invoke a function in a script
{code}
script -e rhino -s "function hello(arg1) { println('Hello, ' + arg1); }" -fx
hello -a arg1=Dave
{code}
invoke a method on a function
{code}
script -e js -s "var obj = new Object(); obj.hello = function(arg1) {
println('Hello, ' + arg1); }" -obj obj:hello -a arg1=Dave
{code}
I was trying to do something more complicated. The script below compiles and
runs without error, but no data is in the table afterwards. Any idea what I am
missing?
{code}
function testInsert(tableName, numRows) {
connection.tableOperations().create(tableName);
if (!connection.tableOperations().exists(tableName)) {
println("Table does not exist");
return;
}
var bwConfig = new org.apache.accumulo.core.client.BatchWriterConfig();
bwConfig.setMaxMemory(1024);
var bw = connection.createBatchWriter(tableName, bwConfig);
for (var x = 0; x < numRows; x++) {
var mut = new org.apache.accumulo.core.data.Mutation(new
org.apache.hadoop.io.Text(x));
mut.put("cf", "cq", new org.apache.accumulo.core.data.Value(new
java.lang.String("value").getBytes()));
bw.addMutation(mut);
println("Adding " + x);
}
bw.flush();
bw.close();
var scanner = connection.createScanner(tableName, new
org.apache.accumulo.core.security.Authorizations());
var scanIterator = scanner.iterator();
while (scanIterator.hasNext()) {
var entry = scanIterator.next();
println(entry.getKey().toString()+" -> "+entry.getValue());
}
}
{code}
run the test function
{code}
script -e rhino -f /tmp/insert.js -a tableName=foo -a numRows=10 -fx testInsert
{code}
was (Author: dlmarion):
2nd patch includes a script command. See the comment above for the
extensions command. The script command allows you to run scripts using JSR-223
engines. A list of JSR-223 engines can be found in this thread:
http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages.
Documentation for the scripting feature can be found at
http://docs.oracle.com/javase/6/docs/technotes/guides/scripting/.
Here are some examples:
echo "println(arg1)" > /tmp/hello.rhino
./accumulo shell --fake
list JSR-223 engines on the classpath
{code}
script -l
{code}
execute an inline script
{code}
script -e rhino -s "println('Hello')"
{code}
execute an inline script with 1 arg
{code}
script -e rhino -s "println(arg1)" -a arg1=Hello
{code}
execute an inline script with 2 args
{code}
script -e rhino -s "println(arg1+', '+arg2)" -a arg1=Hello -a arg2=World
{code}
execute a script in a file
{code}
script -e rhino -f /tmp/hello.rhino -a arg1=Hello
{code}
invoke a function in a script
{code}
script -e rhino -s "function hello(arg1) { println('Hello, ' + arg1); }" -fx
hello -a arg1=Dave
{code}
invoke a method on a function
{code}
script -e js -s "var obj = new Object(); obj.hello = function(arg1) {
println('Hello, ' + arg1); }" -obj obj:hello -a arg1=Dave
{code}
I was trying to do something more complicated. The script below compiles and
runs without error, but no data is in the table afterwards. Any idea what I am
missing?
{code}
function testInsert(tableName, numRows) {
connection.tableOperations().create(tableName);
if (!connection.tableOperations().exists(tableName)) {
println("Table does not exist");
return;
}
var bwConfig = new org.apache.accumulo.core.client.BatchWriterConfig();
bwConfig.setMaxMemory(1024);
var bw = connection.createBatchWriter(tableName, bwConfig);
for (var x = 0; x < numRows; x++) {
var mut = new org.apache.accumulo.core.data.Mutation(new
org.apache.hadoop.io.Text(x));
bw.addMutation(mut);
println("Adding " + x);
}
bw.flush();
bw.close();
var scanner = connection.createScanner(tableName, new
org.apache.accumulo.core.security.Authorizations());
var scanIterator = scanner.iterator();
while (scanIterator.hasNext()) {
var entry = scanIterator.next();
println(entry.getKey().toString()+" -> "+entry.getValue());
}
}
{code}
run the test function
{code}
script -e rhino -f /tmp/insert.js -a tableName=foo -a numRows=10 -fx testInsert
{code}
> Pluggable commands for the shell
> --------------------------------
>
> Key: ACCUMULO-1399
> URL: https://issues.apache.org/jira/browse/ACCUMULO-1399
> Project: Accumulo
> Issue Type: New Feature
> Components: shell
> Reporter: Dave Marion
> Assignee: Dave Marion
> Priority: Minor
> Fix For: 1.6.0
>
> Attachments: ACCUMULO-1399-1.patch, ACCUMULO-1399-2.patch
>
>
> Proposing modification to the Shell to allow applications to create their own
> set of commands. This might be accomplished using java.util.ServiceLoader or
> something like it. Specifically, I'm thinking of a case where I have a create
> table command that is different than the one provided by the Shell. In my
> case, my create table command may create one or more tables and setup
> iterators on them.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira