Taiwan Hadoop Forum

台灣 Hadoop 技術討論區
現在的時間是 2022-07-03, 20:48

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




發表新文章 回覆主題  [ 29 篇文章 ]  前往頁數 上一頁  123
發表人 內容
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-28, 22:49 
離線

註冊時間: 2013-04-28, 13:05
文章: 4
jazz 你好:
按照你提供的解决方案用hadoop streaming 实现一种图像序列压缩,其中压缩算法是c++实现
其中mapper进程如下:
9 mkdir -p /tmp/$id
10 mkdir -p /tmp/$id/target
11
12 while read line; do
13 input=$line
14 filename=`basename $input`
15 hadoop fs -get $input /tmp/$id/$filename
16 ##其中zlibcompress是master上编译的可执行c++程序
17 ./zlibcompress /tmp/$id/$filename /tmp/$id/target/$filename.gz
18 ##
19 hadoop fs -put /tmp/$id/target/$filename.gz hdfs://10.11.131.114:54310/user/zhe/output/$filename.gz
20 ## cp /tmp/$id/target/$filename.gz ./$filename.gz
21 done
22 rm -rf /tmp/$id

问题是该map进程通过管道的方式运行正常,但是通过streaming 命令后HDFS中指定位置并没有生成的文件,希望能指点下~~ 非常感谢!!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-29, 09:17 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
建議您先確定 hadoop streaming 在 JobTracker 該 Job ID 的狀態是怎樣。
有可能運算超過 10 分鐘,因逾時(time out)而被 JobTracker 強制關閉,
諸如此類的問題。通常都是看 Job 的 log 會比較清楚。

前一陣子跟另一位學生討論 hadoop streaming 的用法,
會印除錯資訊到 STDERR 就能從 Task 的 log 確認執行狀態是跑到哪裡。

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-29, 10:52 
離線

註冊時間: 2013-04-28, 13:05
文章: 4
jazz,你好:
这个是运行结果
packageJobJar: [mapper.sh, zlibcompress, /home/zhang/app/hadoop/tmp/hadoop-unjar7155032962895857506/] [] /tmp/streamjob8738039441676346435.jar tmpDir=null
13/04/29 10:38:33 INFO mapred.FileInputFormat: Total input paths to process : 5
13/04/29 10:38:34 INFO streaming.StreamJob: getLocalDirs(): [/home/zhang/app/hadoop/tmp/mapred/local]
13/04/29 10:38:34 INFO streaming.StreamJob: Running job: job_201304032256_0040
13/04/29 10:38:34 INFO streaming.StreamJob: To kill this job, run:
13/04/29 10:38:34 INFO streaming.StreamJob: /home/zhang/hadoop-1.0.2/libexec/../bin/hadoop job -Dmapred.job.tracker=10.11.131.114:54311 -kill job_201304032256_0040
13/04/29 10:38:34 INFO streaming.StreamJob: Tracking URL: http://10.11.131.114:50030/jobdetails.j ... 32256_0040
13/04/29 10:38:35 INFO streaming.StreamJob: map 0% reduce 0%
13/04/29 10:38:47 INFO streaming.StreamJob: map 20% reduce 0%
13/04/29 10:38:48 INFO streaming.StreamJob: map 80% reduce 0%
13/04/29 10:38:49 INFO streaming.StreamJob: map 100% reduce 0%
13/04/29 10:38:55 INFO streaming.StreamJob: map 100% reduce 100%
13/04/29 10:38:55 INFO streaming.StreamJob: Job complete: job_201304032256_0040
13/04/29 10:38:55 INFO streaming.StreamJob: Output: hdfs://10.11.131.114:54310/user/zhe/output
另外jobtracker状态如下
State: RUNNING
Started: Wed Apr 03 22:56:33 CST 2013
Version: 1.0.2, r1304954
Compiled: Sat Mar 24 23:58:21 UTC 2012 by hortonfo
Identifier: 201304032256
应该不是超时的问题,有一个疑问是:master节点编译的mapper.sh 调用到了本机上编译的c++程序,那么在编写mapp.sh 如何指定该应用程序的路径,是要把该可执行文件上传到hdfs然后在下载到本地再调用吗? 其它tasktracker 如何找到该c++可执行程序。 非常感谢!!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-29, 11:20 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
lexico 寫:
应该不是超时的问题,有一个疑问是:master节点编译的mapper.sh 调用到了本机上编译的c++程序,那么在编写mapp.sh 如何指定该应用程序的路径,是要把该可执行文件上传到hdfs然后在下载到本地再调用吗? 其它tasktracker 如何找到该c++可执行程序。 非常感谢!!


看起來 Job 有完成,但為何沒產生檔案就得細看每個 Task 的過程了。
得再請您查一下 http://10.11.131.114:50030/jobdetails.jsp?jobid=job_201304032256_0040 的 Task Log。

