最近的工作主要围绕文本分类,当前的解决方案是用R语言清洗数据,用tm包生成bag of words,用libsvm与liblinear训练模型。这个方案可以hold住6/70万的训练集:

LIBLINEAR is efficient for large-scale document classification. Let us consider a large set rcv1 test.binary with 677,399 instances. $ time liblinear-1.21/train -c 0.25 -v 5 rcv1_test.binary Cross Validation Accuracy = 97.8538% 68.84s Note that reading the data takes most of the time. The training of each training/validation split is less than four seconds

当前我们用3万的训练集已经得到不错的分类结果,所以这个方案应该是足够用的;但是,在特征构造上R存在比较严重的性能缺陷,一方面暂时没有看到tm包与word2vec的结合方案,另一方面用R做PCA就是一个灾难(非常吃内存,也进一步导致计算很慢)。这时,碰巧看到spark mlib的文档里有一堆文本挖掘相关的工具,如:word2vec以及pca等等,因此下定决心把spark用起来。

spark安装

1.需要提前安装的软件:Java 7+, Scala 2.10, Hadoop

CentOS上Java的安装可以参考之前的文章CentOS 6安装Java 1.8; Scala最新的版本已经2.11但是spark官方提供的预编译下载包是基于Scala 2.10,并且自己编译Spark源码挺麻烦的所以还是建议使用2.10版本的Scala; 自己尝试过按照官方文档手动安装社区版的hadoop和hive,真是有非常多的坑。目前公司线上与线下环境使用的都是Cloudera发布的Hadoop即CDH,先安装cloudera manager,然后再通过cloudera manager的web版管理界面安装需要的服务,如:Hadoop,Hbase,Hive等等,Cloudera会帮忙配置好基本的环境变量,为非专职运维人员上手Hadoop平台提供了大大大便利。由于公司线上线下集群都已安装了cloudera manager,等以后有新集群再体验一遍安装流程吧。

2.spark下载

我选择了不依赖于特定Hadoop版本的二进制包进行下载:spark-1.6.1-bin-without-hadoop,这里官方文档有提示:

Users can also download a “Hadoop free” binary and run Spark with any Hadoop version by augmenting Spark’s classpath.

为了使用HDFS和YARN,Spark需要使用Hadoop的client libraryies,为此我们需要让环境变量SPARK_DIST_CLASSPATH包含Hadoop的jar包: [bash] # 得益于Cloudera安装Hadoop时会自动做一些配置操作,Hadoop相关的二进制文件可以用以下命令快速找到 echo $(hadoop classpath) # 在Spark目录下./conf/spark-env.sh里进行配置: export SPARK_DIST_CLASSPATH=$(hadoop classpath) # 再添加一下SPARK_HOME方便以后操作: export SPARK_HOME=/usr/share/spark-1.6.1-bin-without-hadoop [/bash]

3.环境变量配置

最后再持久化一些环境变量: [bash] # 编辑环境变量相关脚本: vim /etc/profile.d/spark.sh #!/bin/bash SPARK_DIST_CLASSPATH=$(hadoop classpath) SPARK_HOME=/usr/share/spark-1.6.1-bin-without-hadoop PATH=$SPARK_HOME/bin:$PATH HADOOP_CONF_DIR=/etc/hive/conf export SPARK_DIST_CLASSPATH SPARK_HOME HADOOP_CONF_DIR # 使脚本生效 source /etc/profile.d/spark.sh [/bash]

4.解决"Unable to load native-hadoop library for your platform"

Spark与HDFS以及YARN经常要配合使用,使用hadoop命令的时候有些同学会遇到"Unable to load native-hadoop library for your platform"警告,虽然不影响正常使用,但是总是提示挺烦人的。一番Google之后了解到hadoop自带的本地库版本是基于32位机器编译到,所以在64位的机子上面会出问题。自己编译64位的本地库太麻烦,可以从http://dl.bintray.com/sequenceiq/sequenceiq-bin/下载编译好的本地库,覆盖掉$HADOOP_HOME/lib/native/下的文件。

