Dear Wiki user,
You have subscribed to a wiki page or wiki category on "Hama Wiki" for change notification.
The "SpMV" page has been changed by Mikalai Parafeniuk:
http://wiki.apache.org/hama/SpMV?action=diff&rev1=14&rev2=15
In setup stage every peer reads input dense vector from file. After that, framework will
partition matrix rows by the algorithm provided in custom partitioner automatically. After
that local computation is performed. We gain some cells of result vector in bsp procedure,
and they are written to output file. Output file is reread to construct instance of dense
vector for further computation.
=== Implementation ===
+ ==== How to get ====
 Implementation can be found in my GitHub repository [[https://github.com/ParafeniukMikalaj/spmv]]
and patch can be found in [[https://issues.apache.org/jira/browse/HAMA524Apache JIRA]] as
soon as JIRA will become available. GitHub repository contains only classes related to SpMV.
Before you start with SpMV make sure that you have followed [[http://wiki.apache.org/hama/GettingStartedthis]]
guide and set up environment variables and so on. I considered two possible use cases of SpMV:
+ Implementation can be found in my GitHub repository [[https://github.com/ParafeniukMikalaj/spmv]]
and patch can be found in [[https://issues.apache.org/jira/browse/HAMA524Apache JIRA]] as
soon as JIRA will become available. GitHub repository contains only classes related to SpMV.
Before you start with SpMV make sure that you have followed [[http://wiki.apache.org/hama/GettingStartedthis]]
guide and set up environment variables and so on.
+ ==== Optional additional setup ====
+ I considered two possible use cases of SpMV:
1. Usage in pair with `RandomMatrixGenerator`.
2. Usage with arbitrary text files.
In this section you will see how to use SpMV in this two cases. I propose the following
directory structure for the following examples
@@ 44, +47 @@
export HAMA_EXAMPLES=$HAMA_HOME/hamaexamples*.jar
export SPMV=/user/hduser/spmv
}}}
 First variable allows fast access to jar with hama examples, which plased in hama home directory,
second variable is prefix in HDFS for tests in this tutorial. If you not defined this variables
just substitute appropriate values into following scripts.
+ First variable allows fast access to jar with hama examples, which plased in hama home directory,
second variable is prefix in HDFS for tests in this tutorial. If you not defined this variables
just substitute appropriate values into following scripts.<<BR>>
+ ==== Representation of matrices in text format ====
+ It was decided to allow users to work with SpMV through text files. So in this section I
will describe text format for matrices. I decided to represent all matrices and vectors as
follows: each row of the matrix is represented by row index, length of the row, number of
nonzero items, pairs of index and value. All values inside rows are separated by whitespace,
rows are separated by newline. Vectors are represented as matrix rows with arbitrary row index(not
used). So, for example:
+ {{{
+ [1 0 2] 3 2 0 1 2 2
+ [0 0 0] = 3 0
+ [0 5 1] 3 2 1 5 2 1
+ }}}
+ Now let's show some example. Imagine that you need to multiply
+ {{{
+ [1 0 6 0] [2] [38]
+ [0 4 0 0] * [3] = [12]
+ [0 2 3 0] [6] [24]
+ [3 0 0 5] [0] [6]
+ }}}
+ First of all, you should create appropriate text files for input matrix and input vector.
For input matrix file should look like
+ {{{
+ 0 4 2 0 1 2 6
+ 1 4 1 1 4
+ 2 4 2 1 2 2 3
+ 3 4 2 0 3 3 5
+ }}}
+ For vector file should be look like
+ {{{
+ 0 4 3 0 2 1 3 2 6
+ }}}
==== Usage with RandomMatrixGenerator ====
`RandomMatrixGenerator` as a `SpMV` works with sequence file format. So, to multiply random
matrix with random vector we will do the following: generate matrix and vector; convert matrix,
vector and result to text file; view matrix, vector and result. This sequence is described
by the following code snippet:
{{{
@@ 69, +97 @@
10: hadoop dfs cat /user/hduser/spmv/resulttxt/*
0 6 6 0 0.7059786044267415 1 1.0738967463653346 2 0.6274907669206862 3 0.35938205240905363
4 0.18317827331814918 5 0.24541032101100438
}}}
+ We got the expected result. So, now we will explain the meaning of each line in code snippet
above.<<BR>>
Line 0: Clean up of directories related to SpMV tests.<<BR>>
Line 12: Generation of input matrix and vector. In this example we test 6x6 matrix and
1x6 vector multiplication<<BR>>
Line 3: SpMV algorithm.<<BR>>
@@ 85, +114 @@
{{{
Usage: matrixtotext <input matrix dir> <output matrix dir> [number of tasks
(default max)]
}}}
+ To use SpMV in this mode you should provide text files in appropriate format, as described
above.
 To use SpMV in this mode you should provide text files in appropriate format. I decided
to represent all matrices and vectors as follows: each row of the matrix is represented by
row index, length of the row, number of nonzero items, pairs of index and value. All values
inside rows are separated by whitespace, rows are separated by newline. Vectors are represented
as matrix rows with arbitrary row index(not used). So, for example:
 {{{
 [1 0 2] 3 2 0 1 2 2
 [0 0 0] = 3 0
 [0 5 1] 3 2 1 5 2 1
 }}}
 Now let's show some example. Imagine that you need to multiply
 {{{
 [1 0 6 0] [2] [38]
 [0 4 0 0] * [3] = [12]
 [0 2 3 0] [6] [24]
 [3 0 0 5] [0] [6]
 }}}
 First of all, you should create appropriate text files for input matrix and input vector.
For input matrix file should look like
 {{{
 0 4 2 0 1 2 6
 1 4 1 1 4
 2 4 2 1 2 2 3
 3 4 2 0 3 3 5
 }}}
 For vector file should be look like
 {{{
 0 4 3 0 2 1 3 2 6
 }}}
After that you should copy these files to HDFS. If you don't feel comfortable with HDFS
please see [[http://hadoop.apache.org/common/docs/r0.20.0/hdfs_shell.htmlthis tutorial]].
After you have copied input matrix into `matrixtxt` and input vector into `vectortxt`, we
are ready to start. The following code snippet shows, how you can multiply matrices in this
mode. Explanations will be given below.
{{{
1: hama jar $HAMA_EXAMPLES matrixtoseq $SPMV/matrixtxt $SPMV/matrixseq sparse 4
