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的时候会校验并创建。
