- spark学习资料
Liam_ml
AdvancedApacheSpark-SameerFarooqui(Databricks)”(https://www.youtube.com/watch?v=7ooZ4S7Ay6Y)将几天的课程浓缩到了一天,质量非常好。Spark的文档:Overview-Spark1.6.1Documentation,这里面包含项目介绍,代码示例,配置,部署,调优等等,入门使用足够了。Sparkrepo:apa
- Hudi学习 6:Hudi使用
hzp666
Hudihudi数据湖湖仓一体湖仓融合实时数仓
准备工作:1.安装hdfshttps://mp.csdn.net/mp_blog/creation/editor/1096891432.安装sparkspark学习4:spark安装_hzp666的博客-CSDN博客3.安装ScalaHudi学习6:安装和基本操作_hzp666的博客-CSDN博客spark-shell写入和读取hudi2.模拟数据插入hudi使用spark写入数据
- spark学习4:spark安装
hzp666
sparkspark大数据
1.下载spark安装包2.配置环境1.cd/bigdata/spark-3.0.1-bin-hadoop3.2/conf/2.4.添加动态库在hadoop-3.2.2/bin目录下添加hadoop.dll和winutils.exe文件,可以从https://github.com/cdarlint/winutils和https://github.com/steveloughran/winutils
- pyspark学习-自定义udf
heiqizero
sparkspark
#demo1:frompyspark.sqlimportSparkSession,Rowif__name__=='__main__':spark=SparkSession.builder.getOrCreate()num=spark.sparkContext.parallelize([1,2,3,4,5]).map(lambdax:Row(num=x))numDF=spark.createData
- pyspark学习-spark.sql.functions normal函数
heiqizero
sparkspark
1.col#col(col)"""作用:返回一个基于已给列名的列信息场景:类似于dataframe格式中提取data["id"],能够进行计算参数: col:列名 返回: column:返回一个基于已给列名的列信息"""spark=SparkSession.builder.getOrCreate()data=spark.range(3)data.select(col("id").alias(
- [Spark] 如何设置Spark资源
LZhan
转自1.公众号[Spark学习技巧]如何设置Spark资源2.Spark性能优化篇一:资源调优Spark和YARN管理的两个主要资源:CPU和内存应用程序中每个SparkExecutor都具有相同的固定数量的核心和相同的固定堆大小。使用--executor-cores命令行参数或者通过设置spark.executor.cores属性指定核心数;使用--executor-memory命令行参数或者通
- pyspark学习-spark.sql.functions 聚合函数
heiqizero
sparkspark
https://spark.apache.org/docs/3.4.1/api/python/reference/pyspark.sql/functions.html1.approx_count_distinct和count_distinct#approx_count_distinct(col:ColumnOrName,rsd:Optionnal[float]=None)"""作用:返回列col的
- spark学习笔记:弹性分布式数据集RDD(Resilient Distributed Dataset)
黄道婆
bigdata
弹性分布式数据集RDD1.RDD概述1.1什么是RDDRDD(ResilientDistributedDataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。RDD具有数据流模型的特点:自动容错、位置感知性调度和可伸缩性。RDD允许用户在执行多个查询时显式地将数据缓存在内存中,后续的查询能够重用这些数据,这极大地提升了查询速度。D
- pyspark学习_dataframe常用操作_02
heiqizero
sparkspark
#回顾01常用操作frompysparkimportSparkSession,DataFramespark=SparkSession.builder.getOrCreate()peopleDF=spark.read.json("people.json")peopleDF.printSchema()#显示DataFrame的模式信息peopleDF.show()#显示DataFrame的数据信息pe
- Spark学习笔记五:Spark资源调度和任务调度
开发者连小超
一、StageSpark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。stage切割规则切
- pyspark学习_wordcount
heiqizero
sparksparkpython
#统计文件中每个字母出现次数#第一版rdd文件行类型:Aaron,OperatingSystem,100frompysparkimportSparkConf,SparkContextconf=SparkConf().setAppName("RddwordCount").setMaster("local[*]")sc=SparkContext(conf=conf)lines=sc.textFile(
- pyspark学习_RDD转为DataFrame
heiqizero
sparksparkpython
#方法1:反射机制推断RDD模式people.txtTom12Jack13Janny14frompyspark.sqlimportSparkSession,Rowspark=SparkSession.builder.getOrCreate()lines=spark.sparkContext.textFile("people.txt")people=lines.map(lambdax:x.split
- pyspark学习-RDD转换和动作
heiqizero
sparksparkpython
#RDD创建#1.parallelize方法:创建RDD,参数为list,返回RDDsc.parallelize(param:list)#demosc.parallelize(['tom','jack','black'])#2.textFile方法:读取文件,创建RDD,参数为hdfs文件地址或者本地文件地址,返回RDDsc.textFile(param:filepath)#demosc.text
- pyspark学习_dataframe常用操作_01
heiqizero
sparksparkpython
1.创建DataFrame本文使用DataFrame通过读取json文件获取数据,代码如下:frompyspark.sqlimportSparkSessionspark=SparkSeesion.builder.getOrCreate()#创建sparkSessionpeopleDF=spark.read.format("json").load("people.json")"""spark支持读取
- Spark学习(8)-SparkSQL的运行流程,Spark On Hive
技术闲聊DD
大数据hivespark学习
1.SparkSQL的运行流程1.1SparkRDD的执行流程回顾1.2SparkSQL的自动优化RDD的运行会完全按照开发者的代码执行,如果开发者水平有限,RDD的执行效率也会受到影响。而SparkSQL会对写完的代码,执行“自动优化”,以提升代码运行效率,避免开发者水平影响到代码执行效率。这是因为:RDD:内含数据类型不限格式和结构。DataFrame:100%是二维表结构,可以被针对Spar
- Apriori
BluthLeee
Apriori算法原理总结-刘建平FPTree算法原理总结-刘建平PrefixSpan算法原理总结-刘建平用Spark学习FPTree算法和PrefixSpan算法-刘建平
- Spark学习之Spark Core
John Stones
sparkbigdatascala
什么是Spark?(官网:http://spark.apache.org)https://www.cnblogs.com/lq0310/p/9841647.html
- 【大数据】Spark学习笔记
pass night
学习笔记javaspark大数据sql
初识SparkSpark和HadoopHadoopSpark起源时间20052009起源地MapReduceUniversityofCaliforniaBerkeley数据处理引擎BatchBatch编程模型MapReduceResilientdistributedDatesets内存管理DiskBasedJVMManaged延迟高中吞吐量中高优化机制手动手动APILowlevelhighleve
- spark学习之旅(2)之之RDD常用方法
浩哥的技术博客
sparkspark大数据
RDD(ResilientDistributedDataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,它代表一个不可变、可分区、里面的元素可并行计算的集合。这里的弹性指的是RDD可以根据当前情况自动进行内存和硬盘存储的转换简单点讲就是spark中对数据的一个封装,把数据封装进对象,容易操作在spark中所有的计算都是围绕着RDD操作的,每个RDD都被分为多个分区,这些分区运行在集群
- spark学习一-------------------Spark算子最详细介绍
创作者mateo
spark大数据专栏spark学习ajax
Spark学习–spark算子介绍1.基本概念spark算子:为了提供方便的数据处理和计算,spark提供了一系列的算子来进行数据处理。一般算子分为action(执行算子)算子Transformation(懒执行)算子。2.Transformation算子基本介绍简介:transformation被称为懒执行算子,如果没有action算子,则代码是不会执行的,一般分为:map算子:map算子是将r
- 2017.09.06 scala spark学习
RazorH
日记
2.scala没有静态的修饰符,但object下的成员都是静态的,若有同名的class,这其作为它的伴生类。在object中一般可以为伴生类做一些初始化等操作,如我们常常使用的valarray=Array(1,2,3)(ps:其使用了apply方法)scala里的object一般特指的是伴生对象,可以通过对象名直接调用其中的成员,类似Java中的static成员,如果不在当前作用域,需要impor
- spark学习笔记(十一)——sparkStreaming-概述/特点/构架/DStream入门程序wordcount
一个人的牛牛
spark学习sparkscala大数据
目录SparkStreamingsparkStreamingDStreamsparkStreaming特点sparkStreaming构架背压机制DStream入门SparkStreamingsparkStreamingSparkStreaming用于流式数据的处理。SparkStreaming支持的数据输入源很多:Kafka、Flume、Twitter、ZeroMQ和简单的TCP套接字等等。数据
- Spark学习——1.代表性大数据技术
楓尘林间
SparkSpark大数据学习
本篇博客是学习子雨大数据之Spark入门教程的学习笔记,仅作学习之用。1.代表性的大数据技术HadoopSparkFlinkBeam主要计算模式如图1-11.1HadoopHadoop的生态系统图如图1-2开源谷歌GFS,利用MapReduce分布式并行编程,MapReduce和HDFS是Hadoop的两大核心。HDFS分布式文件管理系统Hive数据仓库数据仓库,借助底层HDFS和HBase完成存
- Spark学习笔记一
孤独的偷学者
开发环境的搭建大数据spark
文章目录1Spark架构设计与原理思想1.1Spark初始1.2Spark架构核心1.3Spark的计算阶段1.4Spark执行流程1.4Spark核心模块2Spark运行环境2.1Local模式2.2Standalone模式2.2.1上传与解压Spark压缩包2.2.2默认配置文件的修改2.2.3启动集群2.2.4配置历史服务2.2.5配置高可用(HA)1Spark架构设计与原理思想1.1Spa
- 大数据Spark学习笔记—sparkcore
Int mian[]
大数据大数据sparkhadoopscala分布式
目录Spark概述核心模块Spark编程配置IDEA配置scala环境WordCount案例Spark-Standalone运行环境Local配置步骤集群分工解压文件修改配置启动集群配置历史服务器Spark-Yarn运行环境配置步骤配置历史服务器Windows运行环境配置步骤常用端口号Spark架构核心组件DriverExecutorMaster&WorkerApplicationMasterHa
- 20210127_spark学习笔记
yehaver
spark
一、部分理论spark:由Scala语言开发的快速、通用、可扩展的基于内存的大数据分析引擎。在mapreduce上进行了优化,但没mapreduce稳定。SparkCore是spark平台的基础通用执行引擎,所有其他功能都是基于。它在外部存储系统中提供内存计算和引用数据集。spark最基础的最核心的功能SparkSQL是SparkCore之上的一个组件,它引入了一个称为SchemaRDD的新数据抽
- 【Spark学习笔记】- 1Spark和Hadoop的区别
拉格朗日(Lagrange)
#Spark学习笔记spark学习笔记
目录标题Spark是什么SparkandHadoop首先从时间节点上来看:功能上来看:SparkorHadoopSpark是什么Spark是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。SparkandHadoop在之前的学习中,Hadoop的MapReduce是大家广为熟知的计算框架,那为什么咱们还要学习新的计算框架Spark呢,这里就不得不提到Spark和Hadoop的关系。首先从时间
- Spark学习笔记【基础概念】
java路飞
大数据Sparkspark大数据java
文章目录前言Spark基础Spark是什么spark和hadoop区别Spark核心模块Spark运行模式Spark运行架构运行架构Executor与Core(核)并行度(Parallelism)有向无环图(DAG)spark的提交方式clientclusterSpark核心编程三大数据结构RDD什么是RDD执行原理RDDAPIRDD创建RDD转换算子Action行动算子统计操作RDD序列化RDD
- Spark学习笔记(3)——Spark运行架构
程光CS
#Spark学习笔记
本系列文章内容全部来自尚硅谷教学视频,仅作为个人的学习笔记一、运行架构Spark框架的核心是一个计算引擎,整体来说,它采用了标准master-slave的结构。如下图所示,它展示了一个Spark执行时的基本结构。图形中的Driver表示master,负责管理整个集群中的作业任务调度。图形中的Executor则是slave,负责实际执行任务。二、核心组件由上图可以看出,对于Spark框架有两个核心组
- 【Spark学习笔记】- 4运行架构&核心组件&核心概念
拉格朗日(Lagrange)
#Spark学习笔记spark学习笔记
目录标题1运行架构2核心组件2.1Driver2.2Executor2.3Master&Worker2.4ApplicationMaster3核心概念3.1Executor与Core3.2并行度(Parallelism)3.3有向无环图(DAG)4提交流程4.1YarnClient模式4.2YarnCluster模式5分布式计算模拟5.1Driver5.2Executor5.3Executor25
- Java开发中,spring mvc 的线程怎么调用?
小麦麦子
springmvc
今天逛知乎,看到最近很多人都在问spring mvc 的线程http://www.maiziedu.com/course/java/ 的启动问题,觉得挺有意思的,那哥们儿问的也听仔细,下面的回答也很详尽,分享出来,希望遇对遇到类似问题的Java开发程序猿有所帮助。
问题:
在用spring mvc架构的网站上,设一线程在虚拟机启动时运行,线程里有一全局
- maven依赖范围
bitcarter
maven
1.test 测试的时候才会依赖,编译和打包不依赖,如junit不被打包
2.compile 只有编译和打包时才会依赖
3.provided 编译和测试的时候依赖,打包不依赖,如:tomcat的一些公用jar包
4.runtime 运行时依赖,编译不依赖
5.默认compile
依赖范围compile是支持传递的,test不支持传递
1.传递的意思是项目A,引用
- Jaxb org.xml.sax.saxparseexception : premature end of file
darrenzhu
xmlprematureJAXB
如果在使用JAXB把xml文件unmarshal成vo(XSD自动生成的vo)时碰到如下错误:
org.xml.sax.saxparseexception : premature end of file
很有可能时你直接读取文件为inputstream,然后将inputstream作为构建unmarshal需要的source参数。InputSource inputSource = new In
- CSS Specificity
周凡杨
html权重Specificitycss
有时候对于页面元素设置了样式,可为什么页面的显示没有匹配上呢? because specificity
CSS 的选择符是有权重的,当不同的选择符的样式设置有冲突时,浏览器会采用权重高的选择符设置的样式。
规则:
HTML标签的权重是1
Class 的权重是10
Id 的权重是100
- java与servlet
g21121
servlet
servlet 搞java web开发的人一定不会陌生,而且大家还会时常用到它。
下面是java官方网站上对servlet的介绍: java官网对于servlet的解释 写道
Java Servlet Technology Overview Servlets are the Java platform technology of choice for extending and enha
- eclipse中安装maven插件
510888780
eclipsemaven
1.首先去官网下载 Maven:
http://www.apache.org/dyn/closer.cgi/maven/binaries/apache-maven-3.2.3-bin.tar.gz
下载完成之后将其解压,
我将解压后的文件夹:apache-maven-3.2.3,
并将它放在 D:\tools目录下,
即 maven 最终的路径是:D:\tools\apache-mave
- jpa@OneToOne关联关系
布衣凌宇
jpa
Nruser里的pruserid关联到Pruser的主键id,实现对一个表的增删改,另一个表的数据随之增删改。
Nruser实体类
//*****************************************************************
@Entity
@Table(name="nruser")
@DynamicInsert @Dynam
- 我的spring学习笔记11-Spring中关于声明式事务的配置
aijuans
spring事务配置
这两天学到事务管理这一块,结合到之前的terasoluna框架,觉得书本上讲的还是简单阿。我就把我从书本上学到的再结合实际的项目以及网上看到的一些内容,对声明式事务管理做个整理吧。我看得Spring in Action第二版中只提到了用TransactionProxyFactoryBean和<tx:advice/>,定义注释驱动这三种,我承认后两种的内容很好,很强大。但是实际的项目当中
- java 动态代理简单实现
antlove
javahandlerproxydynamicservice
dynamicproxy.service.HelloService
package dynamicproxy.service;
public interface HelloService {
public void sayHello();
}
dynamicproxy.service.impl.HelloServiceImpl
package dynamicp
- JDBC连接数据库
百合不是茶
JDBC编程JAVA操作oracle数据库
如果我们要想连接oracle公司的数据库,就要首先下载oralce公司的驱动程序,将这个驱动程序的jar包导入到我们工程中;
JDBC链接数据库的代码和固定写法;
1,加载oracle数据库的驱动;
&nb
- 单例模式中的多线程分析
bijian1013
javathread多线程java多线程
谈到单例模式,我们立马会想到饿汉式和懒汉式加载,所谓饿汉式就是在创建类时就创建好了实例,懒汉式在获取实例时才去创建实例,即延迟加载。
饿汉式:
package com.bijian.study;
public class Singleton {
private Singleton() {
}
// 注意这是private 只供内部调用
private static
- javascript读取和修改原型特别需要注意原型的读写不具有对等性
bijian1013
JavaScriptprototype
对于从原型对象继承而来的成员,其读和写具有内在的不对等性。比如有一个对象A,假设它的原型对象是B,B的原型对象是null。如果我们需要读取A对象的name属性值,那么JS会优先在A中查找,如果找到了name属性那么就返回;如果A中没有name属性,那么就到原型B中查找name,如果找到了就返回;如果原型B中也没有
- 【持久化框架MyBatis3六】MyBatis3集成第三方DataSource
bit1129
dataSource
MyBatis内置了数据源的支持,如:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC" />
<data
- 我程序中用到的urldecode和base64decode,MD5
bitcarter
cMD5base64decodeurldecode
这里是base64decode和urldecode,Md5在附件中。因为我是在后台所以需要解码:
string Base64Decode(const char* Data,int DataByte,int& OutByte)
{
//解码表
const char DecodeTable[] =
{
0, 0, 0, 0, 0, 0
- 腾讯资深运维专家周小军:QQ与微信架构的惊天秘密
ronin47
社交领域一直是互联网创业的大热门,从PC到移动端,从OICQ、MSN到QQ。到了移动互联网时代,社交领域应用开始彻底爆发,直奔黄金期。腾讯在过去几年里,社交平台更是火到爆,QQ和微信坐拥几亿的粉丝,QQ空间和朋友圈各种刷屏,写心得,晒照片,秀视频,那么谁来为企鹅保驾护航呢?支撑QQ和微信海量数据背后的架构又有哪些惊天内幕呢?本期大讲堂的内容来自今年2月份ChinaUnix对腾讯社交网络运营服务中心
- java-69-旋转数组的最小元素。把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素
bylijinnan
java
public class MinOfShiftedArray {
/**
* Q69 旋转数组的最小元素
* 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个排好序的数组的一个旋转,输出旋转数组的最小元素。
* 例如数组{3, 4, 5, 1, 2}为{1, 2, 3, 4, 5}的一个旋转,该数组的最小值为1。
*/
publ
- 看博客,应该是有方向的
Cb123456
反省看博客
看博客,应该是有方向的:
我现在就复习以前的,在补补以前不会的,现在还不会的,同时完善完善项目,也看看别人的博客.
我刚突然想到的:
1.应该看计算机组成原理,数据结构,一些算法,还有关于android,java的。
2.对于我,也快大四了,看一些职业规划的,以及一些学习的经验,看看别人的工作总结的.
为什么要写
- [开源与商业]做开源项目的人生活上一定要朴素,尽量减少对官方和商业体系的依赖
comsci
开源项目
为什么这样说呢? 因为科学和技术的发展有时候需要一个平缓和长期的积累过程,但是行政和商业体系本身充满各种不稳定性和不确定性,如果你希望长期从事某个科研项目,但是却又必须依赖于某种行政和商业体系,那其中的过程必定充满各种风险。。。
所以,为避免这种不确定性风险,我
- 一个 sql优化 ([精华] 一个查询优化的分析调整全过程!很值得一看 )
cwqcwqmax9
sql
见 http://www.itpub.net/forum.php?mod=viewthread&tid=239011
Web翻页优化实例
提交时间: 2004-6-18 15:37:49 回复 发消息
环境:
Linux ve
- Hibernat and Ibatis
dashuaifu
Hibernateibatis
Hibernate VS iBATIS 简介 Hibernate 是当前最流行的O/R mapping框架,当前版本是3.05。它出身于sf.net,现在已经成为Jboss的一部分了 iBATIS 是另外一种优秀的O/R mapping框架,当前版本是2.0。目前属于apache的一个子项目了。 相对Hibernate“O/R”而言,iBATIS 是一种“Sql Mappi
- 备份MYSQL脚本
dcj3sjt126com
mysql
#!/bin/sh
# this shell to backup mysql
#
[email protected] (QQ:1413161683 DuChengJiu)
_dbDir=/var/lib/mysql/
_today=`date +%w`
_bakDir=/usr/backup/$_today
[ ! -d $_bakDir ] && mkdir -p
- iOS第三方开源库的吐槽和备忘
dcj3sjt126com
ios
转自
ibireme的博客 做iOS开发总会接触到一些第三方库,这里整理一下,做一些吐槽。 目前比较活跃的社区仍旧是Github,除此以外也有一些不错的库散落在Google Code、SourceForge等地方。由于Github社区太过主流,这里主要介绍一下Github里面流行的iOS库。 首先整理了一份
Github上排名靠
- html wlwmanifest.xml
eoems
htmlxml
所谓优化wp_head()就是把从wp_head中移除不需要元素,同时也可以加快速度。
步骤:
加入到function.php
remove_action('wp_head', 'wp_generator');
//wp-generator移除wordpress的版本号,本身blog的版本号没什么意义,但是如果让恶意玩家看到,可能会用官网公布的漏洞攻击blog
remov
- 浅谈Java定时器发展
hacksin
java并发timer定时器
java在jdk1.3中推出了定时器类Timer,而后在jdk1.5后由Dou Lea从新开发出了支持多线程的ScheduleThreadPoolExecutor,从后者的表现来看,可以考虑完全替代Timer了。
Timer与ScheduleThreadPoolExecutor对比:
1.
Timer始于jdk1.3,其原理是利用一个TimerTask数组当作队列
- 移动端页面侧边导航滑入效果
ini
jqueryWebhtml5cssjavascirpt
效果体验:http://hovertree.com/texiao/mobile/2.htm可以使用移动设备浏览器查看效果。效果使用到jquery-2.1.4.min.js,该版本的jQuery库是用于支持HTML5的浏览器上,不再兼容IE8以前的浏览器,现在移动端浏览器一般都支持HTML5,所以使用该jQuery没问题。HTML文件代码:
<!DOCTYPE html>
<h
- AspectJ+Javasist记录日志
kane_xie
aspectjjavasist
在项目中碰到这样一个需求,对一个服务类的每一个方法,在方法开始和结束的时候分别记录一条日志,内容包括方法名,参数名+参数值以及方法执行的时间。
@Override
public String get(String key) {
// long start = System.currentTimeMillis();
// System.out.println("Be
- redis学习笔记
MJC410621
redisNoSQL
1)nosql数据库主要由以下特点:非关系型的、分布式的、开源的、水平可扩展的。
1,处理超大量的数据
2,运行在便宜的PC服务器集群上,
3,击碎了性能瓶颈。
1)对数据高并发读写。
2)对海量数据的高效率存储和访问。
3)对数据的高扩展性和高可用性。
redis支持的类型:
Sring 类型
set name lijie
get name lijie
set na
- 使用redis实现分布式锁
qifeifei
在多节点的系统中,如何实现分布式锁机制,其中用redis来实现是很好的方法之一,我们先来看一下jedis包中,有个类名BinaryJedis,它有个方法如下:
public Long setnx(final byte[] key, final byte[] value) {
checkIsInMulti();
client.setnx(key, value);
ret
- BI并非万能,中层业务管理报表要另辟蹊径
张老师的菜
大数据BI商业智能信息化
BI是商业智能的缩写,是可以帮助企业做出明智的业务经营决策的工具,其数据来源于各个业务系统,如ERP、CRM、SCM、进销存、HER、OA等。
BI系统不同于传统的管理信息系统,他号称是一个整体应用的解决方案,是融入管理思想的强大系统:有着系统整体的设计思想,支持对所有
- 安装rvm后出现rvm not a function 或者ruby -v后提示没安装ruby的问题
wudixiaotie
function
1.在~/.bashrc最后加入
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
2.重新启动terminal输入:
rvm use ruby-2.2.1 --default
把当前安装的ruby版本设为默