Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2018-07-19, 23:22

所有顯示的時間為 UTC + 8 小時




發表新文章 回覆主題  [ 4 篇文章 ] 
發表人 內容
 文章主題 : 關於讀不到輸入影片(.avi)的問題
文章發表於 : 2017-04-27, 20:55 
離線

註冊時間: 2017-04-27, 20:24
文章: 2
各位大大好:
我是一個初碰hadoop的新手,目前我有一個C++ code想在hadoop上執行,因此我使用了jni來將code包成.so檔,再引入到java code中,再將java code包成jar檔,並且將輸入影片傳送到hadoop上,接著執行jar,但在執行後卻抓不到輸入影片,並且出現c++ code中讀不到影片的提示訊息,想請問各位大大這是什麼原因?
c++ code:
代碼:
#include "DenseTrackStab.h"
#include "Initialize.h"
#include "Descriptors.h"
#include "OpticalFlow.h"
#include <jni.h>
#include "JNItest2.h"

#include <time.h>

using namespace cv;

int show_track = 0; // set show_track = 1, if you want to visualize the         trajectories
int my_i = 1;

JNIEXPORT void JNICALL
Java_JNItest2_helloworld(JNIEnv *env,jobject object, jobjectArray args)
{
    int argc = env->GetArrayLength(args);   
        char* argv[argc];
    printf("%d\n",argc );
     /* convert String[] to const char**    */
    for(int i = 0; i < argc; i++) {

        jstring string = (jstring) env->GetObjectArrayElement(args, i);
        int slength = env->GetStringLength(string);
        char *wchars = (char *)env->GetStringUTFChars(string,NULL);
        argv[i] = wchars;
    }

    VideoCapture capture;
    char* video = argv[0];
    int flag = arg_parse(argc, argv);
    capture.open(video);

    if(!capture.isOpened()) {
        fprintf(stderr, "Could not initialize capturing..\n");
        return;
    }
}

Java code:
代碼:
public class JNItest2 {

public native void helloworld(String[] args);

    static{
        System.loadLibrary("Dense");       
    }
    public static void main(String[] args)
    {       
         new JNItest2().helloworld(args);
    }
}

執行的指令:
hadoop jar /home/604410015/package/JNItest2/src/JNItest2.jar/user/604410015/src01_hrc01_ip64_qi32_qp32_qb32_hier0_s1920x1080p25n400v0.avi |gzip > out.features
麻煩各位了 :roll: 謝謝大大們的幫忙 :)


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 關於讀不到輸入影片(.avi)的問題
文章發表於 : 2017-04-30, 01:43 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
hn26394791 寫:
Java code:
代碼:
public class JNItest2 {

public native void helloworld(String[] args);

    static{
        System.loadLibrary("Dense");       
    }
    public static void main(String[] args)
    {       
         new JNItest2().helloworld(args);
    }
}

執行的指令:
hadoop jar /home/604410015/package/JNItest2/src/JNItest2.jar/user/604410015/src01_hrc01_ip64_qi32_qp32_qb32_hier0_s1920x1080p25n400v0.avi |gzip > out.features
麻煩各位了 :roll: 謝謝大大們的幫忙 :)


單看 Java 程式內容與 hadoop 執行指令,有幾個問題:

(1) 並沒有使用 MapReduce 框架,所以很好奇想問一下 hadoop jar 指令提交後,有錯誤訊息嗎?或者就只是像一般 java jar 執行一樣?
在 JobTracker 或 YARN ResourceManager 有看到 Job 在執行?
(2) 我前陣子有遇到一個 JNI 相關的狀況,是關於 YARN 無法使用 JNI 的問題....可能需要知道您使用的 Hadoop 版本,是否有運行 YARN。
(3) 一般我會建議有這類需求,可以考慮使用 Hadoop Streaming 執行。所以問題回歸到您使用 Hadoop 的用意是想「加速」?是否有多個 AVI 檔案要使用相同的 C++ 程式進行特徵萃取的運算?

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 關於讀不到輸入影片(.avi)的問題
文章發表於 : 2017-05-03, 16:45 
離線

註冊時間: 2017-04-27, 20:24
文章: 2
Jazz大大您好:
(1) 指令提交後並沒有出現錯誤訊息,就像一般java jar執行一樣。
(2) 我使用的Hadoop版本沒有運行到YARN。
(3) 我使用Hadoop的用意是因為原本的影片過大,處理資料時記憶體容量不足,無法在單一電腦上執行,然而我有很多個avi檔,但每次執行時我們只會丟一個avi檔。

目前我有一個疑問,我是否一定需要將java程式改成mapreduce的框架才能夠讀取到影片嗎?

謝謝您願意花時間幫助我解決問題,再次麻煩您了。 :)


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 關於讀不到輸入影片(.avi)的問題
文章發表於 : 2017-05-03, 23:41 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
hn26394791 寫:
目前我有一個疑問,我是否一定需要將java程式改成mapreduce的框架才能夠讀取到影片嗎?


若簡單的回覆,不用改寫成 mapreduce 框架,建議先能使用 Java 程式讀取影片,再往下解決記憶體不足的問題。

hn26394791 寫:
(3) 我使用Hadoop的用意是因為原本的影片過大,處理資料時記憶體容量不足,無法在單一電腦上執行,然而我有很多個avi檔,但每次執行時我們只會丟一個avi檔。


了解,回歸到瓶頸在「記憶體不足」這個根本的問題,要靠 Hadoop 解決,有另一個先決條件:「輸入資料可以分割」。
以 AVI 檔的例子來說,如果不是支援串流的編碼(Ex. X.264),而是像 MPEG-1 / MPEG-2 這類必須從 Header 開始讀
才能解析 Key Frame 的格式,就不具備分割的條件。這個有點牽涉到影音壓縮格式/影像辨識/影像特徵萃取的領域知識,
就只能先請您評估「輸入資料(AVI) 本身是否可以分割,且程式可以獨立處理某一個分割當輸入,也能完成特徵萃取」。

我以前聽過解決這類問題的方式是先將影片切成圖片,再針對圖片去做特徵萃取。
當然現在或許因為 GPU / Deep Learning 技術越來越成熟了,或許有仰賴 GPU 的解法也說不一定。

因爲沒有運行 YARN 或第一代的 MapReduce 運算引擎(JobTracker/TaskTracker),代表您很可能是使用 Local Mode 執行 Hadoop
即便如此,Hadoop MapReduce 是一個 Framework (框架),因此必須照框架的方式撰寫程式碼才能善用 Hadoop MapReduce 的特性。

官方文件:
https://hadoop.apache.org/docs/stable/h ... orial.html

雖然這份教學有點舊了,大致上應該還是可以聽錄影比較能掌握到框架的精神
https://www.youtube.com/watch?v=sStPmXn ... WN&index=6

以下是我以前授課的內容
http://trac.3du.me/cloud/wiki/III150110 (基礎班)
http://trac.3du.me/cloud/wiki/III140705 (進階班 - 有比較多 MapReduce 程式撰寫的範例)

供參考~

- Jazz


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 4 篇文章 ] 

所有顯示的時間為 UTC + 8 小時


誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客


不能 在這個版面發表主題
不能 在這個版面回覆主題
不能 在這個版面編輯您的文章
不能 在這個版面刪除您的文章
不能 在這個版面上傳附加檔案

搜尋:
前往 :  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
正體中文語系由 竹貓星球 維護製作