Spark开发

尝试过在IntelliJ里通过run直接运行Spark代码一直没成功,不过Spark要提交到集群上运行还是需要打成jar包的,因此决定能够在IDE里使用代码补全功能即可,之后用bash进行打包并提交到集群上。 [scala] # 1.用IntelliJ新建sbt项目 # 2.编辑项目的build.sbt文件(类似于maven的.pom): name := "SparkTest" version := "1.0" scalaVersion := "2.10.6" libraryDependencies += "org.apache.spark" %% "spark-core" % "1.6.1" # 3.在项目的./src/main/scala/下新建Scala类,SimpleApp: /* SimpleApp.scala */ import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf object SimpleApp { def main(args: Array[String]) { val logFile = "file:///Users/xiexiaowen/spark-1.6.1-bin-without-hadoop/README.md" // Should be some file on your system val conf = new SparkConf().setAppName("Simple Application") val sc = new SparkContext(conf) val logData = sc.textFile(logFile, 2).cache() val numAs = logData.filter(line => line.contains("a")).count() val numBs = logData.filter(line => line.contains("b")).count() println("Lines with a: %s, Lines with b: %s".format(numAs, numBs)) } } # 4.将spark依赖hadoop的包添加到项目的libraries里 # (这样就有代码补全了,且不会报错找不到依赖包了): $SPARK_HOME/lib/spark-assembly-1.6.1-hadoop2.2.0.jar # 5.打包:进入项目目录,运行sbt package # 打好的包在./target/scala-2.10/sparktest_2.10-1.0.jar # 6.将jar包提交到集群上运行 $SPARK_HOME/bin/spark-submit \ --class "SimpleApp" \ --master yarn \ sparktest_2.10-1.0.jar # 7.需要注意的是,standalone与Mesos的集群模式, # --master参数上指定的是集群地址, # 在YARN模式上ResourceManager的地址将从Hadoop配置中获得, # --master参数是yarn。 # 因此也需要确保环境变量HADOOP_CONF_DIR指定为$HADOOP_HOME/etc/hadoop [/scala] 以上便是Spark起步的一些内容,sbt的普及度还是没有maven高,用maven替代sbt来打包应该也是可以Google到到,这个遇到具体项目再考虑吧。 接下来该去好好翻一翻官网上的Programming Guide(基础知识),Spark SQL, DataFrames and Datasets Guide(数据输入与输出),以及最需要的Machine Learning Library (MLlib) Guide(机器学习库)了。

