python訪問hdfs文件
Ⅰ 如何將hdfs里某一目錄下的所有文件的文件名讀取出來
最近剛剛接觸到RobotFramework,發現這個工具倒是可以滿足我的要求,而且可以結合seleniumLibrary,用來做web的自動化測試相當不錯。之前我也接觸過selenium,不過感覺那個工具更貼近開發人員使用,有了robotFramework之後,感覺這個工具相當強大,而且是貼近測試人員的。之所以說強大,主要是這些測試腳本都可以用文本格式保存(如txt/html等)
==安裝篇==
如果有想學的朋友可以自己下載以下文件安裝(Google-code里可以找到大部分的安裝文件):
這篇文章的內容比較舊了,最新的安裝指南請查看 更新篇
python-2.7.1.msi(首先要有python,請選擇將Python加入Path)
wxPython2.8-win32-unicode-2.8.11.0-py27.exe(wxPython,必須要的)
robotframework-2.6.0.win32.exe(然後裝robot的Framework)
robotframework-ride-0.38.1.win32.exe(robotFramework的IDE,很不錯)
robotframework-seleniumlibrary-2.8.win32.exe(seleniumLibrary)
安裝成功後
執行[PythonDir]\Scripts\ride.py
看到界面就是安裝成功了。
如果需要AutoIt支持就下載下面2個東東。
AutoItLibrary-1.1
pywin32-216.win32-py2.7.exe
==入門篇==
安裝完成了,這個框架可以說是基於keyword的操作,按F5可以看到所有載入的keyword。
首先新增一個project
然後新增suite
然後新增test case,接著在suite層級add library,把selenium library加進來,添加後按F5檢驗是否添加成功,如圖
OK,繼續在suite的setting里設置suite啟動和結束的keyword,即Start Selenium Server和Stop Selenium Server,他會在運行時幫助我們自動啟動seleniumserver。
接下來在test case里添加一個步驟,open browser(一般用selenium做web測試都要用這個方法來打開瀏覽器),添加後關鍵字變成藍色表示找到關鍵字了,否則可能是拼寫錯誤或者沒有載入相應的library。紅色表示有一個必選參數要給定輸入值,具體參數可以看F5里的keyword說明。
輸入參數,第二個參數默認是firefox,不過我沒裝,就用ie吧。
以上只是一個簡單的例子,沒有詳細說明每個步驟的操作,只是初步介紹。後續再詳細介紹。
Ⅱ python 怎麼把日誌文件寫到hdfs
在IDE中設置project interpreter為python2的路徑即可; 在window中設置python2的路徑到環境變數Path中 在linux中設置python2的路徑到PATH中
Ⅲ python的map和rece和Hadoop的MapRece有什麼關系
關系就是都是基於Map-Rece的處理思想設計出來的。
從用戶角度看功能其實差不多,
Python的Map函數和Hadoop的Map階段對輸入進行逐行處理;
Python的Rece函數和Hadoop的Rece階段對輸入進行累積處理。
但是其實完整的Hadoop MapRece是Map+Shuffle+Sort+Rece過程。
其中Shuffle過程是為了讓分布式機群之間將同Key數據進行互相交換,Sort過程是根據Key對所有數據進行排序,從而才能完成類WordCount功能,而這兩步在Python裡面當然是需要用戶自己去編寫的。
Ⅳ 如何安裝Spark amp;TensorflowOnSpark
安裝JAVA和Hadoop
這里提供一個很好的教程,就是又好用,又好看的教程。
按照這個教程來,基本上就沒有太多坑地完成安裝。不過也要注意一些點。
spark從master發送命令的時候好像是按照路徑尋找文件,因此你一定一定要把集群上所有的計算機的用戶名都配置成一樣的,比如我的都叫ubuntu,而文中的都叫hadoop,這里你要注意,如果你不跟著教程也叫hadoop的話,注意識別裡面有一些命令或者路徑你是不能直接復制的,而是把裡面的hadoop改成你的用戶名,比如在偽分布式配置core-site.xml的時候裡面路徑,你要改成你的實際路徑才可以。
就是在按照教程配置了JAVA_HOME之後還會出現找不到JAVA_HOME的情況,應該修改hadoop/etc/hadoop/hadoop-env.sh中的JAVA_HOME的內容為絕對路徑即可。
2.另外那個ssh免密登錄可以不用這個,因為要搭建的是真集群的,所以這個用不著,搭好了再告訴你。這里如果不設置的話在啟動hadoop的時候可能會報錯在分布式下,可能會出現這種很奇怪的情況:Live nodes只有一個(應該有倆),而且你每次刷新竟然都不一樣。這樣的解決方法是修改hdfs-site.xml,講data.dir改成不一樣的就可以了。
集群管理器如果是新手的話建議直接使用standalone模式(如果你不知道啥是集群管理器的話,那就更這么建議了[微笑]),也就是spark自帶的集群管理器,這就意味著上邊那個教程里的「啟動yarn」這一節你就完全可以跳過了。
然後就沒什麼坑了,bulabula配置好,你就擁有的偽分布式的Hadoop了,你就已經向spark邁進了一大步了。
上面那個是偽分布式的搭建,如果是想要真的分布式的話(分布式就是多台計算機的意思啦),需要看一下這個教程
照著這個教程完全修改一波,而且是每個計算機都要做相同的修改,另外這里有個小坑(也坑了我一晚上),就是如果按照最上面那個教程里搭偽分布式的話,core-site.xml這個文件的這個屬性
要從localhost:9000改成master:9000<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>1234
sudo tar -zxf ~/下載/spark-1.6.0-bin-without-hadoop.tgz -C /usr/local/cd /usr/localsudo mv ./spark-1.6.0-bin-without-hadoop/ ./sparksudo chown -R hadoop:hadoop ./spark # 此處的 hadoop 為你的用戶名1234
cd /usr/local/sparkcp ./conf/spark-env.sh.template ./conf/spark-env.shvim conf/spark-enf.sh123
export HADOOP_HOME=/home/ubuntu/workspace/hadoopexport HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoopexport HADOOP_HDFS_HOME=/home/ubuntu/workspace/hadoopexport SPARK_DIST_CLASSPATH=$(/home/ubuntu/workspace/hadoop/bin/hadoop classpath)export JAVA_HOME=/home/ubuntu/workspace/jdk/export SCALA_HOME=/home/ubuntu/workspace/scalaexport SPARK_MASTER_IP=192.168.1.129export SPARK_WORKER_MEMORY=1Gexport SPARK_MASTER_PORT=7077export SPARK_WORKER_CORES=1export SPARK_WORDER_INSTANCES=2export SPARK_EXECUTOR_INSTANCES=2123456789101112131415161718
--conf spark.executorEnv.LD_LIBRARY_PATH="${JAVA_HOME}/jre/lib/amd64/server"
--conf spark.executorEnv.CLASSPATH="$($HADOOP_HOME/bin/hadoop classpath --glob):${CLASSPATH}" 12
安裝scala和Spark
搭建好了上邊的來我們進行下一個教程[微笑]
1. 安裝scala最好選擇一個2.10.X,這樣對spark支持比較好,不會出現一些幺蛾子。這有個教程,應該是可以的
2. 安裝spark大概是這裡面最簡單的事了吧點這里下載spark。鑒於我們已經安裝好了hadoop,所以我們就下載一個不需要hadoop的spark包,就是這個with user-provided Hadoop這個
我用的是1.6.0好像大家用這個的比較多,最新的已經到2.1.x了。
解壓到你想安裝的目錄
之後很重點的一步是修改spark-env.sh的內容,好像要改好多好多。。。
這里是我的spark-env.sh的一些配置
屬性不明白的可以打開spark-env.sh,裡面前面又好多注釋,講各種屬性的意思。(ps:這里有個SPARK_DIST_CLASSPATH一定要照著改對,否則會運行不起來)
這是給力星大大的教程寫得很好。
3. 分布式spark部署
重點來了,當然,教程在這里
這里好像沒什麼坑,但是好像我記得剛開始的時候別的機器上的worker老是啟動不起來,但是忘記是什麼原因了,可能是免密登錄沒設置還是怎麼的。
照著教程完成了之後,你就獲得了spark的集群辣,撒花~(≧▽≦)/~
ps:這里還有個搭建standalone集群的簡單介紹,Spark的Standalone模式安裝部署
安裝TensorflowOnSpark
這個真是說難也難,說簡單真是巨簡單,因為步驟github上已經寫得好好的了,但是,有些坑,確實會把人坑死的。
雅虎開源的TensorflowOnSpark
1. 啥?你說全是英文看不懂,好吧我也看不懂,不過你想安裝TensorflowOnSpark的話,應該拉到底點這里的wiki site
然後你打開個就看見了和網站上差不多的美妙結果。
==============2017.4.15更新==================
今天在運行程序的時候發生了莫名其妙的bug,主要症狀就是task會卡在某個地方不再進行了,點進去看詳細的task會發現是在某個slave上的某個task卡住了,調試無果。關機重啟之後再次運行不再卡頓,原因大概是系統要求的資源沒有達到,以後遇到這種情況,建議重新調小運行需要的cpu數量以及內存數量等資源配置選項再試試,實在不行就關機重啟,一般都可以解決
==============2017.7.28更新====================
又踩到一個坑是,還是在識別的時候可能會卡住,可能是因為其他的worker中的namenode忘記format了。
另外還有識別的准確率很低的問題,可能是因為python找不到Jar包了,使用以下方法可以:
原來python在寫hdfs文件的時候,找不到對應的jar包,在提交的時候添加如下的配置信息
這里致謝評論區中的「她說巷尾的櫻花開了 2017-07-13 10:10發表 [回復]「 提供解決方法
相關鏈接:
利用IDEA查看和修改spark源碼
修改spark源碼並編譯部署
Ⅳ Python怎麼獲取HDFS文件的編碼格式
你好,你可以利用python3的python3-magic來獲得文件的編碼格式。下面是對應的代碼
import magic
blob = open('unknown-file').read()
m = magic.open(magic.MAGIC_MIME_ENCODING)
m.load()
encoding = m.buffer(blob) # "utf-8" "us-ascii" etc
Ⅵ hadoop用python寫的Map部分哪裡有問題啊
這個item.txt和'user_profile.txt'是什麼文件?
如果是數據文件那應該放到HDFS上,或者自己實現inputformat來提供訪問方式。程序中從標准輸入獲取數據。
如果是運行中的一些參數信息,那應該使用-files選項讓Hadoop框架幫你把文件發送到目標機器上,和maprece的jar包放到相同的臨時目錄下,你才能找到。-files要加在前面,例如:
hadoop jar \$HADOOP_HOME/contrib/streaming/hadoop-0.20.2-streaming.jar -files item.txt -mapper ./python/map.py -recer ./python/rece.py -input /home/hadoop/hello -output /home/hadoop/outpath
如果保證每台主機的相同路徑下都存在這個文件,也可以使用絕對路徑。
命令寫的也有問題,沒有指定輸入輸出目錄。
hadoop jar \$HADOOP_HOME/contrib/streaming/hadoop-0.20.2-streaming.jar -mapper ./python/map.py -recer ./python/rece.py -input /home/hadoop/hello -output /home/hadoop/outpath
其中輸出路徑/home/hadoop/outpath需要是一個之前不存在的路徑,執行maprece的時候會校驗並創建。