至於 C++ 程式就要看每一台 TaskTracker 節點是否有一樣的環境(Runtime Library)。
可用 -file 參數附掛執行檔給 hadoop streaming,該檔案會連同 Job JAR 檔送到 TaskTracker 的 Child Process。

但我比較擔心的是 dynamic linking 的話,有可能 TaskTracker 並沒有對應的 library
建議要把 C++ 程式碼,編譯成 static linking 執行檔。

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-29, 12:06 
離線

註冊時間: 2013-04-28, 13:05
文章: 4
你好:
非常感谢你的解答,c++可执行程序应该没问题,当我尝试把第23行注释掉后,出现运行错误,
12 while read line; do
13 input=$line
14 filename=`basename $input`
15 hadoop fs -get $input /tmp/$id/$filename
16 ##c++ exe zlibcompress
17 ./zlibcompress /tmp/$id/$filename /tmp/$id/target/$filename.gz
18 ##
19 hadoop fs -put /tmp/$id/target/$filename.gz hdfs://10.11.131.114:54310/user/zhe/output/$filename.gz
20 ## cp /tmp/$id/target/$filename.gz ./$filename.gz
21 done
22
23 ## rm -rf /tmp/$id

错误提示是:Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask:
log日志提示错误The temporary job-output directory hdfs://10.11.131.114:54310/user/zhe/output/_temporary doesn't exist!
不知道为何会创建文件失败, 谢谢!


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-29, 18:09 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
lexico 寫:
错误提示是:Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask:
log日志提示错误The temporary job-output directory hdfs://10.11.131.114:54310/user/zhe/output/_temporary doesn't exist!
不知道为何会创建文件失败, 谢谢!


看起來牽涉到 HDFS 問題,這有點難除錯。因為 Hadoop Streaming 是用啟動 JobTracker 的身份執行。
所以如果 hdfs://10.11.131.114:54310/user/zhe/ 的讀寫權限是 700 (drwx------) 我也不確定是否連 Super User 都進不去。
這牽涉到您用的是不是新版的 CDH 套件 (會分成 hdfs 跟 mapred 兩個身份當各自服務的 Suprt User)

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-04-30, 13:23 
離線

註冊時間: 2013-04-28, 13:05
文章: 4
jazz,非常感谢

上面的问题已经消除,但出现另一个新问题 stderr日志文件显示如下
1 Usage: java FsShell -get [-ignoreCrc] [-crc] <src> <localdst>
2 get: Illegal number of arguments
3 Usage: java FsShell [-get [-ignoreCrc] [-crc] <src> <localdst>]
4 put: Target hdfs://10.11.131.114:54310/user/zhe/output/0.gz already exists
5 java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 255


上面的mapper脚本中没错啊 为什么会提示命令行错误


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-05-01, 21:49 
離線

註冊時間: 2009-11-09, 19:52
文章: 2897
lexico 寫:
1 Usage: java FsShell -get [-ignoreCrc] [-crc] <src> <localdst>
2 get: Illegal number of arguments
3 Usage: java FsShell [-get [-ignoreCrc] [-crc] <src> <localdst>]
4 put: Target hdfs://10.11.131.114:54310/user/zhe/output/0.gz already exists
5 java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 255
上面的mapper脚本中没错啊 为什么会提示命令行错误


也只能說....注意 $input 有沒有可能出現空白或者特殊符號了。
也可以用 "$input" 取代 $input

至於 put 的錯誤說檔案已經存在,所以也代表您必須確認命名方式不會重複。

供參考~

- Jazz


回頂端
 個人資料 E-mail  
 
 文章主題 : Re: 云视频点播平台
文章發表於 : 2013-12-28, 15:16 
離線

註冊時間: 2013-12-20, 19:48
文章: 3
引言回覆:
jazz大大,按照你给我的提示,程序差不多完成了,但是转化出来的FLV文件我想利用yamdi加入关键帧,Linux不太熟,利用FFMPEG和yamid对FLV 视频文件进行处理,linux两个命令怎么用管道串行执行,例如:我的第一个命令是 ffmpeg -i(输入) /home/tuzibuluo/source.flv -f flv -y -o(输出文件的路径) 第二个命令是 yamid -i(输入) (要用到第一个命令的输出文件路径-o 的值) -o(第二个命令yamid输出文件的路径) /home/tuzibuluo/target.flv 怎么把第一命令的输出-o作为第二个命令的 -i 的值,这个命令该怎么写,IO重定向还是管道,完整的命令是?谢谢!


具体的做法能不能用简单的语言详述一下,我实在是没什么思路,先谢谢啦


回頂端
 個人資料 E-mail  
 
顯示文章 :  排序  
發表新文章 回覆主題  [ 29 篇文章 ]  前往頁數 上一頁  123

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


誰在線上

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


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

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