CentOS 6.7 hadoop free版本Spark 1.6安装与使用的更多相关文章

  1. centos 7下Hadoop 2.7.2 伪分布式安装

    centos 7 下Hadoop 2.7.2 伪分布式安装,安装jdk,免密匙登录,配置mapreduce,配置YARN.详细步骤如下: 1.0 安装JDK 1.1 查看是否安装了openjdk [l ...

  2. Centos 6.5 hadoop 2.2.0 全分布式安装

    hadoop 2.2.0 cluster setup 环境: 操作系统:Centos 6.5 jdk:jdk1.7.0_51 hadoop版本:2.2.0 hostname    ip master ...

  3. CentOS系统下Hadoop 2.4.1集群安装配置(简易版)

    安装配置 1.软件下载 JDK下载:jdk-7u65-linux-i586.tar.gz http://www.oracle.com/technetwork/java/javase/downloads ...

  4. centos下搭建python双版本环境

    目录 centos下搭建python双版本环境 一.安装python3 1.理清自带python位置 2.更新用于下载编译python3的相关包 3.安装pip 4.用pip安装wget 5.用wge ...

  5. 64位centos 下编译 hadoop 2.6.0 源码

    64位os下为啥要编译hadoop就不解释了,百度一下就能知道原因,下面是步骤: 前提:编译源码所在的机器,必须能上网,否则建议不要尝试了 一. 下载必要的组件 a) 下载hadoop源码 (当前最新 ...

  6. Hadoop发行版本介绍

    前言 从2011年开始,中国进入大数据风起云涌的时代,以Hadoop为代表的家族软件,占据了大数据处理的广阔地盘.开源界及厂商,所有数据软件,无一不向Hadoop靠拢.Hadoop也从小众的高富帅领域 ...

  7. Hadoop 发行版本 Hortonworks 安装详解(一) 准备工作

    一.前言 目前Hadoop发行版非常多,所有这些发行版均是基于Apache Hadoop衍生出来的,之所以有这么多的版本,完全是由Apache Hadoop的开源协议决定的:任何人可以对其进行修改,并 ...

  8. 『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现

    『实践』VirtualBox 5.1.18+Centos 6.8+hadoop 2.7.3搭建hadoop完全分布式集群及基于HDFS的网盘实现 1.基本设定和软件版本 主机名 ip 对应角色 mas ...

  9. Hadoop学习(9)-spark的安装与简单使用

    spark和mapreduce差不多,都是一种计算引擎,spark相对于MapReduce来说,他的区别是,MapReduce会把计算结果放 在磁盘,spark把计算结果既放在磁盘中有放在内存中,ma ...

  10. spark集群安装并集成到hadoop集群

    前言 最近在搞hadoop+spark+python,所以就搭建了一个本地的hadoop环境,基础环境搭建地址hadoop2.7.7 分布式集群安装与配置 本篇博客主要说明,如果搭建spark集群并集 ...

随机推荐

  1. 单兵 Web 快速开发框架!

    Jmix 是低代码? 自从 Jmix 2018 年在中国推广以来(那时叫 CUBA 平台),很多开发者会在使用之前询问我们,Jmix 是不是低代码,扩展性怎么样? 低代码应用程序平台(LCAP)是当今 ...

  2. 概率生成函数(PGF)简记

    基本搬运自<浅谈生成函数在掷骰子问题上的应用>. 对于定义在非负整数上的离散随机变量 \(X\),级数 \(F(z) = \sum\limits_{i\ge 0} \operatornam ...

  3. Java实现简单薪水计算器相关操作代码

    /** * 薪水计算器 * 1.通过键盘输入用户的月薪,每年是几个薪水 * 2.输出用户年薪 * 3.输出一行字"如果年薪超过10万,恭喜你超越了90%的国人:如果年薪超过了20万,恭喜你超 ...

  4. go语言 cmd执行命令,遇到空格或者双引号无法执行成功的解决方案

    大部分go执行cmd命令都是,我也是这样写的 package main import ( "fmt" "os/exec" ) func main() { cmd ...

  5. Intel与AMD之间的故事

    本人中文作文水平仅仅达到小学一年级,通俗易懂,不会术语,对于外行人特别友好,内行人不吝赐教,多谢指正! 背景:Intel(CPU制造商大哥),AMD(二哥,yes) 诺伊斯(Intel创始人,集成电路 ...

  6. Linux 下查看mysql 加载的配置文件, 并且解决报错 “this is incompatible with sql_mode=only_full_group_by”

    # 查看命令地址 which mysql /usr/local/mysql/bin/mysql # 查看配置文件地址 /usr/local/mysql/bin/mysql --verbose --he ...

  7. pytorch学习笔记(10)--完整的模型训练(待完善)

    一.神经网络训练 # file : train.py # time : 2022/8/11 上午10:03 # function : import torchvision.datasets from ...

  8. 常见报错——Uncaught TypeError: document.getElementsByClassName(...).addEventListener is not a function

    这是因为选择器没有正确选择元素对象 document.getElementsByClassName(...)捕捉到的是该类名元素的数组 正确的访问方式应该是: document.getElements ...

  9. 如何给img标签指定默认显示的图片?(已解决)

    1. 使用场景 页面上有很多图片,或者图片很大,这都会使加载的时候出现大片空白,影响用户体验. 2. 解决办法 在CSS里给img指定默认显示的图片,以下是代码: { //**** backgroun ...

  10. [python]tkinter简易的图片浏览器

    import os from tkinter import filedialog, Tk from PIL import Image, ImageTk, ImageSequence import tk ...