最近的工作主要围绕文本分类,当前的解决方案是用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. PKU2506Tiling

    https://blog.csdn.net/Harington/article/details/86612106

  2. 【补题】The 2022 SDUT Summer Trials

    比赛链接 The 2022 SDUT Summer Trials A. Ginger's number 样例恶臭(恼) 签到题 简单分解因数就会发现要求的就是\(gcd\),直接算即可,时间复杂度\( ...

  3. 001、nodelocaldns(/etc/resolv.conf)

    nodelocaldns  pod 中的 /etc/resolv.conf 虽然读取的是 宿主机的/etc/resolv.conf,但是不是实时同步更新的.可能同步更新会有延迟 所以如果  /etc/ ...

  4. .net core 3.1 上传大文件报错413 Payload Too Large

    IIS配置如下 https://www.cnblogs.com/hallejuayahaha/p/12884347.html 代码里面新增 services.Configure<FormOpti ...

  5. javascript的属性描述符

    什么是属性描述对象(attributes object)? 顾名思义,就是用来描述对象属性的对象.javascript内部提供了一个数据结构,用来描述对象的属性以及控制属性的行为. 比如该对象的某属性 ...

  6. grafana嵌入iframe,websoket连接报错400或403(nginx代理)

    1.custom.ini配置文件修改allowed_origins=* 2. nginx中增加配置,如下:

  7. 清除Linux登录记录

    CentOS cat /dev/null > /var/log/wtmp cat /dev/null > /var/log/btmp cat /dev/null > /var/log ...

  8. Mac技术服务, 感谢 点赞打赏

    ​ 首先,非常感谢大家对我的支持和鼓励. 如果需要单独解决Mac问题,您也可以选择付费服务,感谢大家的理解与支持! * 普通问题/软件安装:10元--100元每个(根据具体问题由您而定): * 普通问 ...

  9. shell脚本自动过滤尝试多次连接ip并添加到系统黑名单

    #!/bin/bash cat /var/log/secure|awk '/Failed/{print $(NF-3)}'|sort|uniq -c | awk '{{ print $2 " ...

  10. 解决Idea 中Java编译器的版本自动变成1.5的问题

    可在pom文件中加入以下配置: <build> <plugins> <plugin> <groupId>org.apache.maven.plugins ...