notebook远程访问pyspark集群,算法工具神器重磅推荐 书接上文,前段时间图算法十篇之图机器学习系列文章总结系列文章中,我们对图算法有了深入浅出的了解,接下来打算开始更新一系列使用tensorflow1。x2。x动手实现各种经典模型的文章,专门面向小白和经验不那么多的同学,大家可以一起熟悉下整个流程哦 俗话说的好啊,工欲善其事,必先利其器,本文要推荐的这款工具,可以说是算法工程师的神器工具:远程notebook跑集群版pyspark。如上文所说,这个工具的特点就是pyspark和notebook相结合,然后远程访问。当然,有同学用了pyhive和notebook结合也可以访问集群,但是pyhive功能简单,只能查找数据转成本地pandas,数据大一点就崩溃,还不能灵活进行进行分析。这pyhive相对于pyspark的数据分析能力与数据整合能力简直差了十万八千里。这个工具绝对原创,当时找遍全网也没找到解决办法,自己进行多次尝试终于获得成功,谁用谁知道,强烈推荐!!! 才开始调研这个工具的时候问题主要是卡在安装好的notebook没办法和公司集群进行通信,那样实现的就是单机版的pyspark,毫无意义。本文介绍的这个工具能在mac上用spark解决问题,且能将数据在集群和单机之间进行交互,既能调用集群资源又能使用指定机器的单机资源,集群和模型数据完全打通,别提多爽了!!! 本工具适用的背景就是:我们可以在自己的电脑上,通过web连接远程公司服务器上的notebook(当然需要vpn),本质是将远程的某台可以访问公司集群的机器作为driver,使用notebook调用公司的pyspark集群环境进行数据分析、spark模型分布式训练、拉取数据到本地用单机的tensorflow跑模型等。最重要的一点是:支持pyspark和本机单机python程序的实时回显(ReadEvalPrintLoop,REPL),数据模型一手抓,集群单机灵活切换,妥妥的算法工作神器!!! 书接上文,本文原创工具的核心思想就一句话:我们不是在notebook上集成pyspark环境,而是用将pyspark用notebook来显示,并且允许远程访问web访问。 闲言少叙,开始本文的工具介绍吧(1)工具配置流程 如上所述,本工具的核心思想就是:将pyspark用notebook来显示,并且允许远程Web访问。 拆解开来,中间涵盖三个步骤:(1)notebook安装与设置。(2)允许notebook远程访问。(3)pyspark用notebook显示。下面我们分别从这三个步骤来介绍吧!(1。1)notebook安装与插件设置 我们可以使用pip安装notebook:pip3installjupyter。而如果是使用conda安装的话,则是:condainstalljupyternotebook。 notebook的安装非常容易,这里我们不在多说什么,这里介绍一下notebook的插件工具jupytercontribnbextension吧,可以用它添加侧边导航栏、程序执行时间显示、耗时显示、任务进度显示、自动代码补全等功能,感兴趣的可以自己下去调研下,非常好用哦 对于拓展插件,我们可以使用命令:欢迎关注作者公众号算法全栈之路pipinstalljupytercontribnbextensionsjupytercontribnbextensioninstalluser 进行安装,安装完成后重启Jupyter,就会发现在jupyter网址首页上面新增了Nbextensions的tab栏,如下图所示: 我们需要先设置插件工具可用,直接勾选即可。然后假如要添加notebook的侧边栏的话,直接勾选TableofContents(2)即可,其他插件操作同理,页面如下图所示: notebook这个工具,熟悉python开发的同学大多都用过,我就不在赘述了。(1。2)允许notebook远程访问 在这里,我们使用jupyternotebook原生自带的远程访问功能,方便我们将notebook安装在公司可以访问集群的机器上,然后在自己的mac上访问调用spark集群资源。 第一步:生成默认配置文件欢迎关注作者公众号算法全栈之路jupyternotebookgenerateconfig。jupyterjupyternotebookconfig。py 第二步:生成访问密码(token) 终端输入ipython,设置你自己的jupyter访问密码,注意复制输出的sha1:xxxxxxxx密码串欢迎关注作者公众号算法全栈之路ipython中输入以下命令fromnotebook。authimportpasswdpasswd()分别输入密码2次Enterpassword:Verifypassword: 记得复制返回的字符串,下面一步用。 第三步:修改。jupyterjupyternotebookconfig。py配置文件 修改配置文件中对应行如下欢迎关注作者公众号算法全栈之路c。NotebookApp。ipc。NotebookApp。passwordusha:ce。。。刚才复制的那个密文c。NotebookApp。openbrowserFalsec。NotebookApp。port8080可自行指定一个端口,访问时使用该端口 第四步:在服务器上启动jupyternotebook,然后在远程输入密码访问 notebook启动命令:jupyternotebook 最后在自己mac上浏览器里输入:http:ip:8080即可。这里的ip是你公司可以访问集群的那台服务器的ip,可能需要vpn,根据你实际情况而定。 到这里,你的服务端notebook已经安装好了,并且可以远程在自己mac上访问了。(1。3)pyspark用notebook显示 大家都知道,我们在公司里使用spark,无论是sparksubmit还是pyspark命令的二进制文件,均是在spark安装包的bin目录里。通常情况下,我们肯定是可以在服务器上执行sparksubmit或者pyspark命令的,这样就保证了我们spark环境和集群肯定是通着的(如果不能,需要先将pyspark在服务器上本地调通可用)。 而我们也知道,执行pyspark命令之后,默认打开的是ipythonREPL终端。说到这里就明白了吧,我们只要替换ipython成我们刚才已经设定好的允许访问公司服务器的notebook来显示即可!!!而无需再去自己花功夫将notebook和spark集群通信进行适配,简直perfect!!! 而替换pyspark终端显示,仅仅只需要下面这条命令:欢迎关注作者公众号算法全栈之路PYSPARKPYTHONpython3。7PYSPARKDRIVERPYTHONpython3。7PYSPARKDRIVERPYTHONOPTShomeminiconda3envspysparkenvbinjupyternotebooknobrowserport8080profilesfhzgohomebigdataenvsparkbinpysparksparkversion2。4。5stagingqueueadqueuenamemasteryarndeploymodeclientdrivermemory80gdrivercores2executormemory8gexecutorcores2numexecutors30confspark。sql。catalogImplementationhiveconfspark。yarn。priorityVERYHIGHconfspark。driver。maxResultSize200G 命令比较长,中间的代码非常好理解,注意替换你自己机器上的配置路径。 其中:PYSPARKPYTHON和PYSPARKDRIVERPYTHON是你服务器上可以使用pyspark的时候的python版本,而PYSPARKDRIVERPYTHONOPTS则是设定你用自己的notebook替换pyspark机器ipython终端显示的过程,最后面的代码则是常规的启动pyspark的过程了。 如果在最后这里没办法启动成功,首先可以检查下你公司服务器上的pyspark在服务器机器上是否可以完美运行,大概率出问题也是出自这里。毕竟很多人用spark仅仅用sparksubmit提交scalajavapython版本的spark任务,而没有尝试过用pyspark这个二进制命令行。 其中,你们自己公司pyspark支持的python版本和你服务器上python版本是否对齐兼容,也是有隐藏的坑在里面。多花点儿时间把工具和环境调通吧,回报是非常值得的 最后,工具搭建成功了,使用起来长这个样子: 一般来说,我们可以使用下面的代码得到界面上的spark实例对象:欢迎关注作者公众号算法全栈之路importosimportsysimportfindsparkfindspark。init()importos。pathaspathimportimportlibfrompysparkimportStorageLevelfrompyspark。sqlimportSparkSessionfrompyspark。sql。typesimportfrompy4j。protocolimportPy4JJavaErrorfrompyspark。sqlimportfunctionsasfunfrompyspark。sql。functionsimportcolfrompyspark。sqlimportHiveContextfrompyspark。sql。functionsimportfrompyspark。sql。functionsimportlitimportwarningswarnings。filterwarnings(ignore)sparkconfigsetupsparkSparkSession。builder。appName(pysparkapp)。config(spark。submit。deployMode,client)。config(spark。yarn。queue,idmprod)。config(fs。defaultFS,hdfs:warehousestore)。config(spark。kryoserializer。buffer。max,1024m)。config(spark。serializer,org。apache。spark。serializer。KryoSerializer)。config(hive。exec。dynamic。partition。mode,nonstrict)。enableHiveSupport()。getOrCreate()scspark。sparkContextsc。setLogLevel(ERROR)print(driverpythonpath:str(os。environ。get(PYSPARKDRIVERPYTHON)))print(workerpythonpath:str(os。environ。get(PYSPARKPYTHON))) 最后我们可以在自己的mac笔记本上使用pyspark连接公司的集群进行数据分析与数据拉取操作,例如我们可以使用spark。sql()方法读取hive表,或则读取hdfs上parquet文件,就像下面这样: 我们也可以将sparkdataframe数据拉取到服务器driver上,进行单机版的数据分析与模型训练。其中sparkdataframe可以转化为pandasdataframe,我们可以使用下面的语句来进行转化: pandaspdfsparkdf。toPandas() 有了单机版的pandasdataframe,那通常python能干的,我们都可以干。 当然,我们也可以将python的dataframe转成spark的dataframe,使用下面的语句即可:欢迎关注作者公众号算法全栈之路pdfvaluespandaspdf。values。tolist()pdfcolumnspandaspdf。columns。tolist()selectedfeasresultdfspark。createDataFrame(pdfvalues,pdfcolumns)。persist(StorageLevel。MEMORYANDDISK) 按照流程设置完成,则集群数据和单机模型链路完全打通。so,广阔天地,大有作为吧 到这里,notebook远程访问pyspark集群,算法工具神器重磅推荐的全文就写完了。这个工具对于算法工程师的算法实验和工作成果演示都是非常有意义的,可视化everything,希望可以对你有参考作用 码字不易,觉得有收获就动动小手转载一下吧,你的支持是我写下去的最大动力 更多更全更新内容:算法全栈之路 END