最近的工作主要围绕文本分类,当前的解决方案是用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. sql查询多个结果字段通过逗号分隔为同一行显示、sql查询结果有符号分隔的字段拆分多行显示

    一.sql查询多个结果通过逗号分隔为同一行显示 sql查询数据结果 select e.ctrl_desc from t_ctrl_entry e inner join CodeGroupKeyCode ...

  2. TCP怎样保证可靠传输

    TCP的可靠性保证 TCP主要提供了检验和,序列号/确认应答,超时重传,最大消息长度,滑动窗口控制等方法实现了可靠性传输. 检验和 通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错 ...

  3. python基本语法入门

    思维导图 https://gitee.com/starry-tong/python-data/blob/pyimage/day03.png python语法注释 """注 ...

  4. .NET CORE 控制台程序在CentOS 7 后台运行指令

    1.后台运行服务 >/dev/null & 不输出任何信息 & 记录控制台所有信息 记录错误信息 :/dev/null 2>log & 指令:nohup XXX.d ...

  5. 浏览器控件webBrowser

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  6. PCIe卡设计资料保存:536-基于ZU7EV的FMC 通用PCIe卡

    基于ZU7EV的FMC 通用PCIe卡   一.板卡简介 基于3U PXIe的ZU11EG/ZU7EG/ZU7EV的通用 ,实现FMC的数据接口和主控计算,广泛应用于工业控制,检测,视觉处理.支持工业 ...

  7. DotNetCore2.1使用GitLab通过阿里云自动构建镜像上传阿里云仓库在Docker运行

    操作步骤: 1.安装GitLab并添加项目(此处省略安装过程) 2.获取GitLab的Access Tokens 3.创建空的DotNetCore2.1 Api项目 4.项目添加Docker支持,文件 ...

  8. Mongo 常用命令

    1.登入 docker exec -it  mongo mongo  数据库 db.auth("账号","密码") docker exec -it  mongo ...

  9. app内嵌H5踩坑

    内嵌的H5是用的vue2版本开发的,期间有很多的坑要踩: 1.调用app返回上一个页面不触发页面的onmouted和window.onPageShow app返回上一个页面调用的方法并不会出发vue的 ...

  10. SQL Server创建dblink跨库查询

    dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQL Server中如何使用. 一.通过图形化界面直接创建 选择当前 ...